summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSongchun Fan <schfan@google.com>2021-05-27 19:28:02 -0700
committerSongchun Fan <schfan@google.com>2021-05-27 19:40:12 -0700
commitacad05d2f946bd7cf43fe77fc9ff0faa8400b514 (patch)
tree149439ab029493f8f77047246835b5daca645be2
parent6cfedb24f8434540fd157fa7399ed04dd3aee863 (diff)
downloadincremental_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.cpp1
-rw-r--r--incfs/include/incfs_ndk.h1
-rw-r--r--incfs/kernel-headers/linux/incrementalfs.h6
-rw-r--r--incfs/tests/incfs_test.cpp18
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));