From: Jan Kara <jack@suse.cz>
To: Jens Axboe <jens.axboe@oracle.com>
Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
chris.mason@oracle.com, hch@infradead.org, tytso@mit.edu,
akpm@linux-foundation.org, jack@suse.cz,
trond.myklebust@fys.uio.no
Subject: Re: [PATCH 05/16] fs: Assign bdi in super_block
Date: Wed, 16 Sep 2009 15:34:16 +0200 [thread overview]
Message-ID: <20090916133416.GK26030@duck.suse.cz> (raw)
In-Reply-To: <1253107494-20160-6-git-send-email-jens.axboe@oracle.com>
On Wed 16-09-09 15:24:43, Jens Axboe wrote:
> We do this automatically in get_sb_bdev() from the set_bdev_super()
> callback. Filesystems that have their own private backing_dev_info
> must assign that in ->fill_super().
>
> Note that ->s_bdi assignment is required for proper writeback!
>
> Acked-by: Christoph Hellwig <hch@infradead.org>
> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Looks good. Acked-by: Jan Kara <jack@suse.cz>
Honza
> ---
> fs/btrfs/disk-io.c | 1 +
> fs/fuse/inode.c | 2 ++
> fs/nfs/super.c | 2 ++
> fs/super.c | 6 ++++++
> fs/sync.c | 9 ++++++++-
> fs/ubifs/super.c | 1 +
> include/linux/fs.h | 1 +
> 7 files changed, 21 insertions(+), 1 deletions(-)
>
> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
> index 15831d5..8b81927 100644
> --- a/fs/btrfs/disk-io.c
> +++ b/fs/btrfs/disk-io.c
> @@ -1600,6 +1600,7 @@ struct btrfs_root *open_ctree(struct super_block *sb,
>
> sb->s_blocksize = 4096;
> sb->s_blocksize_bits = blksize_bits(4096);
> + sb->s_bdi = &fs_info->bdi;
>
> /*
> * we set the i_size on the btree inode to the max possible int.
> diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
> index 4567db6..e5dbecd 100644
> --- a/fs/fuse/inode.c
> +++ b/fs/fuse/inode.c
> @@ -894,6 +894,8 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
> if (err)
> goto err_put_conn;
>
> + sb->s_bdi = &fc->bdi;
> +
> /* Handle umasking inside the fuse code */
> if (sb->s_flags & MS_POSIXACL)
> fc->dont_mask = 1;
> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index 867f705..de93569 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -1918,6 +1918,8 @@ static inline void nfs_initialise_sb(struct super_block *sb)
> if (server->flags & NFS_MOUNT_NOAC)
> sb->s_flags |= MS_SYNCHRONOUS;
>
> + sb->s_bdi = &server->backing_dev_info;
> +
> nfs_super_set_maxbytes(sb, server->maxfilesize);
> }
>
> diff --git a/fs/super.c b/fs/super.c
> index 9cda337..b03fea8 100644
> --- a/fs/super.c
> +++ b/fs/super.c
> @@ -707,6 +707,12 @@ static int set_bdev_super(struct super_block *s, void *data)
> {
> s->s_bdev = data;
> s->s_dev = s->s_bdev->bd_dev;
> +
> + /*
> + * We set the bdi here to the queue backing, file systems can
> + * overwrite this in ->fill_super()
> + */
> + s->s_bdi = &bdev_get_queue(s->s_bdev)->backing_dev_info;
> return 0;
> }
>
> diff --git a/fs/sync.c b/fs/sync.c
> index 1923409..c08467a 100644
> --- a/fs/sync.c
> +++ b/fs/sync.c
> @@ -27,6 +27,13 @@
> */
> static int __sync_filesystem(struct super_block *sb, int wait)
> {
> + /*
> + * This should be safe, as we require bdi backing to actually
> + * write out data in the first place
> + */
> + if (!sb->s_bdi)
> + return 0;
> +
> /* Avoid doing twice syncing and cache pruning for quota sync */
> if (!wait) {
> writeout_quota_sb(sb, -1);
> @@ -101,7 +108,7 @@ restart:
> spin_unlock(&sb_lock);
>
> down_read(&sb->s_umount);
> - if (!(sb->s_flags & MS_RDONLY) && sb->s_root)
> + if (!(sb->s_flags & MS_RDONLY) && sb->s_root && sb->s_bdi)
> __sync_filesystem(sb, wait);
> up_read(&sb->s_umount);
>
> diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
> index 51763aa..c4af069 100644
> --- a/fs/ubifs/super.c
> +++ b/fs/ubifs/super.c
> @@ -1980,6 +1980,7 @@ static int ubifs_fill_super(struct super_block *sb, void *data, int silent)
> if (err)
> goto out_bdi;
>
> + sb->s_bdi = &c->bdi;
> sb->s_fs_info = c;
> sb->s_magic = UBIFS_SUPER_MAGIC;
> sb->s_blocksize = UBIFS_BLOCK_SIZE;
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index db29588..90162fb 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1342,6 +1342,7 @@ struct super_block {
> int s_nr_dentry_unused; /* # of dentry on lru */
>
> struct block_device *s_bdev;
> + struct backing_dev_info *s_bdi;
> struct mtd_info *s_mtd;
> struct list_head s_instances;
> struct quota_info s_dquot; /* Diskquota specific options */
> --
> 1.6.4.1.207.g68ea
>
--
Jan Kara <jack@suse.cz>
SUSE Labs, CR
next prev parent reply other threads:[~2009-09-16 13:34 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-16 13:24 [PATCH 0/16] Post merge per-bdi writeback patches v4 Jens Axboe
2009-09-16 13:24 ` [PATCH 01/16] fs: remove bdev->bd_inode_backing_dev_info Jens Axboe
2009-09-16 13:24 ` [PATCH 02/16] writeback: get rid of wbc->for_writepages Jens Axboe
2009-09-16 13:24 ` [PATCH 03/16] writeback: merely wakeup flusher thread if work allocation fails for WB_SYNC_NONE Jens Axboe
2009-09-16 13:24 ` [PATCH 04/16] writeback: make wb_writeback() take an argument structure Jens Axboe
2009-09-16 13:32 ` Jan Kara
2009-09-16 13:24 ` [PATCH 05/16] fs: Assign bdi in super_block Jens Axboe
2009-09-16 13:34 ` Jan Kara [this message]
2009-09-16 13:24 ` [PATCH 06/16] writeback: only use bdi_writeback_all() for WB_SYNC_NONE writeout Jens Axboe
2009-09-16 13:24 ` [PATCH 07/16] writeback: use RCU to protect bdi_list Jens Axboe
2009-09-16 13:24 ` [PATCH 08/16] writeback: inline allocation failure handling in bdi_alloc_queue_work() Jens Axboe
2009-09-16 13:24 ` [PATCH 09/16] writeback: separate starting of sync vs opportunistic writeback Jens Axboe
2009-09-16 13:36 ` Jan Kara
2009-09-16 13:24 ` [PATCH 10/16] writeback: splice dirty inode entries to default bdi on bdi_destroy() Jens Axboe
2009-09-16 13:43 ` Jan Kara
2009-09-16 18:29 ` Jens Axboe
2009-09-17 9:22 ` Jan Kara
2009-09-16 13:24 ` [PATCH 11/16] writeback: add comments to bdi_work structure Jens Axboe
2009-09-16 13:24 ` [PATCH 12/16] writeback: use schedule_timeout_interruptible() Jens Axboe
2009-09-16 13:24 ` [PATCH 13/16] writeback: remove smp_mb(), it's not needed with list_add_tail_rcu() Jens Axboe
2009-09-16 13:24 ` [PATCH 14/16] writeback: improve scalability of bdi writeback work queues Jens Axboe
2009-09-16 13:24 ` [PATCH 15/16] writeback: Fix bdi use after free in wb_work_complete() Jens Axboe
2009-09-16 13:24 ` [PATCH 16/16] writeback: fix possible bdi writeback refcounting problem 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=20090916133416.GK26030@duck.suse.cz \
--to=jack@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=chris.mason@oracle.com \
--cc=hch@infradead.org \
--cc=jens.axboe@oracle.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=trond.myklebust@fys.uio.no \
--cc=tytso@mit.edu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.