We ran into this because we noticed that resize2fs -P $device was triggering udev events. I added a very simple test that just checks resize2fs -P on a file lacking the w bit succeeds. Signed-off-by: Michael Hudson-Doyle <michael.hudson@xxxxxxxxxxxxx> --- resize/main.c | 8 ++++++-- tests/scripts/resize_test | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/resize/main.c b/resize/main.c index bceaa1677..073c0bc7c 100644 --- a/resize/main.c +++ b/resize/main.c @@ -256,6 +256,7 @@ int main (int argc, char ** argv) int force_min_size = 0; int print_min_size = 0; int fd, ret; + int open_flags = O_RDWR; blk64_t new_size = 0; blk64_t max_size = 0; blk64_t min_size = 0; @@ -363,7 +364,10 @@ int main (int argc, char ** argv) len = 2 * len; } - fd = ext2fs_open_file(device_name, O_RDWR, 0); + if (print_min_size) + open_flags = O_RDONLY; + + fd = ext2fs_open_file(device_name, open_flags, 0); if (fd < 0) { com_err("open", errno, _("while opening %s"), device_name); @@ -401,7 +405,7 @@ int main (int argc, char ** argv) #endif io_ptr = unix_io_manager; - if (!(mount_flags & EXT2_MF_MOUNTED)) + if (!(mount_flags & EXT2_MF_MOUNTED) && !print_min_size) io_flags = EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE; io_flags |= EXT2_FLAG_64BITS | EXT2_FLAG_THREADS; diff --git a/tests/scripts/resize_test b/tests/scripts/resize_test index fc9d1c246..a000c85e5 100755 --- a/tests/scripts/resize_test +++ b/tests/scripts/resize_test @@ -60,6 +60,14 @@ rm -f $OUT_TMP echo $FSCK -fy $TMPFILE >> $LOG 2>&1 $FSCK -fy $TMPFILE >> $LOG 2>&1 +chmod u-w $TMPFILE +echo $RESIZE2FS -P $TMPFILE >> $LOG 2>&1 +if ! $RESIZE2FS -P $TMPFILE >> $LOG 2>&1 +then + return 1 +fi +chmod u+w $TMPFILE + echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS $TMPFILE $SIZE_2 >> $LOG 2>&1 if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS $TMPFILE $SIZE_2 >> $LOG 2>&1 then -- 2.34.1