lkml.org 
[lkml]   [2009]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/11] btrfs: properly register fs backing device
    Date
    btrfs assigns this bdi to all inodes on that file system, so make
    sure it's registered. This isn't really important now, but will be
    when we put dirty inodes there. Even now, we miss the stats when the
    bdi isn't visible.

    Also fixes failure to check bdi_init() return value, and bad inherit of
    ->capabilities flags from the default bdi.

    Acked-by: Chris Mason <chris.mason@oracle.com>
    Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
    ---
    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


    \
     
     \ /
      Last update: 2009-05-28 13:51    [W:0.022 / U:1.416 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site