]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/block/loop.c
block: loop: set QUEUE_FLAG_NOMERGES for request queue of loop
[karo-tx-linux.git] / drivers / block / loop.c
index f7a4c9d7f721816666a76e2d667adf9153e162e9..eee751032cad6c7b9aa94c4a7146df093455dc2b 100644 (file)
@@ -675,7 +675,7 @@ static void loop_config_discard(struct loop_device *lo)
            lo->lo_encrypt_key_size) {
                q->limits.discard_granularity = 0;
                q->limits.discard_alignment = 0;
-               q->limits.max_discard_sectors = 0;
+               blk_queue_max_discard_sectors(q, 0);
                q->limits.discard_zeroes_data = 0;
                queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, q);
                return;
@@ -683,7 +683,7 @@ static void loop_config_discard(struct loop_device *lo)
 
        q->limits.discard_granularity = inode->i_sb->s_blocksize;
        q->limits.discard_alignment = 0;
-       q->limits.max_discard_sectors = UINT_MAX >> 9;
+       blk_queue_max_discard_sectors(q, UINT_MAX >> 9);
        q->limits.discard_zeroes_data = 1;
        queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, q);
 }
@@ -1595,6 +1595,12 @@ static int loop_add(struct loop_device **l, int i)
        }
        lo->lo_queue->queuedata = lo;
 
+       /*
+        * It doesn't make sense to enable merge because the I/O
+        * submitted to backing file is handled page by page.
+        */
+       queue_flag_set_unlocked(QUEUE_FLAG_NOMERGES, lo->lo_queue);
+
        INIT_LIST_HEAD(&lo->write_cmd_head);
        INIT_WORK(&lo->write_work, loop_queue_write_work);