Re: [PATCH 1/2] loop/006: Add test for setting partscan flag
On Tue 23-10-18 11:57:50, Omar Sandoval wrote: > On Tue, Oct 23, 2018 at 12:05:12PM +0200, Jan Kara wrote: > > On Mon 22-10-18 15:52:55, Omar Sandoval wrote: > > > On Thu, Oct 18, 2018 at 12:31:46PM +0200, Jan Kara wrote: > > > > Add test for setting partscan flag. > > > > > > > > Signed-off-by: Jan Kara > > > > > > Sorry I didn't notice this earlier, but loop/001 already does a > > > partition rescan (via losetup -P). Does that cover this test case? > > > > Yes I know. But the partition rescanning on device creation has been > > handled properly while partition rescanning as a result of LOOP_SET_STATUS > > was buggy. That's why I've added this test. > > At least here, losetup -P does a LOOP_SET_STATUS: > > $ sudo strace -e ioctl losetup -f --show -P test.img > ioctl(3, LOOP_CTL_GET_FREE) = 0 > ioctl(4, LOOP_SET_FD, 3)= 0 > ioctl(4, LOOP_SET_STATUS64, {lo_offset=0, lo_number=0, > lo_flags=LO_FLAGS_PARTSCAN, lo_file_name="/home/osandov/test.img", ...}) = 0 > /dev/loop0 > +++ exited with 0 +++ Right, my bad. Just discard this test then. Thanks for noticing this! Honza -- Jan Kara SUSE Labs, CR
Re: [PATCH 1/2] loop/006: Add test for setting partscan flag
On Tue, Oct 23, 2018 at 12:05:12PM +0200, Jan Kara wrote: > On Mon 22-10-18 15:52:55, Omar Sandoval wrote: > > On Thu, Oct 18, 2018 at 12:31:46PM +0200, Jan Kara wrote: > > > Add test for setting partscan flag. > > > > > > Signed-off-by: Jan Kara > > > > Sorry I didn't notice this earlier, but loop/001 already does a > > partition rescan (via losetup -P). Does that cover this test case? > > Yes I know. But the partition rescanning on device creation has been > handled properly while partition rescanning as a result of LOOP_SET_STATUS > was buggy. That's why I've added this test. At least here, losetup -P does a LOOP_SET_STATUS: $ sudo strace -e ioctl losetup -f --show -P test.img ioctl(3, LOOP_CTL_GET_FREE) = 0 ioctl(4, LOOP_SET_FD, 3)= 0 ioctl(4, LOOP_SET_STATUS64, {lo_offset=0, lo_number=0, lo_flags=LO_FLAGS_PARTSCAN, lo_file_name="/home/osandov/test.img", ...}) = 0 /dev/loop0 +++ exited with 0 +++
Re: [PATCH 1/2] loop/006: Add test for setting partscan flag
On Mon 22-10-18 15:52:55, Omar Sandoval wrote: > On Thu, Oct 18, 2018 at 12:31:46PM +0200, Jan Kara wrote: > > Add test for setting partscan flag. > > > > Signed-off-by: Jan Kara > > Sorry I didn't notice this earlier, but loop/001 already does a > partition rescan (via losetup -P). Does that cover this test case? Yes I know. But the partition rescanning on device creation has been handled properly while partition rescanning as a result of LOOP_SET_STATUS was buggy. That's why I've added this test. > > +int main(int argc, char **argv) > > +{ > > + int ret; > > + int fd; > > + struct loop_info64 info; > > + > > + if (argc != 2) > > + usage(argv[0]); > > + > > + fd = open(argv[1], O_RDONLY); > > + if (fd == -1) { > > + perror("open"); > > + return EXIT_FAILURE; > > + } > > + > > + memset(, 0, sizeof(info)); > > + info.lo_flags = LO_FLAGS_PARTSCAN; > > + memcpy(info.lo_file_name, "part", 5); > > What's the significance of this file name? Probably none, I guess I can just delete it. I think I've just copy-pasted it from some other test excercising LOOP_SET_STATUS... Honza -- Jan Kara SUSE Labs, CR
Re: [PATCH 1/2] loop/006: Add test for setting partscan flag
On Thu, Oct 18, 2018 at 12:31:46PM +0200, Jan Kara wrote: > Add test for setting partscan flag. > > Signed-off-by: Jan Kara Sorry I didn't notice this earlier, but loop/001 already does a partition rescan (via losetup -P). Does that cover this test case? > --- > src/Makefile | 3 ++- > src/loop_set_status_partscan.c | 45 > ++ > tests/loop/006 | 33 +++ > tests/loop/006.out | 2 ++ > 4 files changed, 82 insertions(+), 1 deletion(-) > create mode 100644 src/loop_set_status_partscan.c > create mode 100755 tests/loop/006 > create mode 100644 tests/loop/006.out > > diff --git a/src/Makefile b/src/Makefile > index f89f61701179..6dadcbec8beb 100644 > --- a/src/Makefile > +++ b/src/Makefile > @@ -4,7 +4,8 @@ C_TARGETS := \ > openclose \ > sg/dxfer-from-dev \ > sg/syzkaller1 \ > - nbdsetsize > + nbdsetsize \ > + loop_set_status_partscan > > CXX_TARGETS := \ > discontiguous-io > diff --git a/src/loop_set_status_partscan.c b/src/loop_set_status_partscan.c > new file mode 100644 > index ..8873a12e4334 > --- /dev/null > +++ b/src/loop_set_status_partscan.c > @@ -0,0 +1,45 @@ > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +void usage(const char *progname) > +{ > + fprintf(stderr, "usage: %s PATH\n", progname); > + exit(EXIT_FAILURE); > +} > + > +int main(int argc, char **argv) > +{ > + int ret; > + int fd; > + struct loop_info64 info; > + > + if (argc != 2) > + usage(argv[0]); > + > + fd = open(argv[1], O_RDONLY); > + if (fd == -1) { > + perror("open"); > + return EXIT_FAILURE; > + } > + > + memset(, 0, sizeof(info)); > + info.lo_flags = LO_FLAGS_PARTSCAN; > + memcpy(info.lo_file_name, "part", 5); What's the significance of this file name? > + ret = ioctl(fd, LOOP_SET_STATUS64, ); > + if (ret == -1) { > + perror("ioctl"); > + close(fd); > + return EXIT_FAILURE; > + } > + close(fd); > + return EXIT_SUCCESS; > +} [snip]
Re: [PATCH 1/2] loop/006: Add test for setting partscan flag
Looks good, Reviewed-by: Johannes Thumshirn -- Johannes ThumshirnSUSE Labs jthumsh...@suse.de+49 911 74053 689 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: Felix Imendörffer, Jane Smithard, Graham Norton HRB 21284 (AG Nürnberg) Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
[PATCH 1/2] loop/006: Add test for setting partscan flag
Add test for setting partscan flag. Signed-off-by: Jan Kara --- src/Makefile | 3 ++- src/loop_set_status_partscan.c | 45 ++ tests/loop/006 | 33 +++ tests/loop/006.out | 2 ++ 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/loop_set_status_partscan.c create mode 100755 tests/loop/006 create mode 100644 tests/loop/006.out diff --git a/src/Makefile b/src/Makefile index f89f61701179..6dadcbec8beb 100644 --- a/src/Makefile +++ b/src/Makefile @@ -4,7 +4,8 @@ C_TARGETS := \ openclose \ sg/dxfer-from-dev \ sg/syzkaller1 \ - nbdsetsize + nbdsetsize \ + loop_set_status_partscan CXX_TARGETS := \ discontiguous-io diff --git a/src/loop_set_status_partscan.c b/src/loop_set_status_partscan.c new file mode 100644 index ..8873a12e4334 --- /dev/null +++ b/src/loop_set_status_partscan.c @@ -0,0 +1,45 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void usage(const char *progname) +{ + fprintf(stderr, "usage: %s PATH\n", progname); + exit(EXIT_FAILURE); +} + +int main(int argc, char **argv) +{ + int ret; + int fd; + struct loop_info64 info; + + if (argc != 2) + usage(argv[0]); + + fd = open(argv[1], O_RDONLY); + if (fd == -1) { + perror("open"); + return EXIT_FAILURE; + } + + memset(, 0, sizeof(info)); + info.lo_flags = LO_FLAGS_PARTSCAN; + memcpy(info.lo_file_name, "part", 5); + + ret = ioctl(fd, LOOP_SET_STATUS64, ); + if (ret == -1) { + perror("ioctl"); + close(fd); + return EXIT_FAILURE; + } + close(fd); + return EXIT_SUCCESS; +} diff --git a/tests/loop/006 b/tests/loop/006 new file mode 100755 index ..e468d3a20210 --- /dev/null +++ b/tests/loop/006 @@ -0,0 +1,33 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2018 Jan Kara +# +# Regression test for patch "loop: Fix deadlock when calling +# blkdev_reread_part()". We check whether setting partscan flag +# and thus forcing partition reread won't trigger lockdep warning. +# + +. tests/loop/rc + +DESCRIPTION="check for partition rereading deadlock" + +QUICK=1 + +requires() { + _have_src_program loop_set_status_partscan +} + +test() { + local loop_dev + echo "Running ${TEST_NAME}" + + truncate -s 1M "$TMPDIR/file" + if ! loop_dev="$(losetup -f --show "$TMPDIR/file")"; then + return 1 + fi + + src/loop_set_status_partscan "$loop_dev" + losetup -d "$loop_dev" + + echo "Test complete" +} diff --git a/tests/loop/006.out b/tests/loop/006.out new file mode 100644 index ..50bf833f77b0 --- /dev/null +++ b/tests/loop/006.out @@ -0,0 +1,2 @@ +Running loop/006 +Test complete -- 2.16.4