| title: | PATCH 08 11 writeback btrfs must register |
|
btrfs puts dirty inodes on there, so it must register a thread
to handle them. Also fixes failure to check bdi_init() return value,
and bad inherit of - capabilities flags from the default bdi.
Signed-off-by: Jens Axboe <jens.axboe@xxxxxxxxxx
---
fs/btrfs/disk-io.c | 23 ++++++++++++++++++-----
1 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 4b0ea0b..2dc19c9 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -1345,12 +1345,24 @@ static void btrfs_unplug_io_fn(struct backing_dev_info *bdi, struct page *page)
free_extent_map(em);
}
+/*
+ * If this fails, caller must call bdi_destroy() to get rid of the
+ * bdi again.
+ */
static int setup_bdi(struct btrfs_fs_info *info, struct backing_dev_info *bdi)
{
- bdi_init(bdi);
+ int err;
+
+ bdi- capabilities = BDI_CAP_MAP_COPY;
+ err = bdi_init(bdi);
+ if (err)
+ return err;
+
+ err = bdi_register(bdi, NULL, "btrfs");
+ if (err)
+ return err;
+
bdi- ra_pages = default_backing_dev_info.ra_pages;
- bdi- state = 0;
- bdi- capabilities = default_backing_dev_info.capabilities;
bdi- unplug_io_fn = btrfs_unplug_io_fn;
bdi- unplug_io_data = info;
bdi- congested_fn = btrfs_congested_fn;
@@ -1574,7 +1586,8 @@ struct btrfs_root *open_ctree(struct super_block *sb,
fs_info- sb = sb;
fs_info- max_extent = (u64)-1;
fs_info- max_inline = 8192 * 1024;
- setup_bdi(fs_info, &fs_info- bdi);
+ if (setup_bdi(fs_info, &fs_info- bdi))
+ goto fail_bdi;
fs_info- btree_inode = new_inode(sb);
fs_info- btree_inode- i_ino = 1;
fs_info- btree_inode- i_nlink = 1;
@@ -1931,8 +1944,8 @@ fail_iput:
btrfs_close_devices(fs_info- fs_devices);
btrfs_mapping_tree_free(&fs_info- mapping_tree);
+fail_bdi:
bdi_destroy(&fs_info- bdi);
-
fail:
kfree(extent_root);
kfree(tree_root);
--
1.6.3.rc0.1.gf800
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at rel="nofollow" vger.kernel.org/majordomo-info.html vger.kernel.org/majordomo-info.html
|