[LTP] [PATCH v5 2/2] OVL_MNT: setup overlayfs dirs and mount in a separated mountpoint

Amir Goldstein amir73il@gmail.com
Wed May 29 12:55:11 CEST 2019


On Wed, May 29, 2019 at 1:19 PM Murphy Zhou <xzhou@redhat.com> wrote:
>
> Some tests are mounting overlayfs internally and run tests on it.
> This mount can fail if the filesystem we are running on does not
> support overlay mount upon it. For example, we are already running
> tests on overlayfs or NFS, or CIFS. Test will report broken and
> failure.
>
> Fixing this by put overlayfs dirs in a separated mountpoint, like in
> readahead02 by Amir.
>
> Suggested-by: Petr Vorel <pvorel@suse.cz>
> Suggested-by: Amir Goldstein <amir73il@gmail.com>
> Signed-off-by: Murphy Zhou <xzhou@redhat.com>
> ---
>  .../kernel/syscalls/execveat/execveat03.c     | 31 ++--------------
>  testcases/kernel/syscalls/inotify/inotify07.c | 33 ++++-------------
>  testcases/kernel/syscalls/inotify/inotify08.c | 37 +++++--------------
>  .../kernel/syscalls/readahead/readahead02.c   | 33 ++---------------
>  4 files changed, 26 insertions(+), 108 deletions(-)

That's a very nice diffstat! :-)

Reviewed-by: Amir Goldstein <amir73il@gmail.com>



