Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 63cdd709 authored by Jaegeuk Kim's avatar Jaegeuk Kim
Browse files

logcatd: unset pinning log files



commit 5327d931 ("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: 5327d931 ("logcatd: fallocate and fadvise to logcat files")
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@google.com>
Change-Id: I986221d6d1da9b8e46e63d1be98ddf0ce4cb099f
parent 1b8c391c
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -122,6 +122,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;
@@ -152,6 +164,8 @@ void Logcat::RotateLogs() {
            break;
        }

        closeLogFile(file0.c_str());

        int err = rename(file0.c_str(), file1.c_str());

        if (err < 0 && errno != ENOENT) {