]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
loop: create a lo_can_use_dio helper
authorChristoph Hellwig <hch@lst.de>
Fri, 10 Jan 2025 07:37:33 +0000 (08:37 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 10 Jan 2025 14:31:50 +0000 (07:31 -0700)
Factor out a part of __loop_update_dio in preparation for further
refactoring.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20250110073750.1582447-4-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/loop.c

index 0c7dfc6eee12c261cfa586673d5bdabd79032005..55bea9c95b4596a3ea65a78a2c68d8aed8d280b7 100644 (file)
@@ -182,26 +182,29 @@ static bool lo_bdev_can_use_dio(struct loop_device *lo,
        return true;
 }
 
-static void __loop_update_dio(struct loop_device *lo, bool dio)
+static bool lo_can_use_dio(struct loop_device *lo)
 {
-       struct file *file = lo->lo_backing_file;
-       struct inode *inode = file->f_mapping->host;
-       struct block_device *backing_bdev = NULL;
-       bool use_dio;
+       struct inode *inode = lo->lo_backing_file->f_mapping->host;
+
+       if (!(lo->lo_backing_file->f_mode & FMODE_CAN_ODIRECT))
+               return false;
 
        if (S_ISBLK(inode->i_mode))
-               backing_bdev = I_BDEV(inode);
-       else if (inode->i_sb->s_bdev)
-               backing_bdev = inode->i_sb->s_bdev;
+               return lo_bdev_can_use_dio(lo, I_BDEV(inode));
+       if (inode->i_sb->s_bdev)
+               return lo_bdev_can_use_dio(lo, inode->i_sb->s_bdev);
+       return true;
+}
 
-       use_dio = dio && (file->f_mode & FMODE_CAN_ODIRECT) &&
-               (!backing_bdev || lo_bdev_can_use_dio(lo, backing_bdev));
+static void __loop_update_dio(struct loop_device *lo, bool dio)
+{
+       bool use_dio = dio && lo_can_use_dio(lo);
 
        if (lo->use_dio == use_dio)
                return;
 
        /* flush dirty pages before changing direct IO */
-       vfs_fsync(file, 0);
+       vfs_fsync(lo->lo_backing_file, 0);
 
        /*
         * The flag of LO_FLAGS_DIRECT_IO is handled similarly with