From: Jan Kara <jack@suse.cz>
To: Miklos Szeredi <miklos@szeredi.hu>
Cc: Jan Kara <jack@suse.cz>,
linux-fsdevel@vger.kernel.org,
Christoph Hellwig <hch@infradead.org>,
linux-block@vger.kernel.org
Subject: Re: [PATCH 17/24] fuse: Convert to separately allocated bdi
Date: Tue, 7 Feb 2017 12:35:21 +0100 [thread overview]
Message-ID: <20170207113521.GC13524@quack2.suse.cz> (raw)
In-Reply-To: <CAJfpeguR+swSEvyhON2oW-V+HnZeSPJLhRcSxC3avWEGGiu92A@mail.gmail.com>
On Tue 07-02-17 10:16:58, Miklos Szeredi wrote:
> On Thu, Feb 2, 2017 at 6:34 PM, Jan Kara <jack@suse.cz> wrote:
> > Allocate struct backing_dev_info separately instead of embedding it
> > inside the superblock. This unifies handling of bdi among users.
>
> Acked-by: Miklos Szeredi <mszeredi@redhat.com>
>
> A follow on patch could get rid of fc->bdi_initialized too (replace
> remaining uses with fc->sb).
Yeah, I was looking at that but was not 100% sure about it from a quick
look. I'll do that.
Honza
> >
> > CC: Miklos Szeredi <miklos@szeredi.hu>
> > CC: linux-fsdevel@vger.kernel.org
> > Signed-off-by: Jan Kara <jack@suse.cz>
> > ---
> > fs/fuse/dev.c | 8 ++++----
> > fs/fuse/fuse_i.h | 3 ---
> > fs/fuse/inode.c | 42 +++++++++++++-----------------------------
> > 3 files changed, 17 insertions(+), 36 deletions(-)
> >
> > diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
> > index 70ea57c7b6bb..1912164d57e9 100644
> > --- a/fs/fuse/dev.c
> > +++ b/fs/fuse/dev.c
> > @@ -382,8 +382,8 @@ static void request_end(struct fuse_conn *fc, struct fuse_req *req)
> >
> > if (fc->num_background == fc->congestion_threshold &&
> > fc->connected && fc->bdi_initialized) {
> > - clear_bdi_congested(&fc->bdi, BLK_RW_SYNC);
> > - clear_bdi_congested(&fc->bdi, BLK_RW_ASYNC);
> > + clear_bdi_congested(fc->sb->s_bdi, BLK_RW_SYNC);
> > + clear_bdi_congested(fc->sb->s_bdi, BLK_RW_ASYNC);
> > }
> > fc->num_background--;
> > fc->active_background--;
> > @@ -570,8 +570,8 @@ void fuse_request_send_background_locked(struct fuse_conn *fc,
> > fc->blocked = 1;
> > if (fc->num_background == fc->congestion_threshold &&
> > fc->bdi_initialized) {
> > - set_bdi_congested(&fc->bdi, BLK_RW_SYNC);
> > - set_bdi_congested(&fc->bdi, BLK_RW_ASYNC);
> > + set_bdi_congested(fc->sb->s_bdi, BLK_RW_SYNC);
> > + set_bdi_congested(fc->sb->s_bdi, BLK_RW_ASYNC);
> > }
> > list_add_tail(&req->list, &fc->bg_queue);
> > flush_bg_queue(fc);
> > diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
> > index 91307940c8ac..effab9e9607f 100644
> > --- a/fs/fuse/fuse_i.h
> > +++ b/fs/fuse/fuse_i.h
> > @@ -631,9 +631,6 @@ struct fuse_conn {
> > /** Negotiated minor version */
> > unsigned minor;
> >
> > - /** Backing dev info */
> > - struct backing_dev_info bdi;
> > -
> > /** Entry on the fuse_conn_list */
> > struct list_head entry;
> >
> > diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
> > index 6fe6a88ecb4a..90bacbc87fb3 100644
> > --- a/fs/fuse/inode.c
> > +++ b/fs/fuse/inode.c
> > @@ -386,12 +386,6 @@ static void fuse_send_destroy(struct fuse_conn *fc)
> > }
> > }
> >
> > -static void fuse_bdi_destroy(struct fuse_conn *fc)
> > -{
> > - if (fc->bdi_initialized)
> > - bdi_destroy(&fc->bdi);
> > -}
> > -
> > static void fuse_put_super(struct super_block *sb)
> > {
> > struct fuse_conn *fc = get_fuse_conn_super(sb);
> > @@ -403,7 +397,6 @@ static void fuse_put_super(struct super_block *sb)
> > list_del(&fc->entry);
> > fuse_ctl_remove_conn(fc);
> > mutex_unlock(&fuse_mutex);
> > - fuse_bdi_destroy(fc);
> >
> > fuse_conn_put(fc);
> > }
> > @@ -928,7 +921,8 @@ static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req)
> > fc->no_flock = 1;
> > }
> >
> > - fc->bdi.ra_pages = min(fc->bdi.ra_pages, ra_pages);
> > + fc->sb->s_bdi->ra_pages =
> > + min(fc->sb->s_bdi->ra_pages, ra_pages);
> > fc->minor = arg->minor;
> > fc->max_write = arg->minor < 5 ? 4096 : arg->max_write;
> > fc->max_write = max_t(unsigned, 4096, fc->max_write);
> > @@ -944,7 +938,7 @@ static void fuse_send_init(struct fuse_conn *fc, struct fuse_req *req)
> >
> > arg->major = FUSE_KERNEL_VERSION;
> > arg->minor = FUSE_KERNEL_MINOR_VERSION;
> > - arg->max_readahead = fc->bdi.ra_pages * PAGE_SIZE;
> > + arg->max_readahead = fc->sb->s_bdi->ra_pages * PAGE_SIZE;
> > arg->flags |= FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_ATOMIC_O_TRUNC |
> > FUSE_EXPORT_SUPPORT | FUSE_BIG_WRITES | FUSE_DONT_MASK |
> > FUSE_SPLICE_WRITE | FUSE_SPLICE_MOVE | FUSE_SPLICE_READ |
> > @@ -976,27 +970,20 @@ static void fuse_free_conn(struct fuse_conn *fc)
> > static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb)
> > {
> > int err;
> > + char *suffix = "";
> >
> > - fc->bdi.name = "fuse";
> > - fc->bdi.ra_pages = (VM_MAX_READAHEAD * 1024) / PAGE_SIZE;
> > - /* fuse does it's own writeback accounting */
> > - fc->bdi.capabilities = BDI_CAP_NO_ACCT_WB | BDI_CAP_STRICTLIMIT;
> > -
> > - err = bdi_init(&fc->bdi);
> > + if (sb->s_bdev)
> > + suffix = "-fuseblk";
> > + err = super_setup_bdi_name(sb, "%u:%u%s", MAJOR(fc->dev),
> > + MINOR(fc->dev), suffix);
> > if (err)
> > return err;
> >
> > - fc->bdi_initialized = 1;
> > -
> > - if (sb->s_bdev) {
> > - err = bdi_register(&fc->bdi, NULL, "%u:%u-fuseblk",
> > - MAJOR(fc->dev), MINOR(fc->dev));
> > - } else {
> > - err = bdi_register_dev(&fc->bdi, fc->dev);
> > - }
> > + sb->s_bdi->ra_pages = (VM_MAX_READAHEAD * 1024) / PAGE_SIZE;
> > + /* fuse does it's own writeback accounting */
> > + sb->s_bdi->capabilities = BDI_CAP_NO_ACCT_WB | BDI_CAP_STRICTLIMIT;
> >
> > - if (err)
> > - return err;
> > + fc->bdi_initialized = 1;
> >
> > /*
> > * For a single fuse filesystem use max 1% of dirty +
> > @@ -1010,7 +997,7 @@ static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb)
> > *
> > * /sys/class/bdi/<bdi>/max_ratio
> > */
> > - bdi_set_max_ratio(&fc->bdi, 1);
> > + bdi_set_max_ratio(sb->s_bdi, 1);
> >
> > return 0;
> > }
> > @@ -1113,8 +1100,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
> > if (err)
> > goto err_dev_free;
> >
> > - sb->s_bdi = &fc->bdi;
> > -
> > /* Handle umasking inside the fuse code */
> > if (sb->s_flags & MS_POSIXACL)
> > fc->dont_mask = 1;
> > @@ -1182,7 +1167,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
> > err_dev_free:
> > fuse_dev_free(fud);
> > err_put_conn:
> > - fuse_bdi_destroy(fc);
> > fuse_conn_put(fc);
> > err_fput:
> > fput(file);
> > --
> > 2.10.2
> >
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
next prev parent reply other threads:[~2017-02-07 14:04 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-02 17:33 [PATCH 0/24 RFC] fs: Convert all embedded bdis into separate ones Jan Kara
2017-02-02 17:33 ` [PATCH 01/24] block: Provide bdi_alloc() Jan Kara
2017-02-02 17:34 ` [PATCH 02/24] bdi: Provide bdi_register_va() Jan Kara
2017-02-02 17:34 ` [PATCH 03/24] block: Unregister bdi on last reference drop Jan Kara
2017-02-02 17:34 ` [PATCH 04/24] fs: Provide infrastructure for dynamic BDIs in filesystems Jan Kara
2017-02-02 19:28 ` Liu Bo
2017-02-03 13:50 ` Jan Kara
2017-02-03 18:31 ` Liu Bo
2017-02-08 0:38 ` [lustre-devel] " Dilger, Andreas
2017-02-09 12:12 ` Jan Kara
2017-02-02 17:34 ` [PATCH 05/24] fs: Get proper reference for s_bdi Jan Kara
2017-02-09 14:36 ` Boaz Harrosh
2017-02-09 15:52 ` Jan Kara
2017-02-02 17:34 ` [PATCH 06/24] lustre: Convert to separately allocated bdi Jan Kara
2017-02-08 0:38 ` [lustre-devel] " Dilger, Andreas
2017-02-02 17:34 ` [PATCH 07/24] 9p: " Jan Kara
2017-02-02 17:34 ` [PATCH 08/24] btrfs: " Jan Kara
2017-02-03 18:33 ` Liu Bo
2017-02-08 15:22 ` David Sterba
2017-02-02 17:34 ` [PATCH 09/24] ceph: " Jan Kara
2017-02-02 17:34 ` [PATCH 10/24] cifs: " Jan Kara
2017-02-02 17:34 ` [PATCH 11/24] ecryptfs: " Jan Kara
2017-02-03 23:54 ` Tyler Hicks
2017-02-02 17:34 ` [PATCH 12/24] afs: " Jan Kara
2017-02-02 17:34 ` [PATCH 13/24] orangefs: Remove orangefs_backing_dev_info Jan Kara
2017-02-02 17:34 ` [PATCH 14/24] mtd: Convert to dynamically allocated bdi infrastructure Jan Kara
2017-02-02 17:34 ` [PATCH 15/24] coda: Convert to separately allocated bdi Jan Kara
2017-02-02 17:34 ` [PATCH 16/24] exofs: " Jan Kara
2017-02-09 14:23 ` Boaz Harrosh
2017-02-02 17:34 ` [PATCH 17/24] fuse: " Jan Kara
2017-02-07 9:16 ` Miklos Szeredi
2017-02-07 11:35 ` Jan Kara [this message]
2017-02-02 17:34 ` [PATCH 18/24] gfs2: Convert to properly refcounting bdi Jan Kara
2017-02-02 17:34 ` [PATCH 19/24] nilfs2: " Jan Kara
2017-02-02 17:34 ` [PATCH 20/24] ncpfs: Convert to separately allocated bdi Jan Kara
2017-02-02 17:34 ` [PATCH 21/24] nfs: " Jan Kara
2017-02-02 17:34 ` [PATCH 22/24] ubifs: " Jan Kara
2017-02-02 20:34 ` Richard Weinberger
2017-02-03 13:45 ` Jan Kara
2017-02-08 11:24 ` Richard Weinberger
2017-02-09 12:17 ` Jan Kara
2017-02-09 14:56 ` Richard Weinberger
2017-02-02 17:34 ` [PATCH 23/24] fs: Remove SB_I_DYNBDI flag Jan Kara
2017-02-02 17:34 ` [PATCH 24/24] block: Remove unused functions Jan Kara
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=20170207113521.GC13524@quack2.suse.cz \
--to=jack@suse.cz \
--cc=hch@infradead.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=miklos@szeredi.hu \
/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).