logcatd: unset pinning log files
commit5327d931ac
("logcatd: fallocate and fadvise to logcat files") introduced pinning log files in order to avoid f2fs fragmentation. But, logcatd does not guarantee to write data within fallocated 2MB space. So, we can see some bytes written beyond 2MB boundary which results in pinning small chunks across the filesystem. This makes F2FS GC have to unset the pinning blocks via GC loop. If this happens during checkpoint=disable at booting time, we can see long delay to mount /data accordingly. Bug: 136483670 Bug: 137180754 Bug: 149418646 Fixes:5327d931ac
("logcatd: fallocate and fadvise to logcat files") Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> Change-Id: I986221d6d1da9b8e46e63d1be98ddf0ce4cb099f
This commit is contained in:
parent
efe9defc65
commit
2e5b7c425f
|
@ -123,6 +123,18 @@ static int openLogFile(const char* pathname, size_t sizeKB) {
|
|||
return fd;
|
||||
}
|
||||
|
||||
static void closeLogFile(const char* pathname) {
|
||||
int fd = open(pathname, O_WRONLY | O_CLOEXEC);
|
||||
if (fd == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// no need to check errors
|
||||
__u32 set = 0;
|
||||
ioctl(fd, F2FS_IOC_SET_PIN_FILE, &set);
|
||||
close(fd);
|
||||
}
|
||||
|
||||
void Logcat::RotateLogs() {
|
||||
// Can't rotate logs if we're not outputting to a file
|
||||
if (!output_file_name_) return;
|
||||
|
@ -153,6 +165,8 @@ void Logcat::RotateLogs() {
|
|||
break;
|
||||
}
|
||||
|
||||
closeLogFile(file0.c_str());
|
||||
|
||||
int err = rename(file0.c_str(), file1.c_str());
|
||||
|
||||
if (err < 0 && errno != ENOENT) {
|
||||
|
|
Loading…
Reference in New Issue