From: Jens Axboe <jens.axboe@oracle.com>
To: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Cc: chris.mason@oracle.com, david@fromorbit.com, hch@infradead.org,
akpm@linux-foundation.org, jack@suse.cz,
yanmin_zhang@linux.intel.com, richard@rsk.demon.co.uk,
damien.wyart@free.fr, dedekind1@gmail.com, fweisbec@gmail.com,
Jens Axboe <jens.axboe@oracle.com>
Subject: [PATCH 02/15] btrfs: properly register fs backing device
Date: Fri, 12 Jun 2009 14:54:02 +0200 [thread overview]
Message-ID: <1244811255-5391-3-git-send-email-jens.axboe@oracle.com> (raw)
In-Reply-To: <1244811255-5391-1-git-send-email-jens.axboe@oracle.com>
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 | 26 +++++++++++++++++++++-----
1 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 0d50d49..d28d29c 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -42,6 +42,8 @@
static struct extent_io_ops btree_extent_io_ops;
static void end_workqueue_fn(struct btrfs_work *work);
+static atomic_t btrfs_bdi_num = ATOMIC_INIT(0);
+
/*
* end_io_wq structs are used to do processing in task context when an IO is
* complete. This is used during reads to verify checksums, and it is used
@@ -1342,12 +1344,25 @@ 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-%d",
+ atomic_inc_return(&btrfs_bdi_num));
+ 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;
@@ -1569,7 +1584,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;
@@ -1946,8 +1962,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
next prev parent reply other threads:[~2009-06-12 12:54 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-12 12:54 [PATCH 0/15] Per-bdi writeback flusher threads v10 Jens Axboe
2009-06-12 12:54 ` [PATCH 01/15] block: don't overwrite bdi->state after bdi_init() has been run Jens Axboe
2009-06-12 12:54 ` Jens Axboe [this message]
2009-06-12 12:54 ` [PATCH 03/15] ubifs: register backing_dev_info Jens Axboe
2009-06-12 12:54 ` [PATCH 04/15] writeback: move dirty inodes from super_block to backing_dev_info Jens Axboe
2009-06-12 12:54 ` [PATCH 05/15] writeback: switch to per-bdi threads for flushing data Jens Axboe
2009-06-12 12:54 ` [PATCH 06/15] writeback: get rid of pdflush completely Jens Axboe
2009-06-12 12:54 ` [PATCH 07/15] writeback: separate the flushing state/task from the bdi Jens Axboe
2009-06-12 12:54 ` [PATCH 08/15] writeback: support > 1 flusher thread per bdi Jens Axboe
2009-06-12 12:54 ` [PATCH 09/15] writeback: allow sleepy exit of default writeback task Jens Axboe
2009-06-12 12:54 ` [PATCH 10/15] writeback: add some debug inode list counters to bdi stats Jens Axboe
2009-06-12 12:54 ` [PATCH 11/15] writeback: add name to backing_dev_info Jens Axboe
2009-06-12 12:54 ` [PATCH 12/15] writeback: check for registered bdi in flusher add and inode dirty Jens Axboe
2009-06-12 12:54 ` [PATCH 13/15] writeback: restart bdi list scan on allocation failure Jens Axboe
2009-06-12 12:54 ` [PATCH 14/15] writeback: convert bdi_lock to a spinlock Jens Axboe
2009-06-12 12:54 ` [PATCH 15/15] writeback: use spin_trylock() in bdi_writeback_all() for WB_SYNC_NONE Jens Axboe
2009-06-16 1:06 ` [PATCH 0/15] Per-bdi writeback flusher threads v10 Zhang, Yanmin
2009-06-16 8:00 ` Jens Axboe
2009-06-16 19:53 ` Jens Axboe
2009-06-18 1:01 ` Zhang, Yanmin
2009-06-18 5:13 ` Jens Axboe
2009-06-18 5:19 ` Zhang, Yanmin
2009-06-18 12:35 ` Jens Axboe
2009-06-19 4:44 ` Zhang, Yanmin
2009-06-19 5:01 ` Jens Axboe
2009-06-17 1:35 ` Zhang, Yanmin
2009-06-17 4:21 ` Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1244811255-5391-3-git-send-email-jens.axboe@oracle.com \
--to=jens.axboe@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=chris.mason@oracle.com \
--cc=damien.wyart@free.fr \
--cc=david@fromorbit.com \
--cc=dedekind1@gmail.com \
--cc=fweisbec@gmail.com \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=richard@rsk.demon.co.uk \
--cc=yanmin_zhang@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).