On Thu, Aug 08, 2019 at 11:11:43AM +0800, Yang Xu wrote: > on 2019/08/07 18:17, Murphy Zhou wrote: > > > And I have a question about LTP itself. > > > > If we run the testcase directly like: > > ./testcases/kernel/syscalls/copy_file_range/copy_file_range02 > > > > to test all_filesystems, for every filesystem, we mkfs and mount it in > > .mntpoint, but we do not chdir to .mntpoint. So we are running tests in > > the same tmpdir, fs type of which does not change while looping > > all_filesystems. Only the .mntpoint in tmpdir has different fs type in > > each loop. > > > > Now we are using this to test cross-device copy in copy_file_range01.c, > > but in copy_file_range02.c, we are not using .mntpint at all, all the > > tests in the all_filesystems loop are running in the same tmpdir. In other > > words, we are NOT testing all filesystems. > > > > Is this expected? > I removed the mnted test for cross-device copy_file_range in copy_file_range02.c. > And I ignore the non-used mntpoint. IMO, we can directly use the FILE_MNTED to test EFBIG on all filesystems, If mntpoint is not used, it makes absolutely NO sense to test all_filesystems. Because in the all_filesystems loop, various supported filesystems are created and mounted in mntpoint. And the copy_file_range tests happens outside of mntpoint. It just repeats the same test several times in the same tmpdir, fs type of which depends on /tmp configuration. When the log prints "testing ext2", it's not the truth. EFBIG is another issue. Thanks, Murphy > > as below: > diff --git a/testcases/kernel/syscalls/copy_file_range/copy_file_range02.c b/testcases/kernel/syscalls/copy_file_range/copy_file_range02.c > index 26bfa008a..67974ffa2 100644 > --- a/testcases/kernel/syscalls/copy_file_range/copy_file_range02.c > +++ b/testcases/kernel/syscalls/copy_file_range/copy_file_range02.c > @@ -49,6 +49,7 @@ static int fd_blkdev; > static int fd_chrdev; > static int fd_fifo; > static int fd_copy; > +static int fd_mnted; > > static int chattr_i_nsup; > static int swap_nsup; > > @@ -73,7 +74,7 @@ static struct tcase { > {&fd_chrdev, 0, EINVAL, 0, CONTSIZE}, > {&fd_fifo, 0, EINVAL, 0, CONTSIZE}, > {&fd_copy, 0, EOVERFLOW, MAX_OFF, ULLONG_MAX}, > - {&fd_copy, 0, EFBIG, MAX_OFF, MIN_OFF}, > + {&fd_mnted, 0, EFBIG, MAX_OFF, MIN_OFF}, > }; > > static int run_command(char *command, char *option, char *file) > @@ -117,7 +118,10 @@ static void verify_copy_file_range(unsigned int n) > tst_res(TPASS | TTERRNO, > "copy_file_range failed as expected"); > } else { > - tst_res(TFAIL | TTERRNO, > + if (tc->exp_err == EFBIG && TST_ERR == EXDEV) > + tst_res(TCONF, "copy_file_range doesn't support cross-device,skip it"); > + else > + tst_res(TFAIL | TTERRNO, > "copy_file_range failed unexpectedly; expected %s, but got", > tst_strerrno(tc->exp_err)); > return; > > @@ -152,6 +156,8 @@ static void cleanup(void) > SAFE_CLOSE(fd_dup); > if (fd_copy > 0) > SAFE_CLOSE(fd_copy); > + if (fd_mnted > 0) > + SAFE_CLOSE(fd_mnted); > SAFE_UNLINK(FILE_FIFO); > } > > @@ -194,6 +200,7 @@ static void setup(void) > > fd_copy = SAFE_OPEN(FILE_COPY_PATH, O_RDWR | O_CREAT | O_TRUNC, 0664); > chattr_i_nsup = run_command("chattr", "+i", FILE_IMMUTABLE_PATH); > + fd_mnted = SAFE_OPEN(FILE_MNTED_PATH, O_RDWR | O_CREAT, 0664); > > if (!tst_fs_has_free(".", sysconf(_SC_PAGESIZE) * 10, TST_BYTES)) { > tst_res(TCONF, "Insufficient disk space to create swap file"); > swap_nsup = 3; > > test12) succeed on extN, failed on both btrfs and xfs, we need to detect filesystem type to handle. Or, I think we > can set a limit on filesize because this kind of user scene is a bit more than the first one , the EFBIG error can be > received easily (Also, we don't need mnt_device mntpoint all_filesystem if so). > What do you think about it? > > > I commented out testcases in copy_file_range02.c other then #12, and add > > some nasty debug info: > > >