>
> diff --git a/testcases/kernel/syscalls/execveat/execveat03.c b/testcases/kernel/syscalls/execveat/execveat03.c
> index def33923b..7df1b0faa 100644
> --- a/testcases/kernel/syscalls/execveat/execveat03.c
> +++ b/testcases/kernel/syscalls/execveat/execveat03.c
> @@ -55,11 +55,10 @@
>  #include "lapi/fcntl.h"
>  #include "execveat.h"
>
> -#define OVL_MNT "ovl"
>  #define TEST_APP "execveat_child"
>  #define TEST_FILE_PATH OVL_MNT"/"TEST_APP
>
> -static int ovl_mounted;
> +static const char mntpoint[] = OVL_BASE_MNTPOINT;
>
>  static void do_child(void)
>  {
> @@ -86,31 +85,7 @@ static void verify_execveat(void)
>
>  static void setup(void)
>  {
> -       int ret;
> -
>         check_execveat();
> -
> -       /* Setup an overlay mount with lower file */
> -       SAFE_MKDIR("lower", 0755);
> -       SAFE_MKDIR("upper", 0755);
> -       SAFE_MKDIR("work", 0755);
> -       SAFE_MKDIR(OVL_MNT, 0755);
> -       ret = mount("overlay", OVL_MNT, "overlay", 0,
> -                   "lowerdir=lower,upperdir=upper,workdir=work");
> -       if (ret < 0) {
> -               if (errno == ENODEV) {
> -                       tst_brk(TCONF,
> -                               "overlayfs is not configured in this kernel.");
> -               }
> -               tst_brk(TBROK | TERRNO, "overlayfs mount failed");
> -       }
> -       ovl_mounted = 1;
> -}
> -
> -static void cleanup(void)
> -{
> -       if (ovl_mounted)
> -               SAFE_UMOUNT(OVL_MNT);
>  }
>
>  static const char *const resource_files[] = {
> @@ -121,10 +96,12 @@ static const char *const resource_files[] = {
>  static struct tst_test test = {
>         .needs_root = 1,
>         .needs_tmpdir = 1,
> +       .mount_device = 1,
> +       .needs_overlay = 1,
> +       .mntpoint = mntpoint,
>         .forks_child = 1,
>         .child_needs_reinit = 1,
>         .setup = setup,
> -       .cleanup = cleanup,
>         .test_all = verify_execveat,
>         .resource_files = resource_files,
>  };
> diff --git a/testcases/kernel/syscalls/inotify/inotify07.c b/testcases/kernel/syscalls/inotify/inotify07.c
> index 96370b5cf..47817cd42 100644
> --- a/testcases/kernel/syscalls/inotify/inotify07.c
> +++ b/testcases/kernel/syscalls/inotify/inotify07.c
> @@ -73,13 +73,12 @@ struct event_t {
>         unsigned int mask;
>  };
>
> -#define OVL_MNT "ovl"
>  #define DIR_NAME "test_dir"
>  #define DIR_PATH OVL_MNT"/"DIR_NAME
>  #define FILE_NAME "test_file"
>  #define FILE_PATH OVL_MNT"/"DIR_NAME"/"FILE_NAME
>
> -static int ovl_mounted;
> +static const char mntpoint[] = OVL_BASE_MNTPOINT;
>
>  static struct event_t event_set[EVENT_MAX];
>
> @@ -161,27 +160,12 @@ void verify_inotify(void)
>  static void setup(void)
>  {
>         struct stat buf;
> -       int ret;
>
>         /* Setup an overlay mount with lower dir and file */
> -       SAFE_MKDIR("lower", 0755);
> -       SAFE_MKDIR("lower/"DIR_NAME, 0755);
> -       SAFE_TOUCH("lower/"DIR_NAME"/"FILE_NAME, 0644, NULL);
> -       SAFE_MKDIR("upper", 0755);
> -       SAFE_MKDIR("work", 0755);
> -       SAFE_MKDIR(OVL_MNT, 0755);
> -       ret = mount("overlay", OVL_MNT, "overlay", 0,
> -                   "lowerdir=lower,upperdir=upper,workdir=work");
> -       if (ret < 0) {
> -               if (errno == ENODEV) {
> -                       tst_brk(TCONF,
> -                               "overlayfs is not configured in this kernel.");
> -               } else {
> -                       tst_brk(TBROK | TERRNO,
> -                               "overlayfs mount failed");
> -               }
> -       }
> -       ovl_mounted = 1;
> +       SAFE_UMOUNT(OVL_MNT);
> +       SAFE_MKDIR(OVL_LOWER"/"DIR_NAME, 0755);
> +       SAFE_TOUCH(OVL_LOWER"/"DIR_NAME"/"FILE_NAME, 0644, NULL);
> +       SAFE_MOUNT_OVERLAY();
>
>         fd_notify = myinotify_init1(O_NONBLOCK);
>         if (fd_notify < 0) {
> @@ -221,19 +205,18 @@ static void cleanup(void)
>         if (reap_wd && myinotify_rm_watch(fd_notify, wd) < 0) {
>                 tst_res(TWARN,
>                         "inotify_rm_watch (%d, %d) failed,", fd_notify, wd);
> -
>         }
>
>         if (fd_notify > 0)
>                 SAFE_CLOSE(fd_notify);
> -
> -       if (ovl_mounted)
> -               SAFE_UMOUNT(OVL_MNT);
>  }
>
>  static struct tst_test test = {
>         .needs_root = 1,
>         .needs_tmpdir = 1,
> +       .mount_device = 1,
> +       .needs_overlay = 1,
> +       .mntpoint = mntpoint,
>         .setup = setup,
>         .cleanup = cleanup,
>         .test_all = verify_inotify,
> diff --git a/testcases/kernel/syscalls/inotify/inotify08.c b/testcases/kernel/syscalls/inotify/inotify08.c
> index acdb95345..067c01dbb 100644
> --- a/testcases/kernel/syscalls/inotify/inotify08.c
> +++ b/testcases/kernel/syscalls/inotify/inotify08.c
> @@ -74,11 +74,10 @@ struct event_t {
>         unsigned int mask;
>  };
>
> -#define OVL_MNT "ovl"
>  #define FILE_NAME "test_file"
>  #define FILE_PATH OVL_MNT"/"FILE_NAME
>
> -static int ovl_mounted;
> +static const char mntpoint[] = OVL_BASE_MNTPOINT;
>
>  static struct event_t event_set[EVENT_MAX];
>
> @@ -104,8 +103,8 @@ void verify_inotify(void)
>         test_cnt++;
>
>         /* Make sure events on upper/lower do not show in overlay watch */
> -       SAFE_TOUCH("lower/"FILE_NAME, 0644, NULL);
> -       SAFE_TOUCH("upper/"FILE_NAME, 0644, NULL);
> +       SAFE_TOUCH(OVL_LOWER"/"FILE_NAME, 0644, NULL);
> +       SAFE_TOUCH(OVL_UPPER"/"FILE_NAME, 0644, NULL);
>
>         int len = read(fd_notify, event_buf, EVENT_BUF_LEN);
>         if (len == -1 && errno != EAGAIN) {
> @@ -154,32 +153,17 @@ void verify_inotify(void)
>  static void setup(void)
>  {
>         struct stat buf;
> -       int ret;
>
>         /* Setup an overlay mount with lower file */
> -       SAFE_MKDIR("lower", 0755);
> -       SAFE_TOUCH("lower/"FILE_NAME, 0644, NULL);
> -       SAFE_MKDIR("upper", 0755);
> -       SAFE_MKDIR("work", 0755);
> -       SAFE_MKDIR(OVL_MNT, 0755);
> -       ret = mount("overlay", OVL_MNT, "overlay", 0,
> -                   "lowerdir=lower,upperdir=upper,workdir=work");
> -       if (ret < 0) {
> -               if (errno == ENODEV) {
> -                       tst_brk(TCONF,
> -                               "overlayfs is not configured in this kernel.");
> -               } else {
> -                       tst_brk(TBROK | TERRNO,
> -                               "overlayfs mount failed");
> -               }
> -       }
> -       ovl_mounted = 1;
> +       SAFE_UMOUNT(OVL_MNT);
> +       SAFE_TOUCH(OVL_LOWER"/"FILE_NAME, 0644, NULL);
> +       SAFE_MOUNT_OVERLAY();
>
>         fd_notify = myinotify_init1(O_NONBLOCK);
>         if (fd_notify < 0) {
>                 if (errno == ENOSYS) {
>                         tst_brk(TCONF,
> -                               "inotify is not configured in this kernel.");
> +                               "inotify is not configured in this kernel");
>                 } else {
>                         tst_brk(TBROK | TERRNO,
>                                 "inotify_init () failed");
> @@ -217,19 +201,18 @@ static void cleanup(void)
>         if (reap_wd && myinotify_rm_watch(fd_notify, wd) < 0) {
>                 tst_res(TWARN,
>                         "inotify_rm_watch (%d, %d) failed,", fd_notify, wd);
> -
>         }
>
>         if (fd_notify > 0)
>                 SAFE_CLOSE(fd_notify);
> -
> -       if (ovl_mounted)
> -               SAFE_UMOUNT(OVL_MNT);
>  }
>
>  static struct tst_test test = {
>         .needs_root = 1,
>         .needs_tmpdir = 1,
> +       .mount_device = 1,
> +       .needs_overlay = 1,
> +       .mntpoint = mntpoint,
>         .setup = setup,
>         .cleanup = cleanup,
>         .test_all = verify_inotify,
> diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c
> index 39ddbd583..f6e07173d 100644
> --- a/testcases/kernel/syscalls/readahead/readahead02.c
> +++ b/testcases/kernel/syscalls/readahead/readahead02.c
> @@ -44,16 +44,11 @@ static int pagesize;
>  static unsigned long cached_max;
>  static int ovl_mounted;
>
> -#define MNTPOINT        "mntpoint"
> -#define OVL_LOWER      MNTPOINT"/lower"
> -#define OVL_UPPER      MNTPOINT"/upper"
> -#define OVL_WORK       MNTPOINT"/work"
> -#define OVL_MNT                MNTPOINT"/ovl"
>  static int readahead_length  = 4096;
>  static char sys_bdi_ra_path[PATH_MAX];
>  static int orig_bdi_limit;
>
> -static const char mntpoint[] = MNTPOINT;
> +static const char mntpoint[] = OVL_BASE_MNTPOINT;
>
>  static struct tst_option options[] = {
>         {"s:", &opt_fsizestr, "-s    testfile size (default 64MB)"},
> @@ -132,7 +127,8 @@ static void create_testfile(int use_overlay)
>         char *tmp;
>         size_t i;
>
> -       sprintf(testfile, "%s/testfile", use_overlay ? OVL_MNT : MNTPOINT);
> +       sprintf(testfile, "%s/testfile",
> +               use_overlay ? OVL_MNT : OVL_BASE_MNTPOINT);
>         tst_res(TINFO, "creating test file of size: %zu", testfile_size);
>         tmp = SAFE_MALLOC(pagesize);
>
> @@ -329,27 +325,6 @@ static void test_readahead(unsigned int n)
>         }
>  }
>
> -static void setup_overlay(void)
> -{
> -       int ret;
> -
> -       /* Setup an overlay mount with lower dir and file */
> -       SAFE_MKDIR(OVL_LOWER, 0755);
> -       SAFE_MKDIR(OVL_UPPER, 0755);
> -       SAFE_MKDIR(OVL_WORK, 0755);
> -       SAFE_MKDIR(OVL_MNT, 0755);
> -       ret = mount("overlay", OVL_MNT, "overlay", 0, "lowerdir="OVL_LOWER
> -                   ",upperdir="OVL_UPPER",workdir="OVL_WORK);
> -       if (ret < 0) {
> -               if (errno == ENODEV) {
> -                       tst_res(TINFO,
> -                               "overlayfs is not configured in this kernel.");
> -                       return;
> -               }
> -               tst_brk(TBROK | TERRNO, "overlayfs mount failed");
> -       }
> -       ovl_mounted = 1;
> -}
>
>  /*
>   * We try raising bdi readahead limit as much as we can. We write
> @@ -413,7 +388,7 @@ static void setup(void)
>         setup_readahead_length();
>         tst_res(TINFO, "readahead length: %d", readahead_length);
>
> -       setup_overlay();
> +       ovl_mounted = TST_MOUNT_OVERLAY();
>  }
>
>  static void cleanup(void)
> --
> 2.21.0
>


More information about the ltp mailing list