Message ID | 155839145791.62682.9311727733965110633.stgit@magnolia (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fstests: various fixes | expand |
On Tue, May 21, 2019 at 1:31 AM Darrick J. Wong <darrick.wong@oracle.com> wrote: > > From: Darrick J. Wong <darrick.wong@oracle.com> > > Commit f8f57747222 ("generic/530: fix shutdown failure of generic/530 in > overlay") improperly clears an overlayfs test failure by shutting down > the filesystem after all the tempfiles are closed, which totally defeats > the purpose of both generic/530 and xfs/501. Revert this commit so we > can fix it properly. > > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Amir Goldstein <amir73il@gmail.com> > --- > src/t_open_tmpfiles.c | 19 +++++++++++++++++++ > tests/generic/530 | 4 +--- > tests/xfs/501 | 4 +--- > 3 files changed, 21 insertions(+), 6 deletions(-) > > > diff --git a/src/t_open_tmpfiles.c b/src/t_open_tmpfiles.c > index 0393c6bd..da9390fd 100644 > --- a/src/t_open_tmpfiles.c > +++ b/src/t_open_tmpfiles.c > @@ -24,6 +24,7 @@ static int min_fd = -1; > static int max_fd = -1; > static unsigned int nr_opened = 0; > static float start_time; > +static int shutdown_fs = 0; > > void clock_time(float *time) > { > @@ -68,6 +69,22 @@ void die(void) > end_time - start_time); > fflush(stdout); > > + if (shutdown_fs) { > + /* > + * Flush the log so that we have to process the > + * unlinked inodes the next time we mount. > + */ > + int flag = XFS_FSOP_GOING_FLAGS_LOGFLUSH; > + int ret; > + > + ret = ioctl(min_fd, XFS_IOC_GOINGDOWN, &flag); > + if (ret) { > + perror("shutdown"); > + exit(2); > + } > + exit(0); > + } > + > clock_time(&start_time); > for (fd = min_fd; fd <= max_fd; fd++) > close(fd); > @@ -143,6 +160,8 @@ int main(int argc, char *argv[]) > if (ret) > perror(argv[1]); > } > + if (argc > 2 && !strcmp(argv[2], "shutdown")) > + shutdown_fs = 1; > > clock_time(&start_time); > while (1) > diff --git a/tests/generic/530 b/tests/generic/530 > index 56c6d32a..b0d188b1 100755 > --- a/tests/generic/530 > +++ b/tests/generic/530 > @@ -49,9 +49,7 @@ ulimit -n $max_files > > # Open a lot of unlinked files > echo create >> $seqres.full > -$here/src/t_open_tmpfiles $SCRATCH_MNT >> $seqres.full > -_scratch_shutdown -f > - > +$here/src/t_open_tmpfiles $SCRATCH_MNT shutdown >> $seqres.full > > # Unmount to prove that we can clean it all > echo umount >> $seqres.full > diff --git a/tests/xfs/501 b/tests/xfs/501 > index 4be9997c..974f3414 100755 > --- a/tests/xfs/501 > +++ b/tests/xfs/501 > @@ -54,9 +54,7 @@ ulimit -n $max_files > > # Open a lot of unlinked files > echo create >> $seqres.full > -$here/src/t_open_tmpfiles $SCRATCH_MNT >> $seqres.full > -_scratch_shutdown -f > - > +$here/src/t_open_tmpfiles $SCRATCH_MNT shutdown >> $seqres.full > > # Unmount to prove that we can clean it all > echo umount >> $seqres.full >
diff --git a/src/t_open_tmpfiles.c b/src/t_open_tmpfiles.c index 0393c6bd..da9390fd 100644 --- a/src/t_open_tmpfiles.c +++ b/src/t_open_tmpfiles.c @@ -24,6 +24,7 @@ static int min_fd = -1; static int max_fd = -1; static unsigned int nr_opened = 0; static float start_time; +static int shutdown_fs = 0; void clock_time(float *time) { @@ -68,6 +69,22 @@ void die(void) end_time - start_time); fflush(stdout); + if (shutdown_fs) { + /* + * Flush the log so that we have to process the + * unlinked inodes the next time we mount. + */ + int flag = XFS_FSOP_GOING_FLAGS_LOGFLUSH; + int ret; + + ret = ioctl(min_fd, XFS_IOC_GOINGDOWN, &flag); + if (ret) { + perror("shutdown"); + exit(2); + } + exit(0); + } + clock_time(&start_time); for (fd = min_fd; fd <= max_fd; fd++) close(fd); @@ -143,6 +160,8 @@ int main(int argc, char *argv[]) if (ret) perror(argv[1]); } + if (argc > 2 && !strcmp(argv[2], "shutdown")) + shutdown_fs = 1; clock_time(&start_time); while (1) diff --git a/tests/generic/530 b/tests/generic/530 index 56c6d32a..b0d188b1 100755 --- a/tests/generic/530 +++ b/tests/generic/530 @@ -49,9 +49,7 @@ ulimit -n $max_files # Open a lot of unlinked files echo create >> $seqres.full -$here/src/t_open_tmpfiles $SCRATCH_MNT >> $seqres.full -_scratch_shutdown -f - +$here/src/t_open_tmpfiles $SCRATCH_MNT shutdown >> $seqres.full # Unmount to prove that we can clean it all echo umount >> $seqres.full diff --git a/tests/xfs/501 b/tests/xfs/501 index 4be9997c..974f3414 100755 --- a/tests/xfs/501 +++ b/tests/xfs/501 @@ -54,9 +54,7 @@ ulimit -n $max_files # Open a lot of unlinked files echo create >> $seqres.full -$here/src/t_open_tmpfiles $SCRATCH_MNT >> $seqres.full -_scratch_shutdown -f - +$here/src/t_open_tmpfiles $SCRATCH_MNT shutdown >> $seqres.full # Unmount to prove that we can clean it all echo umount >> $seqres.full