btrfs: submit superblock io with REQ_META and REQ_PRIO
authorDavid Sterba <dsterba@suse.com>
Fri, 18 Aug 2017 16:16:25 +0000 (18:16 +0200)
committerDavid Sterba <dsterba@suse.com>
Tue, 22 Aug 2017 11:22:05 +0000 (13:22 +0200)
The superblock is also metadata of the filesystem so the relevant IO
should be tagged as such. We also tag it as high priority, as it's the
last block committed for metadata from a given transaction. Any delays
would effectively block the whole transaction, also blocking any other
operation holding the device_list_mutex.

Reviewed-by: Josef Bacik <jbacik@fb.com>
Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c

index 90b967ae46d064c5e0ad37777e1abb5c95ed0cc7..27d45864053661a6393a9de5c461a720181fb863 100644 (file)
@@ -3433,9 +3433,10 @@ static int write_dev_supers(struct btrfs_device *device,
                 */
                if (i == 0) {
                        ret = btrfsic_submit_bh(REQ_OP_WRITE,
-                                               REQ_SYNC | REQ_FUA, bh);
+                               REQ_SYNC | REQ_FUA | REQ_META | REQ_PRIO, bh);
                } else {
-                       ret = btrfsic_submit_bh(REQ_OP_WRITE, REQ_SYNC, bh);
+                       ret = btrfsic_submit_bh(REQ_OP_WRITE,
+                               REQ_SYNC | REQ_META | REQ_PRIO, bh);
                }
                if (ret)
                        errors++;