loop: set physical block size to PAGE_SIZE
authorOmar Sandoval <osandov@fb.com>
Thu, 24 Aug 2017 07:03:42 +0000 (00:03 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 31 Aug 2017 19:51:12 +0000 (13:51 -0600)
The physical block size is "the lowest possible sector size that the
hardware can operate on without reverting to read-modify-write
operations" (from the comment on blk_queue_physical_block_size()). Since
loop does buffered I/O on the backing file by default, the RMW unit is a
page. This isn't the case for direct I/O mode, but let's keep it simple.

Reviewed-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/loop.c

index efad2d46a0189ed7cdd34ca93ecbe30672b7261d..e3f190016d4f4bae090813a8e51bc06e58653daf 100644 (file)
@@ -1764,6 +1764,8 @@ static int loop_add(struct loop_device **l, int i)
        }
        lo->lo_queue->queuedata = lo;
 
+       blk_queue_physical_block_size(lo->lo_queue, PAGE_SIZE);
+
        /*
         * It doesn't make sense to enable merge because the I/O
         * submitted to backing file is handled page by page.