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;
 
        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);
 
        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 */
        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) ||
        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
        /*
                        cifs_put_smb_ses(ses);
                else
                        cifs_put_tcp_session(server, 0);
-               bdi_destroy(&cifs_sb->bdi);
        }
 
 out:
        }
        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);