Whamcloud - gitweb
LU-14043 lfs: use buffered IO in mirror extend 75/40275/4
authorJohn L. Hammond <jhammond@whamcloud.com>
Fri, 16 Oct 2020 18:37:36 +0000 (13:37 -0500)
committerOleg Drokin <green@whamcloud.com>
Wed, 9 Dec 2020 07:48:16 +0000 (07:48 +0000)
In lfs_mirror_extend() use buffered IO to read from the source
file. Mirror resync will continue to use direct IO on the source.
Call posix_fadvise() at the end of mirroring to discard cached data
from the old and new mirrors.

Signed-off-by: John L. Hammond <jhammond@whamcloud.com>
Change-Id: I7703ae9e30cf30a7e6fbf274114d5986a80d4d3a
Reviewed-on: https://review.whamcloud.com/40275
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Jian Yu <yujian@whamcloud.com>
Reviewed-by: Patrick Farrell <farr0186@gmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/utils/lfs.c

index 15a2f77..a50c958 100644 (file)
@@ -939,17 +939,19 @@ static int migrate_copy_data(int fd_src, int fd_dst, int (*check_file)(int))
                        if (check_file) {
                                rc = check_file(fd_src);
                                if (rc < 0)
-                                       break;
+                                       goto out;
                        }
 
                        rsize = read(fd_src, buf, buf_size);
                        if (rsize < 0) {
                                rc = -errno;
-                               break;
+                               goto out;
                        }
+
                        rpos += rsize;
                        bufoff = 0;
                }
+
                /* eof ? */
                if (rsize == 0)
                        break;
@@ -963,11 +965,13 @@ static int migrate_copy_data(int fd_src, int fd_dst, int (*check_file)(int))
                bufoff += wsize;
        }
 
-       if (rc == 0) {
-               rc = fsync(fd_dst);
-               if (rc < 0)
-                       rc = -errno;
-       }
+       rc = fsync(fd_dst);
+       if (rc < 0)
+               rc = -errno;
+out:
+       /* Try to avoid page cache pollution after migration. */
+       (void)posix_fadvise(fd_src, 0, 0, POSIX_FADV_DONTNEED);
+       (void)posix_fadvise(fd_dst, 0, 0, POSIX_FADV_DONTNEED);
 
        free(buf);
        return rc;
@@ -1797,7 +1801,8 @@ static int mirror_extend_layout(char *name, struct llapi_layout *m_layout,
                }
        }
        llapi_layout_comp_flags_set(m_layout, flags);
-       rc = migrate_open_files(name, 0, NULL, m_layout, &fd, &fdv);
+       rc = migrate_open_files(name, MIGRATION_NONDIRECT, NULL, m_layout, &fd,
+                               &fdv);
        if (rc < 0)
                goto out;