Message ID | 20200604202520.66459-1-maco@android.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | loop: Fix wrong masking of status flags | expand |
On Fri, 5 Jun 2020 at 01:55, Martijn Coenen <maco@android.com> wrote: > > In faf1d25440d6, loop_set_status() now assigns lo_status directly from > the passed in lo_flags, but then fixes it up by masking out flags that > can't be set by LOOP_SET_STATUS; unfortunately the mask was negated. > > Re-ran all ltp ioctl_loop tests, and they all passed. > > Pass run of the previously failing one: > > tst_test.c:1247: INFO: Timeout per run is 0h 05m 00s > tst_device.c:88: INFO: Found free device 0 '/dev/loop0' > ioctl_loop01.c:49: PASS: /sys/block/loop0/loop/partscan = 0 > ioctl_loop01.c:50: PASS: /sys/block/loop0/loop/autoclear = 0 > ioctl_loop01.c:51: PASS: /sys/block/loop0/loop/backing_file = > '/tmp/ZRJ6H4/test.img' > ioctl_loop01.c:65: PASS: get expected lo_flag 12 > ioctl_loop01.c:67: PASS: /sys/block/loop0/loop/partscan = 1 > ioctl_loop01.c:68: PASS: /sys/block/loop0/loop/autoclear = 1 > ioctl_loop01.c:77: PASS: access /dev/loop0p1 succeeds > ioctl_loop01.c:83: PASS: access /sys/block/loop0/loop0p1 succeeds > > Summary: > passed 8 > failed 0 > skipped 0 > warnings 0 > > Fixes: faf1d25440d6 ("loop: Clean up LOOP_SET_STATUS lo_flags handling") > Signed-off-by: Martijn Coenen <maco@android.com> Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org> Tested-by: Naresh Kamboju <naresh.kamboju@linaro.org> Thanks for the quick fix patch. I have tested with the patch applied on x86 and arm64 and confirm it fixes the reported problem [1]. Test log link, https://lkft.validation.linaro.org/scheduler/job/1471435#L1299 https://lkft.validation.linaro.org/scheduler/job/1471574#L714 ref: https://lore.kernel.org/linux-block/CAB0TPYEx4Z8do3qL1KVpnGGnorTLGqKtrwi1uQgxQ6Xw3JqiYw@mail.gmail.com/T/#t - Naresh
On 6/4/20 2:25 PM, Martijn Coenen wrote: > In faf1d25440d6, loop_set_status() now assigns lo_status directly from > the passed in lo_flags, but then fixes it up by masking out flags that > can't be set by LOOP_SET_STATUS; unfortunately the mask was negated. > > Re-ran all ltp ioctl_loop tests, and they all passed. > > Pass run of the previously failing one: > > tst_test.c:1247: INFO: Timeout per run is 0h 05m 00s > tst_device.c:88: INFO: Found free device 0 '/dev/loop0' > ioctl_loop01.c:49: PASS: /sys/block/loop0/loop/partscan = 0 > ioctl_loop01.c:50: PASS: /sys/block/loop0/loop/autoclear = 0 > ioctl_loop01.c:51: PASS: /sys/block/loop0/loop/backing_file = > '/tmp/ZRJ6H4/test.img' > ioctl_loop01.c:65: PASS: get expected lo_flag 12 > ioctl_loop01.c:67: PASS: /sys/block/loop0/loop/partscan = 1 > ioctl_loop01.c:68: PASS: /sys/block/loop0/loop/autoclear = 1 > ioctl_loop01.c:77: PASS: access /dev/loop0p1 succeeds > ioctl_loop01.c:83: PASS: access /sys/block/loop0/loop0p1 succeeds > > Summary: > passed 8 > failed 0 > skipped 0 > warnings 0 Applied, thanks.
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 4212288ab157..ad63e4247868 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1390,7 +1390,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info) goto out_unfreeze; /* Mask out flags that can't be set using LOOP_SET_STATUS. */ - lo->lo_flags &= ~LOOP_SET_STATUS_SETTABLE_FLAGS; + lo->lo_flags &= LOOP_SET_STATUS_SETTABLE_FLAGS; /* For those flags, use the previous values instead */ lo->lo_flags |= prev_lo_flags & ~LOOP_SET_STATUS_SETTABLE_FLAGS; /* For flags that can't be cleared, use previous values too */
In faf1d25440d6, loop_set_status() now assigns lo_status directly from the passed in lo_flags, but then fixes it up by masking out flags that can't be set by LOOP_SET_STATUS; unfortunately the mask was negated. Re-ran all ltp ioctl_loop tests, and they all passed. Pass run of the previously failing one: tst_test.c:1247: INFO: Timeout per run is 0h 05m 00s tst_device.c:88: INFO: Found free device 0 '/dev/loop0' ioctl_loop01.c:49: PASS: /sys/block/loop0/loop/partscan = 0 ioctl_loop01.c:50: PASS: /sys/block/loop0/loop/autoclear = 0 ioctl_loop01.c:51: PASS: /sys/block/loop0/loop/backing_file = '/tmp/ZRJ6H4/test.img' ioctl_loop01.c:65: PASS: get expected lo_flag 12 ioctl_loop01.c:67: PASS: /sys/block/loop0/loop/partscan = 1 ioctl_loop01.c:68: PASS: /sys/block/loop0/loop/autoclear = 1 ioctl_loop01.c:77: PASS: access /dev/loop0p1 succeeds ioctl_loop01.c:83: PASS: access /sys/block/loop0/loop0p1 succeeds Summary: passed 8 failed 0 skipped 0 warnings 0 Fixes: faf1d25440d6 ("loop: Clean up LOOP_SET_STATUS lo_flags handling") Signed-off-by: Martijn Coenen <maco@android.com> --- drivers/block/loop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)