cifs: Convert to separately allocated bdi
authorJan Kara <jack@suse.cz>
Wed, 12 Apr 2017 10:24:34 +0000 (12:24 +0200)
committerJens Axboe <axboe@fb.com>
Thu, 20 Apr 2017 18:09:55 +0000 (12:09 -0600)
Allocate struct backing_dev_info separately instead of embedding it
inside superblock. This unifies handling of bdi among users.

CC: Steve French <sfrench@samba.org>
CC: linux-cifs@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@fb.com>
fs/cifs/cifs_fs_sb.h
fs/cifs/cifsfs.c
fs/cifs/connect.c

index 07ed81cf1552e6ae97be753de0720741e3f80068..cbd216b572390ca76e481aabf9a311e4b7749d7c 100644 (file)
@@ -68,7 +68,6 @@ struct cifs_sb_info {
        umode_t mnt_dir_mode;
        unsigned int mnt_cifs_flags;
        char   *mountdata; /* options received at mount time or via DFS refs */
-       struct backing_dev_info bdi;
        struct delayed_work prune_tlinks;
        struct rcu_head rcu;
        char *prepath;
index 15e1db8738aecad0c8a86888c0fa1ada5f9b7623..502eab6bdbc449a487ed86ed9eac416650c2a58b 100644 (file)
@@ -138,7 +138,12 @@ cifs_read_super(struct super_block *sb)
        sb->s_magic = CIFS_MAGIC_NUMBER;
        sb->s_op = &cifs_super_ops;
        sb->s_xattr = cifs_xattr_handlers;
-       sb->s_bdi = &cifs_sb->bdi;
+       rc = super_setup_bdi(sb);
+       if (rc)
+               goto out_no_root;
+       /* tune readahead according to rsize */
+       sb->s_bdi->ra_pages = cifs_sb->rsize / PAGE_SIZE;
+
        sb->s_blocksize = CIFS_MAX_MSGSIZE;
        sb->s_blocksize_bits = 14;      /* default 2**14 = CIFS_MAX_MSGSIZE */
        inode = cifs_root_iget(sb);
index 9ae695ae3ed7be3788db2a889e34cde8a3224c9c..7f50c8949401d08e0797b6b777bc7d5a99c1e367 100644 (file)
@@ -3683,10 +3683,6 @@ cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *volume_info)
        int referral_walks_count = 0;
 #endif
 
-       rc = bdi_setup_and_register(&cifs_sb->bdi, "cifs");
-       if (rc)
-               return rc;
-
 #ifdef CONFIG_CIFS_DFS_UPCALL
 try_mount_again:
        /* cleanup activities if we're chasing a referral */
@@ -3714,7 +3710,6 @@ try_mount_again:
        server = cifs_get_tcp_session(volume_info);
        if (IS_ERR(server)) {
                rc = PTR_ERR(server);
-               bdi_destroy(&cifs_sb->bdi);
                goto out;
        }
        if ((volume_info->max_credits < 20) ||
@@ -3768,9 +3763,6 @@ try_mount_again:
        cifs_sb->wsize = server->ops->negotiate_wsize(tcon, volume_info);
        cifs_sb->rsize = server->ops->negotiate_rsize(tcon, volume_info);
 
-       /* tune readahead according to rsize */
-       cifs_sb->bdi.ra_pages = cifs_sb->rsize / PAGE_SIZE;
-
 remote_path_check:
 #ifdef CONFIG_CIFS_DFS_UPCALL
        /*
@@ -3887,7 +3879,6 @@ mount_fail_check:
                        cifs_put_smb_ses(ses);
                else
                        cifs_put_tcp_session(server, 0);
-               bdi_destroy(&cifs_sb->bdi);
        }
 
 out:
@@ -4090,7 +4081,6 @@ cifs_umount(struct cifs_sb_info *cifs_sb)
        }
        spin_unlock(&cifs_sb->tlink_tree_lock);
 
-       bdi_destroy(&cifs_sb->bdi);
        kfree(cifs_sb->mountdata);
        kfree(cifs_sb->prepath);
        call_rcu(&cifs_sb->rcu, delayed_free);