From patchwork Tue May 16 10:48:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 9728833 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 7C4B66028A for ; Tue, 16 May 2017 10:48:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6DBDE28922 for ; Tue, 16 May 2017 10:48:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6260528A12; Tue, 16 May 2017 10:48:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 618B328922 for ; Tue, 16 May 2017 10:48:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751833AbdEPKsf (ORCPT ); Tue, 16 May 2017 06:48:35 -0400 Received: from mx2.suse.de ([195.135.220.15]:34196 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751169AbdEPKse (ORCPT ); Tue, 16 May 2017 06:48:34 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 1AEE1AAB4; Tue, 16 May 2017 10:48:33 +0000 (UTC) Received: by quack2.suse.cz (Postfix, from userid 1000) id 3250A1E09E8; Tue, 16 May 2017 12:48:31 +0200 (CEST) Date: Tue, 16 May 2017 12:48:31 +0200 From: Jan Kara To: Rakesh Pandit Cc: Jan Kara , Miklos Szeredi , Jens Axboe , linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 16/25] fuse: Convert to separately allocated bdi Message-ID: <20170516104831.GA26782@quack2.suse.cz> References: <20170412102449.16901-1-jack@suse.cz> <20170412102449.16901-17-jack@suse.cz> <20170515203400.GA8068@hercules.tuxera.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20170515203400.GA8068@hercules.tuxera.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On Mon 15-05-17 23:34:00, Rakesh Pandit wrote: > Hi Jan, Miklos, > > On Wed, Apr 12, 2017 at 12:24:40PM +0200, Jan Kara wrote: > > Allocate struct backing_dev_info separately instead of embedding it > > inside the superblock. This unifies handling of bdi among users. > > > > CC: Miklos Szeredi > > CC: linux-fsdevel@vger.kernel.org > > Acked-by: Miklos Szeredi > > Reviewed-by: Christoph Hellwig > > Signed-off-by: Jan Kara > > ... > > > 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; > > > > This call to super_setup_bdi_name would only work with "fuse" but not > with "fuseblk" as mounting a block device in userspace triggers > mount_bdev call which results in set_bdev_super taking a reference > from block device's BDI. But super_setup_bdi_name allocates a new bdi > and ignores the already existing reference which triggers: > > WARN_ON(sb->s_bdi != &noop_backing_dev_info); > > as sb->s_bdi already has a reference from set_bdev_super. This works > for "fuse" (without a blocking device) for obvious reasons. I can > reproduce this on -rc1 and also found a report on lkml: > https://lkml.org/lkml/2017/5/2/445 > > Only sane solution seems to be maintaining a private bdi instace just > for fuseblk and let fuse use the common new infrastructure. Thanks for analysis! Does the attached patch fix the warning for you? Honza Tested-by: Rakesh Pandit From 5b0cfc37b45670a35228c96cbaee2b99cd3d447c Mon Sep 17 00:00:00 2001 From: Jan Kara Date: Tue, 16 May 2017 12:22:22 +0200 Subject: [PATCH] fuseblk: Fix warning in super_setup_bdi_name() Commit 5f7f7543f52e "fuse: Convert to separately allocated bdi" didn't properly handle fuseblk filesystem. When fuse_bdi_init() is called for that filesystem type, sb->s_bdi is already initialized (by set_bdev_super()) to point to block device's bdi and consequently super_setup_bdi_name() complains about this fact when reseting bdi to the private one. Fix the problem by properly dropping bdi reference in fuse_bdi_init() before creating a private bdi in super_setup_bdi_name(). Fixes: 5f7f7543f52eee03ed35c9d671fbb1cdbd4bc9b5 Reported-by: Rakesh Pandit Signed-off-by: Jan Kara --- fs/fuse/inode.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 5a1b58f8fef4..65c88379a3a1 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -975,8 +975,15 @@ static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb) int err; char *suffix = ""; - if (sb->s_bdev) + if (sb->s_bdev) { suffix = "-fuseblk"; + /* + * sb->s_bdi points to blkdev's bdi however we want to redirect + * it to our private bdi... + */ + bdi_put(sb->s_bdi); + sb->s_bdi = &noop_backing_dev_info; + } err = super_setup_bdi_name(sb, "%u:%u%s", MAJOR(fc->dev), MINOR(fc->dev), suffix); if (err) -- 2.12.0