diff options
author | Songchun Fan <schfan@google.com> | 2021-05-27 19:28:02 -0700 |
---|---|---|
committer | Songchun Fan <schfan@google.com> | 2021-05-27 19:40:12 -0700 |
commit | acad05d2f946bd7cf43fe77fc9ff0faa8400b514 (patch) | |
tree | 149439ab029493f8f77047246835b5daca645be2 | |
parent | 6cfedb24f8434540fd157fa7399ed04dd3aee863 (diff) | |
download | incremental_delivery-acad05d2f946bd7cf43fe77fc9ff0faa8400b514.tar.gz |
[incfs] report uid of last read error
Sync with kernel change in aosp/1707329
Test: atest libincfs-test
BUG: 187354818
Change-Id: I86b04f6a50d4ee811f9a980a0a55a9870789daa1
-rw-r--r-- | incfs/incfs.cpp | 1 | ||||
-rw-r--r-- | incfs/include/incfs_ndk.h | 1 | ||||
-rw-r--r-- | incfs/kernel-headers/linux/incrementalfs.h | 6 | ||||
-rw-r--r-- | incfs/tests/incfs_test.cpp | 18 |
4 files changed, 20 insertions, 6 deletions
diff --git a/incfs/incfs.cpp b/incfs/incfs.cpp index dba051b..490b907 100644 --- a/incfs/incfs.cpp +++ b/incfs/incfs.cpp @@ -2067,6 +2067,7 @@ IncFsErrorCode IncFs_GetLastReadError(const IncFsControl* control, .timestampUs = args.time_us_out, .block = static_cast<IncFsBlockIndex>(args.page_out), .errorNo = args.errno_out, + .uid = static_cast<IncFsUid>(args.uid_out), }; static_assert(sizeof(args.file_id_out.bytes) == sizeof(lastReadError->id.data)); memcpy(lastReadError->id.data, args.file_id_out.bytes, sizeof(args.file_id_out.bytes)); diff --git a/incfs/include/incfs_ndk.h b/incfs/include/incfs_ndk.h index 6f7548f..2a538bc 100644 --- a/incfs/include/incfs_ndk.h +++ b/incfs/include/incfs_ndk.h @@ -184,6 +184,7 @@ typedef struct { uint64_t timestampUs; IncFsBlockIndex block; uint32_t errorNo; + IncFsUid uid; } IncFsLastReadError; // All functions return -errno in case of failure. diff --git a/incfs/kernel-headers/linux/incrementalfs.h b/incfs/kernel-headers/linux/incrementalfs.h index a38b5b9..d164cd9 100644 --- a/incfs/kernel-headers/linux/incrementalfs.h +++ b/incfs/kernel-headers/linux/incrementalfs.h @@ -573,7 +573,11 @@ struct incfs_get_last_read_error_args { /* errno of last read error */ __u32 errno_out; - __u64 reserved; + /* uid of last read error */ + __u32 uid_out; + + __u32 reserved1; + __u64 reserved2; }; #endif /* _UAPI_LINUX_INCREMENTALFS_H */
\ No newline at end of file diff --git a/incfs/tests/incfs_test.cpp b/incfs/tests/incfs_test.cpp index bd2752e..e651f2e 100644 --- a/incfs/tests/incfs_test.cpp +++ b/incfs/tests/incfs_test.cpp @@ -1153,13 +1153,15 @@ TEST_F(IncFsGetMetricsTest, MetricsWithNoEvents) { IncFsLastReadError lastReadError = {.id = fileId(-1), .timestampUs = static_cast<uint64_t>(-1), .block = static_cast<IncFsBlockIndex>(-1), - .errorNo = static_cast<uint32_t>(-1)}; + .errorNo = static_cast<uint32_t>(-1), + .uid = static_cast<IncFsUid>(-1)}; EXPECT_EQ(0, IncFs_GetLastReadError(control_, &lastReadError)); // All fields should be zero EXPECT_EQ(FileId{}, lastReadError.id); EXPECT_EQ(0, (int)lastReadError.timestampUs); EXPECT_EQ(0, (int)lastReadError.block); EXPECT_EQ(0, (int)lastReadError.errorNo); + EXPECT_EQ(0, (int)lastReadError.uid); IncFsMetrics incfsMetrics = {10, 10, 10, 10, 10, 10, 10, 10, 10}; EXPECT_EQ(0, IncFs_GetMetrics(metrics_key_.c_str(), &incfsMetrics)); @@ -1191,12 +1193,14 @@ TEST_F(IncFsGetMetricsTest, MetricsWithReadsTimeOut) { IncFsLastReadError lastReadError = {.id = fileId(-1), .timestampUs = static_cast<uint64_t>(-1), .block = static_cast<IncFsBlockIndex>(-1), - .errorNo = static_cast<uint32_t>(-1)}; + .errorNo = static_cast<uint32_t>(-1), + .uid = static_cast<IncFsUid>(-1)}; EXPECT_EQ(0, IncFs_GetLastReadError(control_, &lastReadError)); EXPECT_EQ(id, lastReadError.id); EXPECT_TRUE(lastReadError.timestampUs > 0); EXPECT_EQ(0, (int)lastReadError.block); EXPECT_EQ(-ETIME, (int)lastReadError.errorNo); + EXPECT_EQ((int)getuid(), (int)lastReadError.uid); IncFsMetrics incfsMetrics = {10, 10, 10, 10, 10, 10, 10, 10, 10}; EXPECT_EQ(0, IncFs_GetMetrics(metrics_key_.c_str(), &incfsMetrics)); @@ -1256,12 +1260,14 @@ TEST_F(IncFsGetMetricsTest, MetricsWithHashFailure) { IncFsLastReadError lastReadError = {.id = fileId(-1), .timestampUs = static_cast<uint64_t>(-1), .block = static_cast<IncFsBlockIndex>(-1), - .errorNo = static_cast<uint32_t>(-1)}; + .errorNo = static_cast<uint32_t>(-1), + .uid = static_cast<IncFsUid>(-1)}; EXPECT_EQ(0, IncFs_GetLastReadError(control_, &lastReadError)); EXPECT_EQ(0, std::strcmp(lastReadError.id.data, id.data)); EXPECT_TRUE(lastReadError.timestampUs > 0); EXPECT_EQ(0, (int)lastReadError.block); EXPECT_EQ(-EBADMSG, (int)lastReadError.errorNo); + EXPECT_EQ((int)getuid(), (int)lastReadError.uid); IncFsMetrics incfsMetrics = {10, 10, 10, 10, 10, 10, 10, 10, 10}; EXPECT_EQ(0, IncFs_GetMetrics(metrics_key_.c_str(), &incfsMetrics)); @@ -1309,12 +1315,13 @@ TEST_F(IncFsGetMetricsTest, MetricsWithReadsDelayed) { EXPECT_TRUE(android::base::ReadFully(fd, buf, sizeof(buf))); wait_before_write_thread.join(); - IncFsLastReadError lastReadError = {.id = fileId(-1), 1, 1, 1}; + IncFsLastReadError lastReadError = {.id = fileId(-1), 1, 1, 1, 1}; EXPECT_EQ(0, IncFs_GetLastReadError(control_, &lastReadError)); EXPECT_EQ(FileId{}, lastReadError.id); EXPECT_EQ(0, (int)lastReadError.timestampUs); EXPECT_EQ(0, (int)lastReadError.block); EXPECT_EQ(0, (int)lastReadError.errorNo); + EXPECT_EQ(0, (int)lastReadError.uid); IncFsMetrics incfsMetrics = {10, 10, 10, 10, 10, 10, 10, 10, 10}; EXPECT_EQ(0, IncFs_GetMetrics(metrics_key_.c_str(), &incfsMetrics)); @@ -1359,12 +1366,13 @@ TEST_F(IncFsGetMetricsTest, MetricsWithReadsDelayedPerUidTimeout) { ASSERT_GE(fd.get(), 0); ASSERT_TRUE(android::base::ReadFully(fd, buf, sizeof(buf))); - IncFsLastReadError lastReadError = {.id = fileId(-1), 1, 1, 1}; + IncFsLastReadError lastReadError = {.id = fileId(-1), 1, 1, 1, 1}; EXPECT_EQ(0, IncFs_GetLastReadError(control_, &lastReadError)); EXPECT_EQ(FileId{}, lastReadError.id); EXPECT_EQ(0, (int)lastReadError.timestampUs); EXPECT_EQ(0, (int)lastReadError.block); EXPECT_EQ(0, (int)lastReadError.errorNo); + EXPECT_EQ(0, (int)lastReadError.uid); IncFsMetrics incfsMetrics = {10, 10, 10, 10, 10, 10, 10, 10, 10}; EXPECT_EQ(0, IncFs_GetMetrics(metrics_key_.c_str(), &incfsMetrics)); |