diff mbox series

[RFC,17/20] loop: change fd set err at actual error condition

Message ID 20210202053552.4844-18-chaitanya.kulkarni@wdc.com (mailing list archive)
State New, archived
Headers show
Series loop: cleanup and small improvement | expand

Commit Message

Chaitanya Kulkarni Feb. 2, 2021, 5:35 a.m. UTC
The function loop_change_fd() set error = -ENXIO before checking loop
state, error = -EINVAL before checking loop flags, error = -EBADF
before calling fget and error = -EINVAL before comparing the old file
size to the new file file. None of these error values are reused for
the above conditions.

Conditionally set the error after we actually know that error condition
is true instead of setting it before the if check.

Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
---
 drivers/block/loop.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)
diff mbox series

Patch

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index af3e3bcd564d..89f9c73bb2af 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -704,19 +704,22 @@  static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
 	error = mutex_lock_killable(&lo->lo_mutex);
 	if (error)
 		return error;
-	error = -ENXIO;
-	if (lo->lo_state != Lo_bound)
+	if (lo->lo_state != Lo_bound) {
+		error = -ENXIO;
 		goto out_err;
+	}
 
 	/* the loop device has to be read-only */
-	error = -EINVAL;
-	if (!(lo->lo_flags & LO_FLAGS_READ_ONLY))
+	if (!(lo->lo_flags & LO_FLAGS_READ_ONLY)) {
+		error = -EINVAL;
 		goto out_err;
+	}
 
-	error = -EBADF;
 	file = fget(arg);
-	if (!file)
+	if (!file) {
+		error = -EBADF;
 		goto out_err;
+	}
 
 	error = loop_validate_file(file, bdev);
 	if (error)
@@ -724,11 +727,11 @@  static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
 
 	old_file = lo->lo_backing_file;
 
-	error = -EINVAL;
-
 	/* size of the new backing store needs to be the same */
-	if (get_loop_size(lo, file) != get_loop_size(lo, old_file))
+	if (get_loop_size(lo, file) != get_loop_size(lo, old_file)) {
+		error = -EINVAL;
 		goto out_err;
+	}
 
 	/* and ... switch */
 	blk_mq_freeze_queue(lo->lo_queue);