From: Cyril Hrubis <chrubis@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v6 1/3] lib: alter find_free_loopdev()
Date: Mon, 29 Jul 2019 15:01:07 +0200 [thread overview]
Message-ID: <20190729130107.GA27006@rei.lan> (raw)
In-Reply-To: <1564030915-3211-1-git-send-email-xuyang2018.jy@cn.fujitsu.com>
Hi!
> +int tst_find_free_loopdev(const char *path, size_t path_len);
> /*
> * Reads test block device stat file and returns the bytes written since the
> * last call of this function.
> diff --git a/lib/tst_device.c b/lib/tst_device.c
> index 65fcc1337..f2516fb08 100644
> --- a/lib/tst_device.c
> +++ b/lib/tst_device.c
> @@ -53,22 +53,22 @@ static const char *dev_variants[] = {
> "/dev/block/loop%i"
> };
>
> -static int set_dev_path(int dev)
> +static int set_dev_path(int dev, char *path, size_t path_len)
> {
> unsigned int i;
> struct stat st;
>
> for (i = 0; i < ARRAY_SIZE(dev_variants); i++) {
> - snprintf(dev_path, sizeof(dev_path), dev_variants[i], dev);
> + snprintf(path, path_len, dev_variants[i], dev);
>
> - if (stat(dev_path, &st) == 0 && S_ISBLK(st.st_mode))
> + if (stat(path, &st) == 0 && S_ISBLK(st.st_mode))
> return 1;
> }
>
> return 0;
> }
>
> -static int find_free_loopdev(void)
> +int tst_find_free_loopdev(char *path, size_t path_len)
> {
> int ctl_fd, dev_fd, rc, i;
> struct loop_info loopinfo;
> @@ -80,12 +80,14 @@ static int find_free_loopdev(void)
> rc = ioctl(ctl_fd, LOOP_CTL_GET_FREE);
> close(ctl_fd);
> if (rc >= 0) {
> - set_dev_path(rc);
> - tst_resm(TINFO, "Found free device '%s'", dev_path);
> - return 0;
> + if (path)
> + set_dev_path(rc, path, path_len);
> + tst_resm(TINFO, "Found free device %d '%s'",
> + rc, path ?: "");
> + return rc;
> }
> tst_resm(TINFO, "Couldn't find free loop device");
> - return 1;
> + return -1;
> }
>
> switch (errno) {
> @@ -104,24 +106,24 @@ static int find_free_loopdev(void)
> * Older way is to iterate over /dev/loop%i and /dev/loop/%i and try
> * LOOP_GET_STATUS ioctl() which fails for free loop devices.
> */
> - for (i = 0; i < 256; i++) {
> + for (i = 0; path && i < 256; i++) {
There is still a small problem here in the fallback code for older
kernels. The way we detect a free device there is by opening the device
and doing the LOOP_GET_STATUS ioctl(). So by disabling this loop if path
is not set we broke the detection on older kernels when NULL is passed
to the function.
We should work with a local temporary path in this loop and copy it over
to the path if we are succesfull and if path is not NULL.
> - if (!set_dev_path(i))
> + if (!set_dev_path(i, path, path_len))
> continue;
>
> - dev_fd = open(dev_path, O_RDONLY);
> + dev_fd = open(path, O_RDONLY);
>
> if (dev_fd < 0)
> continue;
>
> if (ioctl(dev_fd, LOOP_GET_STATUS, &loopinfo) == 0) {
> - tst_resm(TINFO, "Device '%s' in use", dev_path);
> + tst_resm(TINFO, "Device '%s' in use", path);
> } else {
> if (errno != ENXIO)
> continue;
> - tst_resm(TINFO, "Found free device '%s'", dev_path);
> + tst_resm(TINFO, "Found free device '%s'", path);
> close(dev_fd);
> - return 0;
> + return i;
> }
>
> close(dev_fd);
> @@ -129,7 +131,7 @@ static int find_free_loopdev(void)
>
> tst_resm(TINFO, "No free devices found");
>
> - return 1;
> + return -1;
> }
--
Cyril Hrubis
chrubis@suse.cz
next prev parent reply other threads:[~2019-07-29 13:01 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-03 3:41 [LTP] [PATCH] syscalls/copy_file_range02: increase coverage and remove EXDEV test Yang Xu
2019-07-05 15:22 ` Amir Goldstein
2019-07-05 20:42 ` [LTP] [PATCH v2] " Yang Xu
2019-07-08 15:17 ` Amir Goldstein
2019-07-09 6:57 ` Yang Xu
2019-07-09 10:06 ` Amir Goldstein
2019-07-10 7:18 ` [LTP] [PATCH v3 1/3] lib: alter find_free_loopdev() Yang Xu
2019-07-10 7:18 ` [LTP] [PATCH v3 2/3] syscalls/copy_file_range01: add cross-device test Yang Xu
2019-07-10 7:50 ` Amir Goldstein
2019-07-10 8:22 ` Yang Xu
2019-07-10 7:18 ` [LTP] [PATCH v3 3/3] syscalls/copy_file_range02: increase coverage and remove EXDEV test Yang Xu
2019-07-10 7:57 ` Amir Goldstein
2019-07-10 9:31 ` Yang Xu
2019-07-10 10:53 ` [LTP] [PATCH v4 1/3] lib: alter find_free_loopdev() Yang Xu
2019-07-10 10:53 ` [LTP] [PATCH v4 2/3] syscalls/copy_file_range01: add cross-device test Yang Xu
2019-07-10 15:56 ` Xiao Yang
2019-07-11 6:18 ` Yang Xu
2019-07-10 10:53 ` [LTP] [PATCH v4 3/3] syscalls/copy_file_range02: increase coverage and remove EXDEV test Yang Xu
2019-07-10 13:57 ` [LTP] [PATCH v4 1/3] lib: alter find_free_loopdev() Cyril Hrubis
2019-07-11 4:00 ` Yang Xu
2019-07-11 12:51 ` Cyril Hrubis
2019-07-12 5:25 ` Yang Xu
2019-07-17 5:29 ` Yang Xu
2019-07-17 6:10 ` Amir Goldstein
2019-07-17 9:44 ` [LTP] [PATCH v5 " Yang Xu
2019-07-17 9:44 ` [LTP] [PATCH v5 2/3] syscalls/copy_file_range01: add cross-device test Yang Xu
2019-07-29 13:56 ` Petr Vorel
2019-07-29 13:59 ` Petr Vorel
2019-07-17 9:44 ` [LTP] [PATCH v5 3/3] syscalls/copy_file_range02: increase coverage and remove EXDEV test Yang Xu
2019-07-17 10:14 ` [LTP] [PATCH v5 1/3] lib: alter find_free_loopdev() Amir Goldstein
2019-07-17 10:34 ` Yang Xu
2019-07-17 10:54 ` Cyril Hrubis
2019-07-18 7:30 ` Yang Xu
2019-07-25 5:01 ` [LTP] [PATCH v6 " Yang Xu
2019-07-25 5:01 ` [LTP] [PATCH v6 2/3] syscalls/copy_file_range01: add cross-device test Yang Xu
2019-07-29 14:00 ` Petr Vorel
2019-07-29 14:10 ` Petr Vorel
2019-07-30 8:31 ` Yang Xu
2019-07-30 13:35 ` Petr Vorel
2019-07-31 7:01 ` Yang Xu
2019-07-31 7:47 ` Petr Vorel
2019-07-25 5:01 ` [LTP] [PATCH v6 3/3] syscalls/copy_file_range02: increase coverage and remove EXDEV test Yang Xu
2019-07-25 5:24 ` Amir Goldstein
2019-07-25 5:44 ` Yang Xu
2019-07-25 8:08 ` Amir Goldstein
2019-07-25 10:13 ` Yang Xu
2019-07-25 11:02 ` Amir Goldstein
2019-07-30 13:26 ` Petr Vorel
2019-07-31 7:09 ` Yang Xu
2019-07-29 13:01 ` Cyril Hrubis [this message]
2019-07-30 10:42 ` [LTP] [PATCH v6 1/3] lib: alter find_free_loopdev() Yang Xu
2019-07-30 11:05 ` Cyril Hrubis
2019-07-31 10:40 ` [LTP] [PATCH v7 " Yang Xu
2019-07-31 10:40 ` [LTP] [PATCH v7 2/3] syscalls/copy_file_range01: add cross-device test Yang Xu
2019-07-31 12:28 ` Petr Vorel
2019-07-31 10:40 ` [LTP] [PATCH v7 3/3] syscalls/copy_file_range02: increase coverage and remove EXDEV test Yang Xu
2019-07-31 12:28 ` Petr Vorel
2019-08-05 6:58 ` Murphy Zhou
2019-08-05 7:11 ` Yang Xu
2019-08-05 10:22 ` Murphy Zhou
2019-08-05 11:01 ` Yang Xu
2019-08-06 6:37 ` Yang Xu
2019-08-06 9:29 ` Murphy Zhou
2019-08-06 16:27 ` Petr Vorel
2019-08-07 10:17 ` Murphy Zhou
2019-08-07 10:17 ` Murphy Zhou
2019-08-07 12:12 ` Dave Chinner
2019-08-07 12:12 ` Dave Chinner
2019-08-08 3:46 ` Murphy Zhou
2019-08-08 3:46 ` Murphy Zhou
2019-08-08 3:11 ` Yang Xu
2019-08-08 3:11 ` Yang Xu
2019-08-08 3:11 ` Yang Xu
2019-08-08 3:57 ` Murphy Zhou
2019-08-08 3:57 ` Murphy Zhou
2019-08-27 10:04 ` Petr Vorel
2019-08-27 10:04 ` Petr Vorel
2019-07-31 12:05 ` [LTP] [PATCH v7 1/3] lib: alter find_free_loopdev() Petr Vorel
2019-07-31 12:28 ` Cyril Hrubis
2019-07-31 12:48 ` Petr Vorel
2019-07-31 13:25 ` Cyril Hrubis
2019-07-31 21:06 ` Petr Vorel
2019-07-31 12:07 ` Petr Vorel
2019-07-10 7:47 ` [LTP] [PATCH v3 " Amir Goldstein
2019-07-10 7:32 ` [LTP] [PATCH v2] syscalls/copy_file_range02: increase coverage and remove EXDEV test Yang Xu
2019-07-08 10:38 ` [LTP] [PATCH] " Yang Xu
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=20190729130107.GA27006@rei.lan \
--to=chrubis@suse.cz \
--cc=ltp@lists.linux.it \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.