Btrfs: tune btrfs unplug functions for a small number of devices
authorChris Mason <chris.mason@oracle.com>
Mon, 10 Nov 2008 18:08:31 +0000 (13:08 -0500)
committerChris Mason <chris.mason@oracle.com>
Mon, 10 Nov 2008 18:08:31 +0000 (13:08 -0500)
When btrfs unplugs, it tries to find the correct device to unplug
via search through the extent_map tree.  This avoids unplugging
a device that doesn't need it, but is a waste of time for filesystems
with a small number of devices.

This patch checks the total number of devices before doing the
search.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/disk-io.c

index 8efc123d222b01b51a8f1c065d863f789b4fb602..1bb54d69fbb24416f80a2fd17151274c64042577 100644 (file)
@@ -1201,6 +1201,16 @@ void btrfs_unplug_io_fn(struct backing_dev_info *bdi, struct page *page)
                return;
 
        inode = mapping->host;
+
+       /*
+        * don't do the expensive searching for a small number of
+        * devices
+        */
+       if (BTRFS_I(inode)->root->fs_info->fs_devices->open_devices <= 2) {
+               __unplug_io_fn(bdi, page);
+               return;
+       }
+
        offset = page_offset(page);
 
        em_tree = &BTRFS_I(inode)->extent_tree;