From: Eryu Guan <guaneryu@gmail.com>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
linux-unionfs@vger.kernel.org, fstests@vger.kernel.org
Subject: Re: [PATCH 2/3] open_by_handle: add -s option to sleep and keep files open by handle
Date: Thu, 29 Mar 2018 11:30:39 +0800 [thread overview]
Message-ID: <20180329033039.GI30836@localhost.localdomain> (raw)
In-Reply-To: <1521989591-9496-3-git-send-email-amir73il@gmail.com>
On Sun, Mar 25, 2018 at 05:53:10PM +0300, Amir Goldstein wrote:
> This feature is needed for tests that need to open file by handle and
> then perform operations while that file is open. This will be used by
> an overlay test to keep disconnected dentries in dcache.
>
> Usage: open_by_handle -s <test_dir>
>
> On success, the program will run until it gets a terminating signal.
>
> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
> ---
> src/open_by_handle.c | 28 ++++++++++++++++++++--------
> 1 file changed, 20 insertions(+), 8 deletions(-)
>
> diff --git a/src/open_by_handle.c b/src/open_by_handle.c
> index d3beb78..e4bd29b 100644
> --- a/src/open_by_handle.c
> +++ b/src/open_by_handle.c
> @@ -27,7 +27,7 @@
>
> /*
>
> -usage: open_by_handle [-cludmrwapknh] [<-i|-o> <handles_file>] <test_dir> [num_files]
> +usage: open_by_handle [-cludmrwapknhs] [<-i|-o> <handles_file>] <test_dir> [num_files]
>
> Examples:
>
> @@ -48,9 +48,9 @@ Examples:
> open_by_handle -p -o <handles_file> <test_dir> [N]
>
> 4. Read file handles from file and open files by handle without
> - dropping caches beforehand:
> + dropping caches beforehand. Sleep afterhand to keep files open:
>
> - open_by_handle -np -i <handles_file> <test_dir> [N]
> + open_by_handle -nps -i <handles_file> <test_dir> [N]
>
> 5. Get file handles for existing test set, write data to files,
> drop caches, open all files by handle, read and verify written
> @@ -112,7 +112,7 @@ struct handle {
>
> void usage(void)
> {
> - fprintf(stderr, "usage: open_by_handle [-cludmrwapknh] [<-i|-o> <handles_file>] <test_dir> [num_files]\n");
> + fprintf(stderr, "usage: open_by_handle [-cludmrwapknhs] [<-i|-o> <handles_file>] <test_dir> [num_files]\n");
> fprintf(stderr, "\n");
> fprintf(stderr, "open_by_handle -c <test_dir> [N] - create N test files under test_dir, try to get file handles and exit\n");
> fprintf(stderr, "open_by_handle <test_dir> [N] - get file handles of test files, drop caches and try to open by handle\n");
> @@ -128,6 +128,7 @@ void usage(void)
> fprintf(stderr, "open_by_handle -p <test_dir> - create/delete and try to open by handle also test_dir itself\n");
> fprintf(stderr, "open_by_handle -i <handles_file> <test_dir> [N] - read test files handles from file and try to open by handle\n");
> fprintf(stderr, "open_by_handle -o <handles_file> <test_dir> [N] - get file handles of test files and write handles to file\n");
> + fprintf(stderr, "open_by_handle -s <test_dir> [N] - wait in sleep loop after opening files by handle to keep them open\n");
> exit(EXIT_FAILURE);
> }
>
> @@ -148,12 +149,12 @@ int main(int argc, char **argv)
> int numfiles = 1;
> int create = 0, delete = 0, nlink = 1, move = 0;
> int rd = 0, wr = 0, wrafter = 0, parent = 0;
> - int keepopen = 0, drop_caches = 1;
> + int keepopen = 0, drop_caches = 1, sleep_loop = 0;
>
> if (argc < 2)
> usage();
>
> - while ((c = getopt(argc, argv, "cludmrwapknhi:o:")) != -1) {
> + while ((c = getopt(argc, argv, "cludmrwapknhi:o:s")) != -1) {
> switch (c) {
> case 'c':
> create = 1;
> @@ -209,6 +210,9 @@ int main(int argc, char **argv)
> return EXIT_FAILURE;
> }
> break;
> + case 's':
> + sleep_loop = 1;
> + break;
> default:
> fprintf(stderr, "illegal option '%s'\n", argv[optind]);
> case 'h':
> @@ -308,6 +312,7 @@ int main(int argc, char **argv)
> fprintf(stderr, "failed reading file handle #%d from '%s'\n", i, infile);
> return EXIT_FAILURE;
> }
> + continue;
With this 'continue', it seems we can't keep file open when reading file
handles from a file?
> } else {
> handle[i].fh.handle_bytes = MAX_HANDLE_SZ;
> ret = name_to_handle_at(AT_FDCWD, fname, &handle[i].fh, &mount_id, 0);
> @@ -478,7 +483,8 @@ int main(int argc, char **argv)
> perror(fname);
> return EXIT_FAILURE;
> }
> - close(fd);
> + if (!sleep_loop)
> + close(fd);
> continue;
> } else if (!nlink && !keepopen && fd < 0 && (errno == ENOENT || errno == ESTALE)) {
> continue;
> @@ -529,7 +535,8 @@ int main(int argc, char **argv)
> return EXIT_FAILURE;
> }
> }
> - close(fd);
> + if (!sleep_loop)
> + close(fd);
> } else if (nlink || !(errno == ENOENT || errno == ESTALE)) {
> printf("open_by_handle(%s) returned %d incorrectly on %s dir!\n",
> dname, errno,
> @@ -540,5 +547,10 @@ int main(int argc, char **argv)
>
> if (failed)
> return EXIT_FAILURE;
> +
> + /* Sleep keeping files open by handle */
> + while (sleep_loop)
> + sleep(1);
> +
Better to mention that the program needs to be killed explicitly in
comment.
Otherwise looks fine to me.
Thanks,
Eryu
> return EXIT_SUCCESS;
> }
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2018-03-29 3:30 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-25 14:53 [PATCH 0/3] Yet another overlayfs exportfs test Amir Goldstein
2018-03-25 14:53 ` [PATCH 1/3] open_by_handle: add -n option to suppress drop caches Amir Goldstein
2018-03-29 3:21 ` Eryu Guan
2018-03-25 14:53 ` [PATCH 2/3] open_by_handle: add -s option to sleep and keep files open by handle Amir Goldstein
2018-03-29 3:30 ` Eryu Guan [this message]
2018-03-29 11:59 ` Amir Goldstein
2018-03-25 14:53 ` [PATCH 3/3] overlay: test decoding overlay file handles with warm/cold dentry cache Amir Goldstein
2018-03-29 3:39 ` Eryu Guan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180329033039.GI30836@localhost.localdomain \
--to=guaneryu@gmail.com \
--cc=amir73il@gmail.com \
--cc=fstests@vger.kernel.org \
--cc=linux-unionfs@vger.kernel.org \
--cc=miklos@szeredi.hu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox