diff options
Diffstat (limited to 'fs')
59 files changed, 93 insertions, 283 deletions
diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index 6894b085f0ee..620d93489539 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c | |||
@@ -335,7 +335,7 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses, | |||
335 | } | 335 | } |
336 | init_rwsem(&v9ses->rename_sem); | 336 | init_rwsem(&v9ses->rename_sem); |
337 | 337 | ||
338 | rc = bdi_setup_and_register(&v9ses->bdi, "9p", BDI_CAP_MAP_COPY); | 338 | rc = bdi_setup_and_register(&v9ses->bdi, "9p"); |
339 | if (rc) { | 339 | if (rc) { |
340 | kfree(v9ses->aname); | 340 | kfree(v9ses->aname); |
341 | kfree(v9ses->uname); | 341 | kfree(v9ses->uname); |
diff --git a/fs/afs/volume.c b/fs/afs/volume.c index 2b607257820c..d142a2449e65 100644 --- a/fs/afs/volume.c +++ b/fs/afs/volume.c | |||
@@ -106,7 +106,7 @@ struct afs_volume *afs_volume_lookup(struct afs_mount_params *params) | |||
106 | volume->cell = params->cell; | 106 | volume->cell = params->cell; |
107 | volume->vid = vlocation->vldb.vid[params->type]; | 107 | volume->vid = vlocation->vldb.vid[params->type]; |
108 | 108 | ||
109 | ret = bdi_setup_and_register(&volume->bdi, "afs", BDI_CAP_MAP_COPY); | 109 | ret = bdi_setup_and_register(&volume->bdi, "afs"); |
110 | if (ret) | 110 | if (ret) |
111 | goto error_bdi; | 111 | goto error_bdi; |
112 | 112 | ||
@@ -165,15 +165,6 @@ static struct vfsmount *aio_mnt; | |||
165 | static const struct file_operations aio_ring_fops; | 165 | static const struct file_operations aio_ring_fops; |
166 | static const struct address_space_operations aio_ctx_aops; | 166 | static const struct address_space_operations aio_ctx_aops; |
167 | 167 | ||
168 | /* Backing dev info for aio fs. | ||
169 | * -no dirty page accounting or writeback happens | ||
170 | */ | ||
171 | static struct backing_dev_info aio_fs_backing_dev_info = { | ||
172 | .name = "aiofs", | ||
173 | .state = 0, | ||
174 | .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK | BDI_CAP_MAP_COPY, | ||
175 | }; | ||
176 | |||
177 | static struct file *aio_private_file(struct kioctx *ctx, loff_t nr_pages) | 168 | static struct file *aio_private_file(struct kioctx *ctx, loff_t nr_pages) |
178 | { | 169 | { |
179 | struct qstr this = QSTR_INIT("[aio]", 5); | 170 | struct qstr this = QSTR_INIT("[aio]", 5); |
@@ -185,7 +176,6 @@ static struct file *aio_private_file(struct kioctx *ctx, loff_t nr_pages) | |||
185 | 176 | ||
186 | inode->i_mapping->a_ops = &aio_ctx_aops; | 177 | inode->i_mapping->a_ops = &aio_ctx_aops; |
187 | inode->i_mapping->private_data = ctx; | 178 | inode->i_mapping->private_data = ctx; |
188 | inode->i_mapping->backing_dev_info = &aio_fs_backing_dev_info; | ||
189 | inode->i_size = PAGE_SIZE * nr_pages; | 179 | inode->i_size = PAGE_SIZE * nr_pages; |
190 | 180 | ||
191 | path.dentry = d_alloc_pseudo(aio_mnt->mnt_sb, &this); | 181 | path.dentry = d_alloc_pseudo(aio_mnt->mnt_sb, &this); |
@@ -230,9 +220,6 @@ static int __init aio_setup(void) | |||
230 | if (IS_ERR(aio_mnt)) | 220 | if (IS_ERR(aio_mnt)) |
231 | panic("Failed to create aio fs mount."); | 221 | panic("Failed to create aio fs mount."); |
232 | 222 | ||
233 | if (bdi_init(&aio_fs_backing_dev_info)) | ||
234 | panic("Failed to init aio fs backing dev info."); | ||
235 | |||
236 | kiocb_cachep = KMEM_CACHE(kiocb, SLAB_HWCACHE_ALIGN|SLAB_PANIC); | 223 | kiocb_cachep = KMEM_CACHE(kiocb, SLAB_HWCACHE_ALIGN|SLAB_PANIC); |
237 | kioctx_cachep = KMEM_CACHE(kioctx,SLAB_HWCACHE_ALIGN|SLAB_PANIC); | 224 | kioctx_cachep = KMEM_CACHE(kioctx,SLAB_HWCACHE_ALIGN|SLAB_PANIC); |
238 | 225 | ||
diff --git a/fs/block_dev.c b/fs/block_dev.c index b48c41bf0f86..a9f92794d7a0 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
@@ -49,23 +49,15 @@ inline struct block_device *I_BDEV(struct inode *inode) | |||
49 | } | 49 | } |
50 | EXPORT_SYMBOL(I_BDEV); | 50 | EXPORT_SYMBOL(I_BDEV); |
51 | 51 | ||
52 | /* | 52 | static void bdev_write_inode(struct inode *inode) |
53 | * Move the inode from its current bdi to a new bdi. Make sure the inode | ||
54 | * is clean before moving so that it doesn't linger on the old bdi. | ||
55 | */ | ||
56 | static void bdev_inode_switch_bdi(struct inode *inode, | ||
57 | struct backing_dev_info *dst) | ||
58 | { | 53 | { |
59 | while (true) { | 54 | spin_lock(&inode->i_lock); |
60 | spin_lock(&inode->i_lock); | 55 | while (inode->i_state & I_DIRTY) { |
61 | if (!(inode->i_state & I_DIRTY)) { | ||
62 | inode->i_data.backing_dev_info = dst; | ||
63 | spin_unlock(&inode->i_lock); | ||
64 | return; | ||
65 | } | ||
66 | spin_unlock(&inode->i_lock); | 56 | spin_unlock(&inode->i_lock); |
67 | WARN_ON_ONCE(write_inode_now(inode, true)); | 57 | WARN_ON_ONCE(write_inode_now(inode, true)); |
58 | spin_lock(&inode->i_lock); | ||
68 | } | 59 | } |
60 | spin_unlock(&inode->i_lock); | ||
69 | } | 61 | } |
70 | 62 | ||
71 | /* Kill _all_ buffers and pagecache , dirty or not.. */ | 63 | /* Kill _all_ buffers and pagecache , dirty or not.. */ |
@@ -584,7 +576,6 @@ struct block_device *bdget(dev_t dev) | |||
584 | inode->i_bdev = bdev; | 576 | inode->i_bdev = bdev; |
585 | inode->i_data.a_ops = &def_blk_aops; | 577 | inode->i_data.a_ops = &def_blk_aops; |
586 | mapping_set_gfp_mask(&inode->i_data, GFP_USER); | 578 | mapping_set_gfp_mask(&inode->i_data, GFP_USER); |
587 | inode->i_data.backing_dev_info = &default_backing_dev_info; | ||
588 | spin_lock(&bdev_lock); | 579 | spin_lock(&bdev_lock); |
589 | list_add(&bdev->bd_list, &all_bdevs); | 580 | list_add(&bdev->bd_list, &all_bdevs); |
590 | spin_unlock(&bdev_lock); | 581 | spin_unlock(&bdev_lock); |
@@ -1145,8 +1136,6 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) | |||
1145 | bdev->bd_queue = disk->queue; | 1136 | bdev->bd_queue = disk->queue; |
1146 | bdev->bd_contains = bdev; | 1137 | bdev->bd_contains = bdev; |
1147 | if (!partno) { | 1138 | if (!partno) { |
1148 | struct backing_dev_info *bdi; | ||
1149 | |||
1150 | ret = -ENXIO; | 1139 | ret = -ENXIO; |
1151 | bdev->bd_part = disk_get_part(disk, partno); | 1140 | bdev->bd_part = disk_get_part(disk, partno); |
1152 | if (!bdev->bd_part) | 1141 | if (!bdev->bd_part) |
@@ -1172,11 +1161,8 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) | |||
1172 | } | 1161 | } |
1173 | } | 1162 | } |
1174 | 1163 | ||
1175 | if (!ret) { | 1164 | if (!ret) |
1176 | bd_set_size(bdev,(loff_t)get_capacity(disk)<<9); | 1165 | bd_set_size(bdev,(loff_t)get_capacity(disk)<<9); |
1177 | bdi = blk_get_backing_dev_info(bdev); | ||
1178 | bdev_inode_switch_bdi(bdev->bd_inode, bdi); | ||
1179 | } | ||
1180 | 1166 | ||
1181 | /* | 1167 | /* |
1182 | * If the device is invalidated, rescan partition | 1168 | * If the device is invalidated, rescan partition |
@@ -1203,8 +1189,6 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) | |||
1203 | if (ret) | 1189 | if (ret) |
1204 | goto out_clear; | 1190 | goto out_clear; |
1205 | bdev->bd_contains = whole; | 1191 | bdev->bd_contains = whole; |
1206 | bdev_inode_switch_bdi(bdev->bd_inode, | ||
1207 | whole->bd_inode->i_data.backing_dev_info); | ||
1208 | bdev->bd_part = disk_get_part(disk, partno); | 1192 | bdev->bd_part = disk_get_part(disk, partno); |
1209 | if (!(disk->flags & GENHD_FL_UP) || | 1193 | if (!(disk->flags & GENHD_FL_UP) || |
1210 | !bdev->bd_part || !bdev->bd_part->nr_sects) { | 1194 | !bdev->bd_part || !bdev->bd_part->nr_sects) { |
@@ -1244,7 +1228,6 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) | |||
1244 | bdev->bd_disk = NULL; | 1228 | bdev->bd_disk = NULL; |
1245 | bdev->bd_part = NULL; | 1229 | bdev->bd_part = NULL; |
1246 | bdev->bd_queue = NULL; | 1230 | bdev->bd_queue = NULL; |
1247 | bdev_inode_switch_bdi(bdev->bd_inode, &default_backing_dev_info); | ||
1248 | if (bdev != bdev->bd_contains) | 1231 | if (bdev != bdev->bd_contains) |
1249 | __blkdev_put(bdev->bd_contains, mode, 1); | 1232 | __blkdev_put(bdev->bd_contains, mode, 1); |
1250 | bdev->bd_contains = NULL; | 1233 | bdev->bd_contains = NULL; |
@@ -1464,11 +1447,11 @@ static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part) | |||
1464 | WARN_ON_ONCE(bdev->bd_holders); | 1447 | WARN_ON_ONCE(bdev->bd_holders); |
1465 | sync_blockdev(bdev); | 1448 | sync_blockdev(bdev); |
1466 | kill_bdev(bdev); | 1449 | kill_bdev(bdev); |
1467 | /* ->release can cause the old bdi to disappear, | 1450 | /* |
1468 | * so must switch it out first | 1451 | * ->release can cause the queue to disappear, so flush all |
1452 | * dirty data before. | ||
1469 | */ | 1453 | */ |
1470 | bdev_inode_switch_bdi(bdev->bd_inode, | 1454 | bdev_write_inode(bdev->bd_inode); |
1471 | &default_backing_dev_info); | ||
1472 | } | 1455 | } |
1473 | if (bdev->bd_contains == bdev) { | 1456 | if (bdev->bd_contains == bdev) { |
1474 | if (disk->fops->release) | 1457 | if (disk->fops->release) |
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 8c63419a7f70..1afb18226da8 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -1715,12 +1715,11 @@ static int setup_bdi(struct btrfs_fs_info *info, struct backing_dev_info *bdi) | |||
1715 | { | 1715 | { |
1716 | int err; | 1716 | int err; |
1717 | 1717 | ||
1718 | bdi->capabilities = BDI_CAP_MAP_COPY; | 1718 | err = bdi_setup_and_register(bdi, "btrfs"); |
1719 | err = bdi_setup_and_register(bdi, "btrfs", BDI_CAP_MAP_COPY); | ||
1720 | if (err) | 1719 | if (err) |
1721 | return err; | 1720 | return err; |
1722 | 1721 | ||
1723 | bdi->ra_pages = default_backing_dev_info.ra_pages; | 1722 | bdi->ra_pages = VM_MAX_READAHEAD * 1024 / PAGE_CACHE_SIZE; |
1724 | bdi->congested_fn = btrfs_congested_fn; | 1723 | bdi->congested_fn = btrfs_congested_fn; |
1725 | bdi->congested_data = info; | 1724 | bdi->congested_data = info; |
1726 | return 0; | 1725 | return 0; |
@@ -2319,7 +2318,6 @@ int open_ctree(struct super_block *sb, | |||
2319 | */ | 2318 | */ |
2320 | fs_info->btree_inode->i_size = OFFSET_MAX; | 2319 | fs_info->btree_inode->i_size = OFFSET_MAX; |
2321 | fs_info->btree_inode->i_mapping->a_ops = &btree_aops; | 2320 | fs_info->btree_inode->i_mapping->a_ops = &btree_aops; |
2322 | fs_info->btree_inode->i_mapping->backing_dev_info = &fs_info->bdi; | ||
2323 | 2321 | ||
2324 | RB_CLEAR_NODE(&BTRFS_I(fs_info->btree_inode)->rb_node); | 2322 | RB_CLEAR_NODE(&BTRFS_I(fs_info->btree_inode)->rb_node); |
2325 | extent_io_tree_init(&BTRFS_I(fs_info->btree_inode)->io_tree, | 2323 | extent_io_tree_init(&BTRFS_I(fs_info->btree_inode)->io_tree, |
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index a606ab551296..b78bbbac900d 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -1746,7 +1746,7 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb, | |||
1746 | 1746 | ||
1747 | mutex_lock(&inode->i_mutex); | 1747 | mutex_lock(&inode->i_mutex); |
1748 | 1748 | ||
1749 | current->backing_dev_info = inode->i_mapping->backing_dev_info; | 1749 | current->backing_dev_info = inode_to_bdi(inode); |
1750 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); | 1750 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); |
1751 | if (err) { | 1751 | if (err) { |
1752 | mutex_unlock(&inode->i_mutex); | 1752 | mutex_unlock(&inode->i_mutex); |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 8bf326affb94..54bcf639d1cf 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -3608,7 +3608,6 @@ cache_acl: | |||
3608 | switch (inode->i_mode & S_IFMT) { | 3608 | switch (inode->i_mode & S_IFMT) { |
3609 | case S_IFREG: | 3609 | case S_IFREG: |
3610 | inode->i_mapping->a_ops = &btrfs_aops; | 3610 | inode->i_mapping->a_ops = &btrfs_aops; |
3611 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; | ||
3612 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; | 3611 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; |
3613 | inode->i_fop = &btrfs_file_operations; | 3612 | inode->i_fop = &btrfs_file_operations; |
3614 | inode->i_op = &btrfs_file_inode_operations; | 3613 | inode->i_op = &btrfs_file_inode_operations; |
@@ -3623,7 +3622,6 @@ cache_acl: | |||
3623 | case S_IFLNK: | 3622 | case S_IFLNK: |
3624 | inode->i_op = &btrfs_symlink_inode_operations; | 3623 | inode->i_op = &btrfs_symlink_inode_operations; |
3625 | inode->i_mapping->a_ops = &btrfs_symlink_aops; | 3624 | inode->i_mapping->a_ops = &btrfs_symlink_aops; |
3626 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; | ||
3627 | break; | 3625 | break; |
3628 | default: | 3626 | default: |
3629 | inode->i_op = &btrfs_special_inode_operations; | 3627 | inode->i_op = &btrfs_special_inode_operations; |
@@ -6088,7 +6086,6 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, | |||
6088 | inode->i_fop = &btrfs_file_operations; | 6086 | inode->i_fop = &btrfs_file_operations; |
6089 | inode->i_op = &btrfs_file_inode_operations; | 6087 | inode->i_op = &btrfs_file_inode_operations; |
6090 | inode->i_mapping->a_ops = &btrfs_aops; | 6088 | inode->i_mapping->a_ops = &btrfs_aops; |
6091 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; | ||
6092 | 6089 | ||
6093 | err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); | 6090 | err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); |
6094 | if (err) | 6091 | if (err) |
@@ -9203,7 +9200,6 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry, | |||
9203 | inode->i_fop = &btrfs_file_operations; | 9200 | inode->i_fop = &btrfs_file_operations; |
9204 | inode->i_op = &btrfs_file_inode_operations; | 9201 | inode->i_op = &btrfs_file_inode_operations; |
9205 | inode->i_mapping->a_ops = &btrfs_aops; | 9202 | inode->i_mapping->a_ops = &btrfs_aops; |
9206 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; | ||
9207 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; | 9203 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; |
9208 | 9204 | ||
9209 | err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); | 9205 | err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); |
@@ -9247,7 +9243,6 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry, | |||
9247 | 9243 | ||
9248 | inode->i_op = &btrfs_symlink_inode_operations; | 9244 | inode->i_op = &btrfs_symlink_inode_operations; |
9249 | inode->i_mapping->a_ops = &btrfs_symlink_aops; | 9245 | inode->i_mapping->a_ops = &btrfs_symlink_aops; |
9250 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; | ||
9251 | inode_set_bytes(inode, name_len); | 9246 | inode_set_bytes(inode, name_len); |
9252 | btrfs_i_size_write(inode, name_len); | 9247 | btrfs_i_size_write(inode, name_len); |
9253 | err = btrfs_update_inode(trans, root, inode); | 9248 | err = btrfs_update_inode(trans, root, inode); |
@@ -9459,7 +9454,6 @@ static int btrfs_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) | |||
9459 | inode->i_op = &btrfs_file_inode_operations; | 9454 | inode->i_op = &btrfs_file_inode_operations; |
9460 | 9455 | ||
9461 | inode->i_mapping->a_ops = &btrfs_aops; | 9456 | inode->i_mapping->a_ops = &btrfs_aops; |
9462 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; | ||
9463 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; | 9457 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; |
9464 | 9458 | ||
9465 | ret = btrfs_init_inode_security(trans, inode, dir, NULL); | 9459 | ret = btrfs_init_inode_security(trans, inode, dir, NULL); |
diff --git a/fs/ceph/file.c b/fs/ceph/file.c index ce74b394b49d..905986dd4c3c 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c | |||
@@ -945,7 +945,7 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from) | |||
945 | mutex_lock(&inode->i_mutex); | 945 | mutex_lock(&inode->i_mutex); |
946 | 946 | ||
947 | /* We can write back this queue in page reclaim */ | 947 | /* We can write back this queue in page reclaim */ |
948 | current->backing_dev_info = file->f_mapping->backing_dev_info; | 948 | current->backing_dev_info = inode_to_bdi(inode); |
949 | 949 | ||
950 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); | 950 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); |
951 | if (err) | 951 | if (err) |
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index f61a74115beb..6b5173605154 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c | |||
@@ -783,8 +783,6 @@ static int fill_inode(struct inode *inode, struct page *locked_page, | |||
783 | } | 783 | } |
784 | 784 | ||
785 | inode->i_mapping->a_ops = &ceph_aops; | 785 | inode->i_mapping->a_ops = &ceph_aops; |
786 | inode->i_mapping->backing_dev_info = | ||
787 | &ceph_sb_to_client(inode->i_sb)->backing_dev_info; | ||
788 | 786 | ||
789 | switch (inode->i_mode & S_IFMT) { | 787 | switch (inode->i_mode & S_IFMT) { |
790 | case S_IFIFO: | 788 | case S_IFIFO: |
diff --git a/fs/ceph/super.c b/fs/ceph/super.c index 50f06cddc94b..5ae62587a71d 100644 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c | |||
@@ -40,17 +40,6 @@ static void ceph_put_super(struct super_block *s) | |||
40 | 40 | ||
41 | dout("put_super\n"); | 41 | dout("put_super\n"); |
42 | ceph_mdsc_close_sessions(fsc->mdsc); | 42 | ceph_mdsc_close_sessions(fsc->mdsc); |
43 | |||
44 | /* | ||
45 | * ensure we release the bdi before put_anon_super releases | ||
46 | * the device name. | ||
47 | */ | ||
48 | if (s->s_bdi == &fsc->backing_dev_info) { | ||
49 | bdi_unregister(&fsc->backing_dev_info); | ||
50 | s->s_bdi = NULL; | ||
51 | } | ||
52 | |||
53 | return; | ||
54 | } | 43 | } |
55 | 44 | ||
56 | static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf) | 45 | static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf) |
@@ -910,7 +899,7 @@ static int ceph_register_bdi(struct super_block *sb, | |||
910 | >> PAGE_SHIFT; | 899 | >> PAGE_SHIFT; |
911 | else | 900 | else |
912 | fsc->backing_dev_info.ra_pages = | 901 | fsc->backing_dev_info.ra_pages = |
913 | default_backing_dev_info.ra_pages; | 902 | VM_MAX_READAHEAD * 1024 / PAGE_CACHE_SIZE; |
914 | 903 | ||
915 | err = bdi_register(&fsc->backing_dev_info, NULL, "ceph-%ld", | 904 | err = bdi_register(&fsc->backing_dev_info, NULL, "ceph-%ld", |
916 | atomic_long_inc_return(&bdi_seq)); | 905 | atomic_long_inc_return(&bdi_seq)); |
@@ -1002,11 +991,16 @@ out_final: | |||
1002 | static void ceph_kill_sb(struct super_block *s) | 991 | static void ceph_kill_sb(struct super_block *s) |
1003 | { | 992 | { |
1004 | struct ceph_fs_client *fsc = ceph_sb_to_client(s); | 993 | struct ceph_fs_client *fsc = ceph_sb_to_client(s); |
994 | dev_t dev = s->s_dev; | ||
995 | |||
1005 | dout("kill_sb %p\n", s); | 996 | dout("kill_sb %p\n", s); |
997 | |||
1006 | ceph_mdsc_pre_umount(fsc->mdsc); | 998 | ceph_mdsc_pre_umount(fsc->mdsc); |
1007 | kill_anon_super(s); /* will call put_super after sb is r/o */ | 999 | generic_shutdown_super(s); |
1008 | ceph_mdsc_destroy(fsc); | 1000 | ceph_mdsc_destroy(fsc); |
1001 | |||
1009 | destroy_fs_client(fsc); | 1002 | destroy_fs_client(fsc); |
1003 | free_anon_bdev(dev); | ||
1010 | } | 1004 | } |
1011 | 1005 | ||
1012 | static struct file_system_type ceph_fs_type = { | 1006 | static struct file_system_type ceph_fs_type = { |
diff --git a/fs/char_dev.c b/fs/char_dev.c index 67b2007f10fe..ea06a3d0364c 100644 --- a/fs/char_dev.c +++ b/fs/char_dev.c | |||
@@ -24,27 +24,6 @@ | |||
24 | 24 | ||
25 | #include "internal.h" | 25 | #include "internal.h" |
26 | 26 | ||
27 | /* | ||
28 | * capabilities for /dev/mem, /dev/kmem and similar directly mappable character | ||
29 | * devices | ||
30 | * - permits shared-mmap for read, write and/or exec | ||
31 | * - does not permit private mmap in NOMMU mode (can't do COW) | ||
32 | * - no readahead or I/O queue unplugging required | ||
33 | */ | ||
34 | struct backing_dev_info directly_mappable_cdev_bdi = { | ||
35 | .name = "char", | ||
36 | .capabilities = ( | ||
37 | #ifdef CONFIG_MMU | ||
38 | /* permit private copies of the data to be taken */ | ||
39 | BDI_CAP_MAP_COPY | | ||
40 | #endif | ||
41 | /* permit direct mmap, for read, write or exec */ | ||
42 | BDI_CAP_MAP_DIRECT | | ||
43 | BDI_CAP_READ_MAP | BDI_CAP_WRITE_MAP | BDI_CAP_EXEC_MAP | | ||
44 | /* no writeback happens */ | ||
45 | BDI_CAP_NO_ACCT_AND_WRITEBACK), | ||
46 | }; | ||
47 | |||
48 | static struct kobj_map *cdev_map; | 27 | static struct kobj_map *cdev_map; |
49 | 28 | ||
50 | static DEFINE_MUTEX(chrdevs_lock); | 29 | static DEFINE_MUTEX(chrdevs_lock); |
@@ -575,8 +554,6 @@ static struct kobject *base_probe(dev_t dev, int *part, void *data) | |||
575 | void __init chrdev_init(void) | 554 | void __init chrdev_init(void) |
576 | { | 555 | { |
577 | cdev_map = kobj_map_init(base_probe, &chrdevs_lock); | 556 | cdev_map = kobj_map_init(base_probe, &chrdevs_lock); |
578 | if (bdi_init(&directly_mappable_cdev_bdi)) | ||
579 | panic("Failed to init directly mappable cdev bdi"); | ||
580 | } | 557 | } |
581 | 558 | ||
582 | 559 | ||
@@ -590,4 +567,3 @@ EXPORT_SYMBOL(cdev_del); | |||
590 | EXPORT_SYMBOL(cdev_add); | 567 | EXPORT_SYMBOL(cdev_add); |
591 | EXPORT_SYMBOL(__register_chrdev); | 568 | EXPORT_SYMBOL(__register_chrdev); |
592 | EXPORT_SYMBOL(__unregister_chrdev); | 569 | EXPORT_SYMBOL(__unregister_chrdev); |
593 | EXPORT_SYMBOL(directly_mappable_cdev_bdi); | ||
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 2a772da16b83..d3aa999ab785 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
@@ -3446,7 +3446,7 @@ cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *volume_info) | |||
3446 | int referral_walks_count = 0; | 3446 | int referral_walks_count = 0; |
3447 | #endif | 3447 | #endif |
3448 | 3448 | ||
3449 | rc = bdi_setup_and_register(&cifs_sb->bdi, "cifs", BDI_CAP_MAP_COPY); | 3449 | rc = bdi_setup_and_register(&cifs_sb->bdi, "cifs"); |
3450 | if (rc) | 3450 | if (rc) |
3451 | return rc; | 3451 | return rc; |
3452 | 3452 | ||
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 0c3ce464cae4..2d4f37235ed0 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -937,8 +937,6 @@ retry_iget5_locked: | |||
937 | inode->i_flags |= S_NOATIME | S_NOCMTIME; | 937 | inode->i_flags |= S_NOATIME | S_NOCMTIME; |
938 | if (inode->i_state & I_NEW) { | 938 | if (inode->i_state & I_NEW) { |
939 | inode->i_ino = hash; | 939 | inode->i_ino = hash; |
940 | if (S_ISREG(inode->i_mode)) | ||
941 | inode->i_data.backing_dev_info = sb->s_bdi; | ||
942 | #ifdef CONFIG_CIFS_FSCACHE | 940 | #ifdef CONFIG_CIFS_FSCACHE |
943 | /* initialize per-inode cache cookie pointer */ | 941 | /* initialize per-inode cache cookie pointer */ |
944 | CIFS_I(inode)->fscache = NULL; | 942 | CIFS_I(inode)->fscache = NULL; |
diff --git a/fs/coda/inode.c b/fs/coda/inode.c index b945410bfcd5..82ec68b59208 100644 --- a/fs/coda/inode.c +++ b/fs/coda/inode.c | |||
@@ -183,7 +183,7 @@ static int coda_fill_super(struct super_block *sb, void *data, int silent) | |||
183 | goto unlock_out; | 183 | goto unlock_out; |
184 | } | 184 | } |
185 | 185 | ||
186 | error = bdi_setup_and_register(&vc->bdi, "coda", BDI_CAP_MAP_COPY); | 186 | error = bdi_setup_and_register(&vc->bdi, "coda"); |
187 | if (error) | 187 | if (error) |
188 | goto unlock_out; | 188 | goto unlock_out; |
189 | 189 | ||
diff --git a/fs/configfs/configfs_internal.h b/fs/configfs/configfs_internal.h index bd4a3c167091..a315677e44d3 100644 --- a/fs/configfs/configfs_internal.h +++ b/fs/configfs/configfs_internal.h | |||
@@ -70,8 +70,6 @@ extern int configfs_is_root(struct config_item *item); | |||
70 | 70 | ||
71 | extern struct inode * configfs_new_inode(umode_t mode, struct configfs_dirent *, struct super_block *); | 71 | extern struct inode * configfs_new_inode(umode_t mode, struct configfs_dirent *, struct super_block *); |
72 | extern int configfs_create(struct dentry *, umode_t mode, int (*init)(struct inode *)); | 72 | extern int configfs_create(struct dentry *, umode_t mode, int (*init)(struct inode *)); |
73 | extern int configfs_inode_init(void); | ||
74 | extern void configfs_inode_exit(void); | ||
75 | 73 | ||
76 | extern int configfs_create_file(struct config_item *, const struct configfs_attribute *); | 74 | extern int configfs_create_file(struct config_item *, const struct configfs_attribute *); |
77 | extern int configfs_make_dirent(struct configfs_dirent *, | 75 | extern int configfs_make_dirent(struct configfs_dirent *, |
diff --git a/fs/configfs/inode.c b/fs/configfs/inode.c index 5946ad98053f..65af86147154 100644 --- a/fs/configfs/inode.c +++ b/fs/configfs/inode.c | |||
@@ -50,12 +50,6 @@ static const struct address_space_operations configfs_aops = { | |||
50 | .write_end = simple_write_end, | 50 | .write_end = simple_write_end, |
51 | }; | 51 | }; |
52 | 52 | ||
53 | static struct backing_dev_info configfs_backing_dev_info = { | ||
54 | .name = "configfs", | ||
55 | .ra_pages = 0, /* No readahead */ | ||
56 | .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK, | ||
57 | }; | ||
58 | |||
59 | static const struct inode_operations configfs_inode_operations ={ | 53 | static const struct inode_operations configfs_inode_operations ={ |
60 | .setattr = configfs_setattr, | 54 | .setattr = configfs_setattr, |
61 | }; | 55 | }; |
@@ -137,7 +131,6 @@ struct inode *configfs_new_inode(umode_t mode, struct configfs_dirent *sd, | |||
137 | if (inode) { | 131 | if (inode) { |
138 | inode->i_ino = get_next_ino(); | 132 | inode->i_ino = get_next_ino(); |
139 | inode->i_mapping->a_ops = &configfs_aops; | 133 | inode->i_mapping->a_ops = &configfs_aops; |
140 | inode->i_mapping->backing_dev_info = &configfs_backing_dev_info; | ||
141 | inode->i_op = &configfs_inode_operations; | 134 | inode->i_op = &configfs_inode_operations; |
142 | 135 | ||
143 | if (sd->s_iattr) { | 136 | if (sd->s_iattr) { |
@@ -283,13 +276,3 @@ void configfs_hash_and_remove(struct dentry * dir, const char * name) | |||
283 | } | 276 | } |
284 | mutex_unlock(&dir->d_inode->i_mutex); | 277 | mutex_unlock(&dir->d_inode->i_mutex); |
285 | } | 278 | } |
286 | |||
287 | int __init configfs_inode_init(void) | ||
288 | { | ||
289 | return bdi_init(&configfs_backing_dev_info); | ||
290 | } | ||
291 | |||
292 | void configfs_inode_exit(void) | ||
293 | { | ||
294 | bdi_destroy(&configfs_backing_dev_info); | ||
295 | } | ||
diff --git a/fs/configfs/mount.c b/fs/configfs/mount.c index f6c285833390..da94e41bdbf6 100644 --- a/fs/configfs/mount.c +++ b/fs/configfs/mount.c | |||
@@ -145,19 +145,13 @@ static int __init configfs_init(void) | |||
145 | if (!config_kobj) | 145 | if (!config_kobj) |
146 | goto out2; | 146 | goto out2; |
147 | 147 | ||
148 | err = configfs_inode_init(); | ||
149 | if (err) | ||
150 | goto out3; | ||
151 | |||
152 | err = register_filesystem(&configfs_fs_type); | 148 | err = register_filesystem(&configfs_fs_type); |
153 | if (err) | 149 | if (err) |
154 | goto out4; | 150 | goto out3; |
155 | 151 | ||
156 | return 0; | 152 | return 0; |
157 | out4: | ||
158 | pr_err("Unable to register filesystem!\n"); | ||
159 | configfs_inode_exit(); | ||
160 | out3: | 153 | out3: |
154 | pr_err("Unable to register filesystem!\n"); | ||
161 | kobject_put(config_kobj); | 155 | kobject_put(config_kobj); |
162 | out2: | 156 | out2: |
163 | kmem_cache_destroy(configfs_dir_cachep); | 157 | kmem_cache_destroy(configfs_dir_cachep); |
@@ -172,7 +166,6 @@ static void __exit configfs_exit(void) | |||
172 | kobject_put(config_kobj); | 166 | kobject_put(config_kobj); |
173 | kmem_cache_destroy(configfs_dir_cachep); | 167 | kmem_cache_destroy(configfs_dir_cachep); |
174 | configfs_dir_cachep = NULL; | 168 | configfs_dir_cachep = NULL; |
175 | configfs_inode_exit(); | ||
176 | } | 169 | } |
177 | 170 | ||
178 | MODULE_AUTHOR("Oracle"); | 171 | MODULE_AUTHOR("Oracle"); |
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 1686dc2da9fd..34b36a504059 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c | |||
@@ -67,7 +67,6 @@ static int ecryptfs_inode_set(struct inode *inode, void *opaque) | |||
67 | inode->i_ino = lower_inode->i_ino; | 67 | inode->i_ino = lower_inode->i_ino; |
68 | inode->i_version++; | 68 | inode->i_version++; |
69 | inode->i_mapping->a_ops = &ecryptfs_aops; | 69 | inode->i_mapping->a_ops = &ecryptfs_aops; |
70 | inode->i_mapping->backing_dev_info = inode->i_sb->s_bdi; | ||
71 | 70 | ||
72 | if (S_ISLNK(inode->i_mode)) | 71 | if (S_ISLNK(inode->i_mode)) |
73 | inode->i_op = &ecryptfs_symlink_iops; | 72 | inode->i_op = &ecryptfs_symlink_iops; |
diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c index d9eb84bda559..1895d60f4122 100644 --- a/fs/ecryptfs/main.c +++ b/fs/ecryptfs/main.c | |||
@@ -520,7 +520,7 @@ static struct dentry *ecryptfs_mount(struct file_system_type *fs_type, int flags | |||
520 | goto out; | 520 | goto out; |
521 | } | 521 | } |
522 | 522 | ||
523 | rc = bdi_setup_and_register(&sbi->bdi, "ecryptfs", BDI_CAP_MAP_COPY); | 523 | rc = bdi_setup_and_register(&sbi->bdi, "ecryptfs"); |
524 | if (rc) | 524 | if (rc) |
525 | goto out1; | 525 | goto out1; |
526 | 526 | ||
diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c index f1d3d4eb8c4f..6fc91df99ff8 100644 --- a/fs/exofs/inode.c +++ b/fs/exofs/inode.c | |||
@@ -1214,7 +1214,6 @@ struct inode *exofs_iget(struct super_block *sb, unsigned long ino) | |||
1214 | memcpy(oi->i_data, fcb.i_data, sizeof(fcb.i_data)); | 1214 | memcpy(oi->i_data, fcb.i_data, sizeof(fcb.i_data)); |
1215 | } | 1215 | } |
1216 | 1216 | ||
1217 | inode->i_mapping->backing_dev_info = sb->s_bdi; | ||
1218 | if (S_ISREG(inode->i_mode)) { | 1217 | if (S_ISREG(inode->i_mode)) { |
1219 | inode->i_op = &exofs_file_inode_operations; | 1218 | inode->i_op = &exofs_file_inode_operations; |
1220 | inode->i_fop = &exofs_file_operations; | 1219 | inode->i_fop = &exofs_file_operations; |
@@ -1314,7 +1313,6 @@ struct inode *exofs_new_inode(struct inode *dir, umode_t mode) | |||
1314 | 1313 | ||
1315 | set_obj_2bcreated(oi); | 1314 | set_obj_2bcreated(oi); |
1316 | 1315 | ||
1317 | inode->i_mapping->backing_dev_info = sb->s_bdi; | ||
1318 | inode_init_owner(inode, dir, mode); | 1316 | inode_init_owner(inode, dir, mode); |
1319 | inode->i_ino = sbi->s_nextid++; | 1317 | inode->i_ino = sbi->s_nextid++; |
1320 | inode->i_blkbits = EXOFS_BLKSHIFT; | 1318 | inode->i_blkbits = EXOFS_BLKSHIFT; |
diff --git a/fs/exofs/super.c b/fs/exofs/super.c index 95965503afcb..fcc2e565f540 100644 --- a/fs/exofs/super.c +++ b/fs/exofs/super.c | |||
@@ -836,7 +836,7 @@ static int exofs_fill_super(struct super_block *sb, void *data, int silent) | |||
836 | goto free_sbi; | 836 | goto free_sbi; |
837 | } | 837 | } |
838 | 838 | ||
839 | ret = bdi_setup_and_register(&sbi->bdi, "exofs", BDI_CAP_MAP_COPY); | 839 | ret = bdi_setup_and_register(&sbi->bdi, "exofs"); |
840 | if (ret) { | 840 | if (ret) { |
841 | EXOFS_DBGMSG("Failed to bdi_setup_and_register\n"); | 841 | EXOFS_DBGMSG("Failed to bdi_setup_and_register\n"); |
842 | dput(sb->s_root); | 842 | dput(sb->s_root); |
diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c index 7d66fb0e4cca..6c14bb8322fa 100644 --- a/fs/ext2/ialloc.c +++ b/fs/ext2/ialloc.c | |||
@@ -170,7 +170,7 @@ static void ext2_preread_inode(struct inode *inode) | |||
170 | struct ext2_group_desc * gdp; | 170 | struct ext2_group_desc * gdp; |
171 | struct backing_dev_info *bdi; | 171 | struct backing_dev_info *bdi; |
172 | 172 | ||
173 | bdi = inode->i_mapping->backing_dev_info; | 173 | bdi = inode_to_bdi(inode); |
174 | if (bdi_read_congested(bdi)) | 174 | if (bdi_read_congested(bdi)) |
175 | return; | 175 | return; |
176 | if (bdi_write_congested(bdi)) | 176 | if (bdi_write_congested(bdi)) |
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index ac64edbe501d..64c39c7c594f 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
@@ -334,7 +334,7 @@ static void save_error_info(struct super_block *sb, const char *func, | |||
334 | static int block_device_ejected(struct super_block *sb) | 334 | static int block_device_ejected(struct super_block *sb) |
335 | { | 335 | { |
336 | struct inode *bd_inode = sb->s_bdev->bd_inode; | 336 | struct inode *bd_inode = sb->s_bdev->bd_inode; |
337 | struct backing_dev_info *bdi = bd_inode->i_mapping->backing_dev_info; | 337 | struct backing_dev_info *bdi = inode_to_bdi(bd_inode); |
338 | 338 | ||
339 | return bdi->dev == NULL; | 339 | return bdi->dev == NULL; |
340 | } | 340 | } |
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 2d609a5fbfea..c399152de397 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c | |||
@@ -66,15 +66,21 @@ int writeback_in_progress(struct backing_dev_info *bdi) | |||
66 | } | 66 | } |
67 | EXPORT_SYMBOL(writeback_in_progress); | 67 | EXPORT_SYMBOL(writeback_in_progress); |
68 | 68 | ||
69 | static inline struct backing_dev_info *inode_to_bdi(struct inode *inode) | 69 | struct backing_dev_info *inode_to_bdi(struct inode *inode) |
70 | { | 70 | { |
71 | struct super_block *sb = inode->i_sb; | 71 | struct super_block *sb; |
72 | 72 | ||
73 | if (sb_is_blkdev_sb(sb)) | 73 | if (!inode) |
74 | return inode->i_mapping->backing_dev_info; | 74 | return &noop_backing_dev_info; |
75 | 75 | ||
76 | sb = inode->i_sb; | ||
77 | #ifdef CONFIG_BLOCK | ||
78 | if (sb_is_blkdev_sb(sb)) | ||
79 | return blk_get_backing_dev_info(I_BDEV(inode)); | ||
80 | #endif | ||
76 | return sb->s_bdi; | 81 | return sb->s_bdi; |
77 | } | 82 | } |
83 | EXPORT_SYMBOL_GPL(inode_to_bdi); | ||
78 | 84 | ||
79 | static inline struct inode *wb_inode(struct list_head *head) | 85 | static inline struct inode *wb_inode(struct list_head *head) |
80 | { | 86 | { |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index d769e594855b..c01ec3bdcfd8 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -1159,7 +1159,7 @@ static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from) | |||
1159 | mutex_lock(&inode->i_mutex); | 1159 | mutex_lock(&inode->i_mutex); |
1160 | 1160 | ||
1161 | /* We can write back this queue in page reclaim */ | 1161 | /* We can write back this queue in page reclaim */ |
1162 | current->backing_dev_info = mapping->backing_dev_info; | 1162 | current->backing_dev_info = inode_to_bdi(inode); |
1163 | 1163 | ||
1164 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); | 1164 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); |
1165 | if (err) | 1165 | if (err) |
@@ -1464,7 +1464,7 @@ static void fuse_writepage_finish(struct fuse_conn *fc, struct fuse_req *req) | |||
1464 | { | 1464 | { |
1465 | struct inode *inode = req->inode; | 1465 | struct inode *inode = req->inode; |
1466 | struct fuse_inode *fi = get_fuse_inode(inode); | 1466 | struct fuse_inode *fi = get_fuse_inode(inode); |
1467 | struct backing_dev_info *bdi = inode->i_mapping->backing_dev_info; | 1467 | struct backing_dev_info *bdi = inode_to_bdi(inode); |
1468 | int i; | 1468 | int i; |
1469 | 1469 | ||
1470 | list_del(&req->writepages_entry); | 1470 | list_del(&req->writepages_entry); |
@@ -1658,7 +1658,7 @@ static int fuse_writepage_locked(struct page *page) | |||
1658 | req->end = fuse_writepage_end; | 1658 | req->end = fuse_writepage_end; |
1659 | req->inode = inode; | 1659 | req->inode = inode; |
1660 | 1660 | ||
1661 | inc_bdi_stat(mapping->backing_dev_info, BDI_WRITEBACK); | 1661 | inc_bdi_stat(inode_to_bdi(inode), BDI_WRITEBACK); |
1662 | inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP); | 1662 | inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP); |
1663 | 1663 | ||
1664 | spin_lock(&fc->lock); | 1664 | spin_lock(&fc->lock); |
@@ -1768,7 +1768,7 @@ static bool fuse_writepage_in_flight(struct fuse_req *new_req, | |||
1768 | 1768 | ||
1769 | if (old_req->num_pages == 1 && (old_req->state == FUSE_REQ_INIT || | 1769 | if (old_req->num_pages == 1 && (old_req->state == FUSE_REQ_INIT || |
1770 | old_req->state == FUSE_REQ_PENDING)) { | 1770 | old_req->state == FUSE_REQ_PENDING)) { |
1771 | struct backing_dev_info *bdi = page->mapping->backing_dev_info; | 1771 | struct backing_dev_info *bdi = inode_to_bdi(page->mapping->host); |
1772 | 1772 | ||
1773 | copy_highpage(old_req->pages[0], page); | 1773 | copy_highpage(old_req->pages[0], page); |
1774 | spin_unlock(&fc->lock); | 1774 | spin_unlock(&fc->lock); |
@@ -1872,7 +1872,7 @@ static int fuse_writepages_fill(struct page *page, | |||
1872 | req->page_descs[req->num_pages].offset = 0; | 1872 | req->page_descs[req->num_pages].offset = 0; |
1873 | req->page_descs[req->num_pages].length = PAGE_SIZE; | 1873 | req->page_descs[req->num_pages].length = PAGE_SIZE; |
1874 | 1874 | ||
1875 | inc_bdi_stat(page->mapping->backing_dev_info, BDI_WRITEBACK); | 1875 | inc_bdi_stat(inode_to_bdi(inode), BDI_WRITEBACK); |
1876 | inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP); | 1876 | inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP); |
1877 | 1877 | ||
1878 | err = 0; | 1878 | err = 0; |
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index f38256e4476e..e8799c11424b 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c | |||
@@ -308,7 +308,6 @@ struct inode *fuse_iget(struct super_block *sb, u64 nodeid, | |||
308 | if (!fc->writeback_cache || !S_ISREG(attr->mode)) | 308 | if (!fc->writeback_cache || !S_ISREG(attr->mode)) |
309 | inode->i_flags |= S_NOCMTIME; | 309 | inode->i_flags |= S_NOCMTIME; |
310 | inode->i_generation = generation; | 310 | inode->i_generation = generation; |
311 | inode->i_data.backing_dev_info = &fc->bdi; | ||
312 | fuse_init_inode(inode, attr); | 311 | fuse_init_inode(inode, attr); |
313 | unlock_new_inode(inode); | 312 | unlock_new_inode(inode); |
314 | } else if ((inode->i_mode ^ attr->mode) & S_IFMT) { | 313 | } else if ((inode->i_mode ^ attr->mode) & S_IFMT) { |
diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c index 805b37fed638..4ad4f94edebe 100644 --- a/fs/gfs2/aops.c +++ b/fs/gfs2/aops.c | |||
@@ -289,7 +289,7 @@ continue_unlock: | |||
289 | if (!clear_page_dirty_for_io(page)) | 289 | if (!clear_page_dirty_for_io(page)) |
290 | goto continue_unlock; | 290 | goto continue_unlock; |
291 | 291 | ||
292 | trace_wbc_writepage(wbc, mapping->backing_dev_info); | 292 | trace_wbc_writepage(wbc, inode_to_bdi(inode)); |
293 | 293 | ||
294 | ret = __gfs2_jdata_writepage(page, wbc); | 294 | ret = __gfs2_jdata_writepage(page, wbc); |
295 | if (unlikely(ret)) { | 295 | if (unlikely(ret)) { |
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index aeb7bc958a18..f42dffba056a 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c | |||
@@ -768,7 +768,6 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number, | |||
768 | mapping->flags = 0; | 768 | mapping->flags = 0; |
769 | mapping_set_gfp_mask(mapping, GFP_NOFS); | 769 | mapping_set_gfp_mask(mapping, GFP_NOFS); |
770 | mapping->private_data = NULL; | 770 | mapping->private_data = NULL; |
771 | mapping->backing_dev_info = s->s_bdi; | ||
772 | mapping->writeback_index = 0; | 771 | mapping->writeback_index = 0; |
773 | } | 772 | } |
774 | 773 | ||
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c index 8633ad328ee2..efc8e254787c 100644 --- a/fs/gfs2/ops_fstype.c +++ b/fs/gfs2/ops_fstype.c | |||
@@ -112,7 +112,6 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb) | |||
112 | mapping->flags = 0; | 112 | mapping->flags = 0; |
113 | mapping_set_gfp_mask(mapping, GFP_NOFS); | 113 | mapping_set_gfp_mask(mapping, GFP_NOFS); |
114 | mapping->private_data = NULL; | 114 | mapping->private_data = NULL; |
115 | mapping->backing_dev_info = sb->s_bdi; | ||
116 | mapping->writeback_index = 0; | 115 | mapping->writeback_index = 0; |
117 | 116 | ||
118 | spin_lock_init(&sdp->sd_log_lock); | 117 | spin_lock_init(&sdp->sd_log_lock); |
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index 5b327f837de7..1666382b198d 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c | |||
@@ -743,7 +743,7 @@ static int gfs2_write_inode(struct inode *inode, struct writeback_control *wbc) | |||
743 | struct gfs2_inode *ip = GFS2_I(inode); | 743 | struct gfs2_inode *ip = GFS2_I(inode); |
744 | struct gfs2_sbd *sdp = GFS2_SB(inode); | 744 | struct gfs2_sbd *sdp = GFS2_SB(inode); |
745 | struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl); | 745 | struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl); |
746 | struct backing_dev_info *bdi = metamapping->backing_dev_info; | 746 | struct backing_dev_info *bdi = inode_to_bdi(metamapping->host); |
747 | int ret = 0; | 747 | int ret = 0; |
748 | 748 | ||
749 | if (wbc->sync_mode == WB_SYNC_ALL) | 749 | if (wbc->sync_mode == WB_SYNC_ALL) |
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 5eba47f593f8..c274aca8e8dc 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
@@ -62,12 +62,6 @@ static inline struct hugetlbfs_inode_info *HUGETLBFS_I(struct inode *inode) | |||
62 | return container_of(inode, struct hugetlbfs_inode_info, vfs_inode); | 62 | return container_of(inode, struct hugetlbfs_inode_info, vfs_inode); |
63 | } | 63 | } |
64 | 64 | ||
65 | static struct backing_dev_info hugetlbfs_backing_dev_info = { | ||
66 | .name = "hugetlbfs", | ||
67 | .ra_pages = 0, /* No readahead */ | ||
68 | .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK, | ||
69 | }; | ||
70 | |||
71 | int sysctl_hugetlb_shm_group; | 65 | int sysctl_hugetlb_shm_group; |
72 | 66 | ||
73 | enum { | 67 | enum { |
@@ -498,7 +492,6 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb, | |||
498 | lockdep_set_class(&inode->i_mapping->i_mmap_rwsem, | 492 | lockdep_set_class(&inode->i_mapping->i_mmap_rwsem, |
499 | &hugetlbfs_i_mmap_rwsem_key); | 493 | &hugetlbfs_i_mmap_rwsem_key); |
500 | inode->i_mapping->a_ops = &hugetlbfs_aops; | 494 | inode->i_mapping->a_ops = &hugetlbfs_aops; |
501 | inode->i_mapping->backing_dev_info =&hugetlbfs_backing_dev_info; | ||
502 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 495 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
503 | inode->i_mapping->private_data = resv_map; | 496 | inode->i_mapping->private_data = resv_map; |
504 | info = HUGETLBFS_I(inode); | 497 | info = HUGETLBFS_I(inode); |
@@ -1032,10 +1025,6 @@ static int __init init_hugetlbfs_fs(void) | |||
1032 | return -ENOTSUPP; | 1025 | return -ENOTSUPP; |
1033 | } | 1026 | } |
1034 | 1027 | ||
1035 | error = bdi_init(&hugetlbfs_backing_dev_info); | ||
1036 | if (error) | ||
1037 | return error; | ||
1038 | |||
1039 | error = -ENOMEM; | 1028 | error = -ENOMEM; |
1040 | hugetlbfs_inode_cachep = kmem_cache_create("hugetlbfs_inode_cache", | 1029 | hugetlbfs_inode_cachep = kmem_cache_create("hugetlbfs_inode_cache", |
1041 | sizeof(struct hugetlbfs_inode_info), | 1030 | sizeof(struct hugetlbfs_inode_info), |
@@ -1071,7 +1060,6 @@ static int __init init_hugetlbfs_fs(void) | |||
1071 | out: | 1060 | out: |
1072 | kmem_cache_destroy(hugetlbfs_inode_cachep); | 1061 | kmem_cache_destroy(hugetlbfs_inode_cachep); |
1073 | out2: | 1062 | out2: |
1074 | bdi_destroy(&hugetlbfs_backing_dev_info); | ||
1075 | return error; | 1063 | return error; |
1076 | } | 1064 | } |
1077 | 1065 | ||
@@ -1091,7 +1079,6 @@ static void __exit exit_hugetlbfs_fs(void) | |||
1091 | for_each_hstate(h) | 1079 | for_each_hstate(h) |
1092 | kern_unmount(hugetlbfs_vfsmount[i++]); | 1080 | kern_unmount(hugetlbfs_vfsmount[i++]); |
1093 | unregister_filesystem(&hugetlbfs_fs_type); | 1081 | unregister_filesystem(&hugetlbfs_fs_type); |
1094 | bdi_destroy(&hugetlbfs_backing_dev_info); | ||
1095 | } | 1082 | } |
1096 | 1083 | ||
1097 | module_init(init_hugetlbfs_fs) | 1084 | module_init(init_hugetlbfs_fs) |
diff --git a/fs/inode.c b/fs/inode.c index 3a53b1da3fb8..b7871577571d 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
@@ -170,20 +170,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode) | |||
170 | atomic_set(&mapping->i_mmap_writable, 0); | 170 | atomic_set(&mapping->i_mmap_writable, 0); |
171 | mapping_set_gfp_mask(mapping, GFP_HIGHUSER_MOVABLE); | 171 | mapping_set_gfp_mask(mapping, GFP_HIGHUSER_MOVABLE); |
172 | mapping->private_data = NULL; | 172 | mapping->private_data = NULL; |
173 | mapping->backing_dev_info = &default_backing_dev_info; | ||
174 | mapping->writeback_index = 0; | 173 | mapping->writeback_index = 0; |
175 | |||
176 | /* | ||
177 | * If the block_device provides a backing_dev_info for client | ||
178 | * inodes then use that. Otherwise the inode share the bdev's | ||
179 | * backing_dev_info. | ||
180 | */ | ||
181 | if (sb->s_bdev) { | ||
182 | struct backing_dev_info *bdi; | ||
183 | |||
184 | bdi = sb->s_bdev->bd_inode->i_mapping->backing_dev_info; | ||
185 | mapping->backing_dev_info = bdi; | ||
186 | } | ||
187 | inode->i_private = NULL; | 174 | inode->i_private = NULL; |
188 | inode->i_mapping = mapping; | 175 | inode->i_mapping = mapping; |
189 | INIT_HLIST_HEAD(&inode->i_dentry); /* buggered by rcu freeing */ | 176 | INIT_HLIST_HEAD(&inode->i_dentry); /* buggered by rcu freeing */ |
diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index 985217626e66..9000874a945b 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c | |||
@@ -24,12 +24,6 @@ static const struct address_space_operations kernfs_aops = { | |||
24 | .write_end = simple_write_end, | 24 | .write_end = simple_write_end, |
25 | }; | 25 | }; |
26 | 26 | ||
27 | static struct backing_dev_info kernfs_bdi = { | ||
28 | .name = "kernfs", | ||
29 | .ra_pages = 0, /* No readahead */ | ||
30 | .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK, | ||
31 | }; | ||
32 | |||
33 | static const struct inode_operations kernfs_iops = { | 27 | static const struct inode_operations kernfs_iops = { |
34 | .permission = kernfs_iop_permission, | 28 | .permission = kernfs_iop_permission, |
35 | .setattr = kernfs_iop_setattr, | 29 | .setattr = kernfs_iop_setattr, |
@@ -40,12 +34,6 @@ static const struct inode_operations kernfs_iops = { | |||
40 | .listxattr = kernfs_iop_listxattr, | 34 | .listxattr = kernfs_iop_listxattr, |
41 | }; | 35 | }; |
42 | 36 | ||
43 | void __init kernfs_inode_init(void) | ||
44 | { | ||
45 | if (bdi_init(&kernfs_bdi)) | ||
46 | panic("failed to init kernfs_bdi"); | ||
47 | } | ||
48 | |||
49 | static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn) | 37 | static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn) |
50 | { | 38 | { |
51 | static DEFINE_MUTEX(iattr_mutex); | 39 | static DEFINE_MUTEX(iattr_mutex); |
@@ -298,7 +286,6 @@ static void kernfs_init_inode(struct kernfs_node *kn, struct inode *inode) | |||
298 | kernfs_get(kn); | 286 | kernfs_get(kn); |
299 | inode->i_private = kn; | 287 | inode->i_private = kn; |
300 | inode->i_mapping->a_ops = &kernfs_aops; | 288 | inode->i_mapping->a_ops = &kernfs_aops; |
301 | inode->i_mapping->backing_dev_info = &kernfs_bdi; | ||
302 | inode->i_op = &kernfs_iops; | 289 | inode->i_op = &kernfs_iops; |
303 | 290 | ||
304 | set_default_inode_attr(inode, kn->mode); | 291 | set_default_inode_attr(inode, kn->mode); |
diff --git a/fs/kernfs/kernfs-internal.h b/fs/kernfs/kernfs-internal.h index dc84a3ef9ca2..af9fa7499919 100644 --- a/fs/kernfs/kernfs-internal.h +++ b/fs/kernfs/kernfs-internal.h | |||
@@ -88,7 +88,6 @@ int kernfs_iop_removexattr(struct dentry *dentry, const char *name); | |||
88 | ssize_t kernfs_iop_getxattr(struct dentry *dentry, const char *name, void *buf, | 88 | ssize_t kernfs_iop_getxattr(struct dentry *dentry, const char *name, void *buf, |
89 | size_t size); | 89 | size_t size); |
90 | ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size); | 90 | ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size); |
91 | void kernfs_inode_init(void); | ||
92 | 91 | ||
93 | /* | 92 | /* |
94 | * dir.c | 93 | * dir.c |
diff --git a/fs/kernfs/mount.c b/fs/kernfs/mount.c index f973ae9b05f1..8eaf417187f1 100644 --- a/fs/kernfs/mount.c +++ b/fs/kernfs/mount.c | |||
@@ -246,5 +246,4 @@ void __init kernfs_init(void) | |||
246 | kernfs_node_cache = kmem_cache_create("kernfs_node_cache", | 246 | kernfs_node_cache = kmem_cache_create("kernfs_node_cache", |
247 | sizeof(struct kernfs_node), | 247 | sizeof(struct kernfs_node), |
248 | 0, SLAB_PANIC, NULL); | 248 | 0, SLAB_PANIC, NULL); |
249 | kernfs_inode_init(); | ||
250 | } | 249 | } |
diff --git a/fs/ncpfs/inode.c b/fs/ncpfs/inode.c index e31e589369a4..01a9e16e9782 100644 --- a/fs/ncpfs/inode.c +++ b/fs/ncpfs/inode.c | |||
@@ -267,7 +267,6 @@ ncp_iget(struct super_block *sb, struct ncp_entry_info *info) | |||
267 | if (inode) { | 267 | if (inode) { |
268 | atomic_set(&NCP_FINFO(inode)->opened, info->opened); | 268 | atomic_set(&NCP_FINFO(inode)->opened, info->opened); |
269 | 269 | ||
270 | inode->i_mapping->backing_dev_info = sb->s_bdi; | ||
271 | inode->i_ino = info->ino; | 270 | inode->i_ino = info->ino; |
272 | ncp_set_attr(inode, info); | 271 | ncp_set_attr(inode, info); |
273 | if (S_ISREG(inode->i_mode)) { | 272 | if (S_ISREG(inode->i_mode)) { |
@@ -560,7 +559,7 @@ static int ncp_fill_super(struct super_block *sb, void *raw_data, int silent) | |||
560 | server = NCP_SBP(sb); | 559 | server = NCP_SBP(sb); |
561 | memset(server, 0, sizeof(*server)); | 560 | memset(server, 0, sizeof(*server)); |
562 | 561 | ||
563 | error = bdi_setup_and_register(&server->bdi, "ncpfs", BDI_CAP_MAP_COPY); | 562 | error = bdi_setup_and_register(&server->bdi, "ncpfs"); |
564 | if (error) | 563 | if (error) |
565 | goto out_fput; | 564 | goto out_fput; |
566 | 565 | ||
diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c index 3c9769441f36..7ae1c263c5cf 100644 --- a/fs/nfs/filelayout/filelayout.c +++ b/fs/nfs/filelayout/filelayout.c | |||
@@ -1002,7 +1002,7 @@ mds_commit: | |||
1002 | spin_unlock(cinfo->lock); | 1002 | spin_unlock(cinfo->lock); |
1003 | if (!cinfo->dreq) { | 1003 | if (!cinfo->dreq) { |
1004 | inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); | 1004 | inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); |
1005 | inc_bdi_stat(page_file_mapping(req->wb_page)->backing_dev_info, | 1005 | inc_bdi_stat(inode_to_bdi(page_file_mapping(req->wb_page)->host), |
1006 | BDI_RECLAIMABLE); | 1006 | BDI_RECLAIMABLE); |
1007 | __mark_inode_dirty(req->wb_context->dentry->d_inode, | 1007 | __mark_inode_dirty(req->wb_context->dentry->d_inode, |
1008 | I_DIRTY_DATASYNC); | 1008 | I_DIRTY_DATASYNC); |
diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index f29fb7d7e8f8..c22ecaa86c1c 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c | |||
@@ -1366,7 +1366,7 @@ ff_layout_mark_request_commit(struct nfs_page *req, | |||
1366 | spin_unlock(cinfo->lock); | 1366 | spin_unlock(cinfo->lock); |
1367 | if (!cinfo->dreq) { | 1367 | if (!cinfo->dreq) { |
1368 | inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); | 1368 | inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); |
1369 | inc_bdi_stat(page_file_mapping(req->wb_page)->backing_dev_info, | 1369 | inc_bdi_stat(inode_to_bdi(page_file_mapping(req->wb_page)->host), |
1370 | BDI_RECLAIMABLE); | 1370 | BDI_RECLAIMABLE); |
1371 | __mark_inode_dirty(req->wb_context->dentry->d_inode, | 1371 | __mark_inode_dirty(req->wb_context->dentry->d_inode, |
1372 | I_DIRTY_DATASYNC); | 1372 | I_DIRTY_DATASYNC); |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index d2398c193bda..e4f0dcef8f54 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -388,7 +388,6 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr, st | |||
388 | if (S_ISREG(inode->i_mode)) { | 388 | if (S_ISREG(inode->i_mode)) { |
389 | inode->i_fop = NFS_SB(sb)->nfs_client->rpc_ops->file_ops; | 389 | inode->i_fop = NFS_SB(sb)->nfs_client->rpc_ops->file_ops; |
390 | inode->i_data.a_ops = &nfs_file_aops; | 390 | inode->i_data.a_ops = &nfs_file_aops; |
391 | inode->i_data.backing_dev_info = &NFS_SB(sb)->backing_dev_info; | ||
392 | } else if (S_ISDIR(inode->i_mode)) { | 391 | } else if (S_ISDIR(inode->i_mode)) { |
393 | inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->dir_inode_ops; | 392 | inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->dir_inode_ops; |
394 | inode->i_fop = &nfs_dir_operations; | 393 | inode->i_fop = &nfs_dir_operations; |
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 21469e6e3834..212b8c883d22 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h | |||
@@ -430,7 +430,6 @@ int nfs_show_options(struct seq_file *, struct dentry *); | |||
430 | int nfs_show_devname(struct seq_file *, struct dentry *); | 430 | int nfs_show_devname(struct seq_file *, struct dentry *); |
431 | int nfs_show_path(struct seq_file *, struct dentry *); | 431 | int nfs_show_path(struct seq_file *, struct dentry *); |
432 | int nfs_show_stats(struct seq_file *, struct dentry *); | 432 | int nfs_show_stats(struct seq_file *, struct dentry *); |
433 | void nfs_put_super(struct super_block *); | ||
434 | int nfs_remount(struct super_block *sb, int *flags, char *raw_data); | 433 | int nfs_remount(struct super_block *sb, int *flags, char *raw_data); |
435 | 434 | ||
436 | /* write.c */ | 435 | /* write.c */ |
diff --git a/fs/nfs/nfs4super.c b/fs/nfs/nfs4super.c index 48cea3c30e5d..75090feeafad 100644 --- a/fs/nfs/nfs4super.c +++ b/fs/nfs/nfs4super.c | |||
@@ -53,7 +53,6 @@ static const struct super_operations nfs4_sops = { | |||
53 | .destroy_inode = nfs_destroy_inode, | 53 | .destroy_inode = nfs_destroy_inode, |
54 | .write_inode = nfs4_write_inode, | 54 | .write_inode = nfs4_write_inode, |
55 | .drop_inode = nfs_drop_inode, | 55 | .drop_inode = nfs_drop_inode, |
56 | .put_super = nfs_put_super, | ||
57 | .statfs = nfs_statfs, | 56 | .statfs = nfs_statfs, |
58 | .evict_inode = nfs4_evict_inode, | 57 | .evict_inode = nfs4_evict_inode, |
59 | .umount_begin = nfs_umount_begin, | 58 | .umount_begin = nfs_umount_begin, |
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 368d9395d2e7..322b2de02988 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
@@ -311,7 +311,6 @@ const struct super_operations nfs_sops = { | |||
311 | .destroy_inode = nfs_destroy_inode, | 311 | .destroy_inode = nfs_destroy_inode, |
312 | .write_inode = nfs_write_inode, | 312 | .write_inode = nfs_write_inode, |
313 | .drop_inode = nfs_drop_inode, | 313 | .drop_inode = nfs_drop_inode, |
314 | .put_super = nfs_put_super, | ||
315 | .statfs = nfs_statfs, | 314 | .statfs = nfs_statfs, |
316 | .evict_inode = nfs_evict_inode, | 315 | .evict_inode = nfs_evict_inode, |
317 | .umount_begin = nfs_umount_begin, | 316 | .umount_begin = nfs_umount_begin, |
@@ -2572,7 +2571,7 @@ struct dentry *nfs_fs_mount_common(struct nfs_server *server, | |||
2572 | error = nfs_bdi_register(server); | 2571 | error = nfs_bdi_register(server); |
2573 | if (error) { | 2572 | if (error) { |
2574 | mntroot = ERR_PTR(error); | 2573 | mntroot = ERR_PTR(error); |
2575 | goto error_splat_bdi; | 2574 | goto error_splat_super; |
2576 | } | 2575 | } |
2577 | server->super = s; | 2576 | server->super = s; |
2578 | } | 2577 | } |
@@ -2604,9 +2603,6 @@ error_splat_root: | |||
2604 | dput(mntroot); | 2603 | dput(mntroot); |
2605 | mntroot = ERR_PTR(error); | 2604 | mntroot = ERR_PTR(error); |
2606 | error_splat_super: | 2605 | error_splat_super: |
2607 | if (server && !s->s_root) | ||
2608 | bdi_unregister(&server->backing_dev_info); | ||
2609 | error_splat_bdi: | ||
2610 | deactivate_locked_super(s); | 2606 | deactivate_locked_super(s); |
2611 | goto out; | 2607 | goto out; |
2612 | } | 2608 | } |
@@ -2654,27 +2650,19 @@ out: | |||
2654 | EXPORT_SYMBOL_GPL(nfs_fs_mount); | 2650 | EXPORT_SYMBOL_GPL(nfs_fs_mount); |
2655 | 2651 | ||
2656 | /* | 2652 | /* |
2657 | * Ensure that we unregister the bdi before kill_anon_super | ||
2658 | * releases the device name | ||
2659 | */ | ||
2660 | void nfs_put_super(struct super_block *s) | ||
2661 | { | ||
2662 | struct nfs_server *server = NFS_SB(s); | ||
2663 | |||
2664 | bdi_unregister(&server->backing_dev_info); | ||
2665 | } | ||
2666 | EXPORT_SYMBOL_GPL(nfs_put_super); | ||
2667 | |||
2668 | /* | ||
2669 | * Destroy an NFS2/3 superblock | 2653 | * Destroy an NFS2/3 superblock |
2670 | */ | 2654 | */ |
2671 | void nfs_kill_super(struct super_block *s) | 2655 | void nfs_kill_super(struct super_block *s) |
2672 | { | 2656 | { |
2673 | struct nfs_server *server = NFS_SB(s); | 2657 | struct nfs_server *server = NFS_SB(s); |
2658 | dev_t dev = s->s_dev; | ||
2659 | |||
2660 | generic_shutdown_super(s); | ||
2674 | 2661 | ||
2675 | kill_anon_super(s); | ||
2676 | nfs_fscache_release_super_cookie(s); | 2662 | nfs_fscache_release_super_cookie(s); |
2663 | |||
2677 | nfs_free_server(server); | 2664 | nfs_free_server(server); |
2665 | free_anon_bdev(dev); | ||
2678 | } | 2666 | } |
2679 | EXPORT_SYMBOL_GPL(nfs_kill_super); | 2667 | EXPORT_SYMBOL_GPL(nfs_kill_super); |
2680 | 2668 | ||
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index bcf83e535f29..88a6d2196ece 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -791,7 +791,7 @@ nfs_request_add_commit_list(struct nfs_page *req, struct list_head *dst, | |||
791 | spin_unlock(cinfo->lock); | 791 | spin_unlock(cinfo->lock); |
792 | if (!cinfo->dreq) { | 792 | if (!cinfo->dreq) { |
793 | inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); | 793 | inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); |
794 | inc_bdi_stat(page_file_mapping(req->wb_page)->backing_dev_info, | 794 | inc_bdi_stat(inode_to_bdi(page_file_mapping(req->wb_page)->host), |
795 | BDI_RECLAIMABLE); | 795 | BDI_RECLAIMABLE); |
796 | __mark_inode_dirty(req->wb_context->dentry->d_inode, | 796 | __mark_inode_dirty(req->wb_context->dentry->d_inode, |
797 | I_DIRTY_DATASYNC); | 797 | I_DIRTY_DATASYNC); |
@@ -858,7 +858,7 @@ static void | |||
858 | nfs_clear_page_commit(struct page *page) | 858 | nfs_clear_page_commit(struct page *page) |
859 | { | 859 | { |
860 | dec_zone_page_state(page, NR_UNSTABLE_NFS); | 860 | dec_zone_page_state(page, NR_UNSTABLE_NFS); |
861 | dec_bdi_stat(page_file_mapping(page)->backing_dev_info, BDI_RECLAIMABLE); | 861 | dec_bdi_stat(inode_to_bdi(page_file_mapping(page)->host), BDI_RECLAIMABLE); |
862 | } | 862 | } |
863 | 863 | ||
864 | /* Called holding inode (/cinfo) lock */ | 864 | /* Called holding inode (/cinfo) lock */ |
@@ -1607,7 +1607,7 @@ void nfs_retry_commit(struct list_head *page_list, | |||
1607 | nfs_mark_request_commit(req, lseg, cinfo, ds_commit_idx); | 1607 | nfs_mark_request_commit(req, lseg, cinfo, ds_commit_idx); |
1608 | if (!cinfo->dreq) { | 1608 | if (!cinfo->dreq) { |
1609 | dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); | 1609 | dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); |
1610 | dec_bdi_stat(page_file_mapping(req->wb_page)->backing_dev_info, | 1610 | dec_bdi_stat(inode_to_bdi(page_file_mapping(req->wb_page)->host), |
1611 | BDI_RECLAIMABLE); | 1611 | BDI_RECLAIMABLE); |
1612 | } | 1612 | } |
1613 | nfs_unlock_and_release_request(req); | 1613 | nfs_unlock_and_release_request(req); |
diff --git a/fs/nilfs2/gcinode.c b/fs/nilfs2/gcinode.c index 57ceaf33d177..748ca238915a 100644 --- a/fs/nilfs2/gcinode.c +++ b/fs/nilfs2/gcinode.c | |||
@@ -172,7 +172,6 @@ int nilfs_init_gcinode(struct inode *inode) | |||
172 | inode->i_mode = S_IFREG; | 172 | inode->i_mode = S_IFREG; |
173 | mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS); | 173 | mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS); |
174 | inode->i_mapping->a_ops = &empty_aops; | 174 | inode->i_mapping->a_ops = &empty_aops; |
175 | inode->i_mapping->backing_dev_info = inode->i_sb->s_bdi; | ||
176 | 175 | ||
177 | ii->i_flags = 0; | 176 | ii->i_flags = 0; |
178 | nilfs_bmap_init_gc(ii->i_bmap); | 177 | nilfs_bmap_init_gc(ii->i_bmap); |
diff --git a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c index c4dcd1db57ee..892cf5ffdb8e 100644 --- a/fs/nilfs2/mdt.c +++ b/fs/nilfs2/mdt.c | |||
@@ -429,7 +429,6 @@ int nilfs_mdt_init(struct inode *inode, gfp_t gfp_mask, size_t objsz) | |||
429 | 429 | ||
430 | inode->i_mode = S_IFREG; | 430 | inode->i_mode = S_IFREG; |
431 | mapping_set_gfp_mask(inode->i_mapping, gfp_mask); | 431 | mapping_set_gfp_mask(inode->i_mapping, gfp_mask); |
432 | inode->i_mapping->backing_dev_info = inode->i_sb->s_bdi; | ||
433 | 432 | ||
434 | inode->i_op = &def_mdt_iops; | 433 | inode->i_op = &def_mdt_iops; |
435 | inode->i_fop = &def_mdt_fops; | 434 | inode->i_fop = &def_mdt_fops; |
@@ -457,13 +456,12 @@ int nilfs_mdt_setup_shadow_map(struct inode *inode, | |||
457 | struct nilfs_shadow_map *shadow) | 456 | struct nilfs_shadow_map *shadow) |
458 | { | 457 | { |
459 | struct nilfs_mdt_info *mi = NILFS_MDT(inode); | 458 | struct nilfs_mdt_info *mi = NILFS_MDT(inode); |
460 | struct backing_dev_info *bdi = inode->i_sb->s_bdi; | ||
461 | 459 | ||
462 | INIT_LIST_HEAD(&shadow->frozen_buffers); | 460 | INIT_LIST_HEAD(&shadow->frozen_buffers); |
463 | address_space_init_once(&shadow->frozen_data); | 461 | address_space_init_once(&shadow->frozen_data); |
464 | nilfs_mapping_init(&shadow->frozen_data, inode, bdi); | 462 | nilfs_mapping_init(&shadow->frozen_data, inode); |
465 | address_space_init_once(&shadow->frozen_btnodes); | 463 | address_space_init_once(&shadow->frozen_btnodes); |
466 | nilfs_mapping_init(&shadow->frozen_btnodes, inode, bdi); | 464 | nilfs_mapping_init(&shadow->frozen_btnodes, inode); |
467 | mi->mi_shadow = shadow; | 465 | mi->mi_shadow = shadow; |
468 | return 0; | 466 | return 0; |
469 | } | 467 | } |
diff --git a/fs/nilfs2/page.c b/fs/nilfs2/page.c index da276640f776..700ecbcca55d 100644 --- a/fs/nilfs2/page.c +++ b/fs/nilfs2/page.c | |||
@@ -461,14 +461,12 @@ unsigned nilfs_page_count_clean_buffers(struct page *page, | |||
461 | return nc; | 461 | return nc; |
462 | } | 462 | } |
463 | 463 | ||
464 | void nilfs_mapping_init(struct address_space *mapping, struct inode *inode, | 464 | void nilfs_mapping_init(struct address_space *mapping, struct inode *inode) |
465 | struct backing_dev_info *bdi) | ||
466 | { | 465 | { |
467 | mapping->host = inode; | 466 | mapping->host = inode; |
468 | mapping->flags = 0; | 467 | mapping->flags = 0; |
469 | mapping_set_gfp_mask(mapping, GFP_NOFS); | 468 | mapping_set_gfp_mask(mapping, GFP_NOFS); |
470 | mapping->private_data = NULL; | 469 | mapping->private_data = NULL; |
471 | mapping->backing_dev_info = bdi; | ||
472 | mapping->a_ops = &empty_aops; | 470 | mapping->a_ops = &empty_aops; |
473 | } | 471 | } |
474 | 472 | ||
diff --git a/fs/nilfs2/page.h b/fs/nilfs2/page.h index ef30c5c2426f..a43b8287d012 100644 --- a/fs/nilfs2/page.h +++ b/fs/nilfs2/page.h | |||
@@ -57,8 +57,7 @@ int nilfs_copy_dirty_pages(struct address_space *, struct address_space *); | |||
57 | void nilfs_copy_back_pages(struct address_space *, struct address_space *); | 57 | void nilfs_copy_back_pages(struct address_space *, struct address_space *); |
58 | void nilfs_clear_dirty_page(struct page *, bool); | 58 | void nilfs_clear_dirty_page(struct page *, bool); |
59 | void nilfs_clear_dirty_pages(struct address_space *, bool); | 59 | void nilfs_clear_dirty_pages(struct address_space *, bool); |
60 | void nilfs_mapping_init(struct address_space *mapping, struct inode *inode, | 60 | void nilfs_mapping_init(struct address_space *mapping, struct inode *inode); |
61 | struct backing_dev_info *bdi); | ||
62 | unsigned nilfs_page_count_clean_buffers(struct page *, unsigned, unsigned); | 61 | unsigned nilfs_page_count_clean_buffers(struct page *, unsigned, unsigned); |
63 | unsigned long nilfs_find_uncommitted_extent(struct inode *inode, | 62 | unsigned long nilfs_find_uncommitted_extent(struct inode *inode, |
64 | sector_t start_blk, | 63 | sector_t start_blk, |
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c index 2e5b3ec85b8f..5bc2a1cf73c3 100644 --- a/fs/nilfs2/super.c +++ b/fs/nilfs2/super.c | |||
@@ -166,7 +166,7 @@ struct inode *nilfs_alloc_inode(struct super_block *sb) | |||
166 | ii->i_state = 0; | 166 | ii->i_state = 0; |
167 | ii->i_cno = 0; | 167 | ii->i_cno = 0; |
168 | ii->vfs_inode.i_version = 1; | 168 | ii->vfs_inode.i_version = 1; |
169 | nilfs_mapping_init(&ii->i_btnode_cache, &ii->vfs_inode, sb->s_bdi); | 169 | nilfs_mapping_init(&ii->i_btnode_cache, &ii->vfs_inode); |
170 | return &ii->vfs_inode; | 170 | return &ii->vfs_inode; |
171 | } | 171 | } |
172 | 172 | ||
@@ -1057,7 +1057,6 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent) | |||
1057 | { | 1057 | { |
1058 | struct the_nilfs *nilfs; | 1058 | struct the_nilfs *nilfs; |
1059 | struct nilfs_root *fsroot; | 1059 | struct nilfs_root *fsroot; |
1060 | struct backing_dev_info *bdi; | ||
1061 | __u64 cno; | 1060 | __u64 cno; |
1062 | int err; | 1061 | int err; |
1063 | 1062 | ||
@@ -1077,8 +1076,7 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent) | |||
1077 | sb->s_time_gran = 1; | 1076 | sb->s_time_gran = 1; |
1078 | sb->s_max_links = NILFS_LINK_MAX; | 1077 | sb->s_max_links = NILFS_LINK_MAX; |
1079 | 1078 | ||
1080 | bdi = sb->s_bdev->bd_inode->i_mapping->backing_dev_info; | 1079 | sb->s_bdi = &bdev_get_queue(sb->s_bdev)->backing_dev_info; |
1081 | sb->s_bdi = bdi ? : &default_backing_dev_info; | ||
1082 | 1080 | ||
1083 | err = load_nilfs(nilfs, sb); | 1081 | err = load_nilfs(nilfs, sb); |
1084 | if (err) | 1082 | if (err) |
diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index 643faa44f22b..1da9b2d184dc 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c | |||
@@ -19,6 +19,7 @@ | |||
19 | * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 19 | * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <linux/backing-dev.h> | ||
22 | #include <linux/buffer_head.h> | 23 | #include <linux/buffer_head.h> |
23 | #include <linux/gfp.h> | 24 | #include <linux/gfp.h> |
24 | #include <linux/pagemap.h> | 25 | #include <linux/pagemap.h> |
@@ -2091,7 +2092,7 @@ static ssize_t ntfs_file_aio_write_nolock(struct kiocb *iocb, | |||
2091 | count = iov_length(iov, nr_segs); | 2092 | count = iov_length(iov, nr_segs); |
2092 | pos = *ppos; | 2093 | pos = *ppos; |
2093 | /* We can write back this queue in page reclaim. */ | 2094 | /* We can write back this queue in page reclaim. */ |
2094 | current->backing_dev_info = mapping->backing_dev_info; | 2095 | current->backing_dev_info = inode_to_bdi(inode); |
2095 | written = 0; | 2096 | written = 0; |
2096 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); | 2097 | err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); |
2097 | if (err) | 2098 | if (err) |
diff --git a/fs/ocfs2/dlmfs/dlmfs.c b/fs/ocfs2/dlmfs/dlmfs.c index 57c40e34f56f..061ba6a91bf2 100644 --- a/fs/ocfs2/dlmfs/dlmfs.c +++ b/fs/ocfs2/dlmfs/dlmfs.c | |||
@@ -390,12 +390,6 @@ clear_fields: | |||
390 | ip->ip_conn = NULL; | 390 | ip->ip_conn = NULL; |
391 | } | 391 | } |
392 | 392 | ||
393 | static struct backing_dev_info dlmfs_backing_dev_info = { | ||
394 | .name = "ocfs2-dlmfs", | ||
395 | .ra_pages = 0, /* No readahead */ | ||
396 | .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK, | ||
397 | }; | ||
398 | |||
399 | static struct inode *dlmfs_get_root_inode(struct super_block *sb) | 393 | static struct inode *dlmfs_get_root_inode(struct super_block *sb) |
400 | { | 394 | { |
401 | struct inode *inode = new_inode(sb); | 395 | struct inode *inode = new_inode(sb); |
@@ -404,7 +398,6 @@ static struct inode *dlmfs_get_root_inode(struct super_block *sb) | |||
404 | if (inode) { | 398 | if (inode) { |
405 | inode->i_ino = get_next_ino(); | 399 | inode->i_ino = get_next_ino(); |
406 | inode_init_owner(inode, NULL, mode); | 400 | inode_init_owner(inode, NULL, mode); |
407 | inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info; | ||
408 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 401 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
409 | inc_nlink(inode); | 402 | inc_nlink(inode); |
410 | 403 | ||
@@ -428,7 +421,6 @@ static struct inode *dlmfs_get_inode(struct inode *parent, | |||
428 | 421 | ||
429 | inode->i_ino = get_next_ino(); | 422 | inode->i_ino = get_next_ino(); |
430 | inode_init_owner(inode, parent, mode); | 423 | inode_init_owner(inode, parent, mode); |
431 | inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info; | ||
432 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 424 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
433 | 425 | ||
434 | ip = DLMFS_I(inode); | 426 | ip = DLMFS_I(inode); |
@@ -643,10 +635,6 @@ static int __init init_dlmfs_fs(void) | |||
643 | int status; | 635 | int status; |
644 | int cleanup_inode = 0, cleanup_worker = 0; | 636 | int cleanup_inode = 0, cleanup_worker = 0; |
645 | 637 | ||
646 | status = bdi_init(&dlmfs_backing_dev_info); | ||
647 | if (status) | ||
648 | return status; | ||
649 | |||
650 | dlmfs_inode_cache = kmem_cache_create("dlmfs_inode_cache", | 638 | dlmfs_inode_cache = kmem_cache_create("dlmfs_inode_cache", |
651 | sizeof(struct dlmfs_inode_private), | 639 | sizeof(struct dlmfs_inode_private), |
652 | 0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT| | 640 | 0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT| |
@@ -673,7 +661,6 @@ bail: | |||
673 | kmem_cache_destroy(dlmfs_inode_cache); | 661 | kmem_cache_destroy(dlmfs_inode_cache); |
674 | if (cleanup_worker) | 662 | if (cleanup_worker) |
675 | destroy_workqueue(user_dlm_worker); | 663 | destroy_workqueue(user_dlm_worker); |
676 | bdi_destroy(&dlmfs_backing_dev_info); | ||
677 | } else | 664 | } else |
678 | printk("OCFS2 User DLM kernel interface loaded\n"); | 665 | printk("OCFS2 User DLM kernel interface loaded\n"); |
679 | return status; | 666 | return status; |
@@ -693,7 +680,6 @@ static void __exit exit_dlmfs_fs(void) | |||
693 | rcu_barrier(); | 680 | rcu_barrier(); |
694 | kmem_cache_destroy(dlmfs_inode_cache); | 681 | kmem_cache_destroy(dlmfs_inode_cache); |
695 | 682 | ||
696 | bdi_destroy(&dlmfs_backing_dev_info); | ||
697 | } | 683 | } |
698 | 684 | ||
699 | MODULE_AUTHOR("Oracle"); | 685 | MODULE_AUTHOR("Oracle"); |
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 245db4f504da..e0f04d55fd05 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c | |||
@@ -2363,7 +2363,7 @@ relock: | |||
2363 | goto out_dio; | 2363 | goto out_dio; |
2364 | } | 2364 | } |
2365 | } else { | 2365 | } else { |
2366 | current->backing_dev_info = file->f_mapping->backing_dev_info; | 2366 | current->backing_dev_info = inode_to_bdi(inode); |
2367 | written = generic_perform_write(file, from, *ppos); | 2367 | written = generic_perform_write(file, from, *ppos); |
2368 | if (likely(written >= 0)) | 2368 | if (likely(written >= 0)) |
2369 | iocb->ki_pos = *ppos + written; | 2369 | iocb->ki_pos = *ppos + written; |
diff --git a/fs/ramfs/file-nommu.c b/fs/ramfs/file-nommu.c index bbafbde3471a..f6ab41b39612 100644 --- a/fs/ramfs/file-nommu.c +++ b/fs/ramfs/file-nommu.c | |||
@@ -34,7 +34,14 @@ static unsigned long ramfs_nommu_get_unmapped_area(struct file *file, | |||
34 | unsigned long flags); | 34 | unsigned long flags); |
35 | static int ramfs_nommu_mmap(struct file *file, struct vm_area_struct *vma); | 35 | static int ramfs_nommu_mmap(struct file *file, struct vm_area_struct *vma); |
36 | 36 | ||
37 | static unsigned ramfs_mmap_capabilities(struct file *file) | ||
38 | { | ||
39 | return NOMMU_MAP_DIRECT | NOMMU_MAP_COPY | NOMMU_MAP_READ | | ||
40 | NOMMU_MAP_WRITE | NOMMU_MAP_EXEC; | ||
41 | } | ||
42 | |||
37 | const struct file_operations ramfs_file_operations = { | 43 | const struct file_operations ramfs_file_operations = { |
44 | .mmap_capabilities = ramfs_mmap_capabilities, | ||
38 | .mmap = ramfs_nommu_mmap, | 45 | .mmap = ramfs_nommu_mmap, |
39 | .get_unmapped_area = ramfs_nommu_get_unmapped_area, | 46 | .get_unmapped_area = ramfs_nommu_get_unmapped_area, |
40 | .read = new_sync_read, | 47 | .read = new_sync_read, |
diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c index d365b1c4eb3c..889d558b4e05 100644 --- a/fs/ramfs/inode.c +++ b/fs/ramfs/inode.c | |||
@@ -50,14 +50,6 @@ static const struct address_space_operations ramfs_aops = { | |||
50 | .set_page_dirty = __set_page_dirty_no_writeback, | 50 | .set_page_dirty = __set_page_dirty_no_writeback, |
51 | }; | 51 | }; |
52 | 52 | ||
53 | static struct backing_dev_info ramfs_backing_dev_info = { | ||
54 | .name = "ramfs", | ||
55 | .ra_pages = 0, /* No readahead */ | ||
56 | .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK | | ||
57 | BDI_CAP_MAP_DIRECT | BDI_CAP_MAP_COPY | | ||
58 | BDI_CAP_READ_MAP | BDI_CAP_WRITE_MAP | BDI_CAP_EXEC_MAP, | ||
59 | }; | ||
60 | |||
61 | struct inode *ramfs_get_inode(struct super_block *sb, | 53 | struct inode *ramfs_get_inode(struct super_block *sb, |
62 | const struct inode *dir, umode_t mode, dev_t dev) | 54 | const struct inode *dir, umode_t mode, dev_t dev) |
63 | { | 55 | { |
@@ -67,7 +59,6 @@ struct inode *ramfs_get_inode(struct super_block *sb, | |||
67 | inode->i_ino = get_next_ino(); | 59 | inode->i_ino = get_next_ino(); |
68 | inode_init_owner(inode, dir, mode); | 60 | inode_init_owner(inode, dir, mode); |
69 | inode->i_mapping->a_ops = &ramfs_aops; | 61 | inode->i_mapping->a_ops = &ramfs_aops; |
70 | inode->i_mapping->backing_dev_info = &ramfs_backing_dev_info; | ||
71 | mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); | 62 | mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); |
72 | mapping_set_unevictable(inode->i_mapping); | 63 | mapping_set_unevictable(inode->i_mapping); |
73 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 64 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
@@ -267,19 +258,9 @@ static struct file_system_type ramfs_fs_type = { | |||
267 | int __init init_ramfs_fs(void) | 258 | int __init init_ramfs_fs(void) |
268 | { | 259 | { |
269 | static unsigned long once; | 260 | static unsigned long once; |
270 | int err; | ||
271 | 261 | ||
272 | if (test_and_set_bit(0, &once)) | 262 | if (test_and_set_bit(0, &once)) |
273 | return 0; | 263 | return 0; |
274 | 264 | return register_filesystem(&ramfs_fs_type); | |
275 | err = bdi_init(&ramfs_backing_dev_info); | ||
276 | if (err) | ||
277 | return err; | ||
278 | |||
279 | err = register_filesystem(&ramfs_fs_type); | ||
280 | if (err) | ||
281 | bdi_destroy(&ramfs_backing_dev_info); | ||
282 | |||
283 | return err; | ||
284 | } | 265 | } |
285 | fs_initcall(init_ramfs_fs); | 266 | fs_initcall(init_ramfs_fs); |
diff --git a/fs/romfs/mmap-nommu.c b/fs/romfs/mmap-nommu.c index ea06c7554860..7da9e2153953 100644 --- a/fs/romfs/mmap-nommu.c +++ b/fs/romfs/mmap-nommu.c | |||
@@ -70,6 +70,15 @@ static int romfs_mmap(struct file *file, struct vm_area_struct *vma) | |||
70 | return vma->vm_flags & (VM_SHARED | VM_MAYSHARE) ? 0 : -ENOSYS; | 70 | return vma->vm_flags & (VM_SHARED | VM_MAYSHARE) ? 0 : -ENOSYS; |
71 | } | 71 | } |
72 | 72 | ||
73 | static unsigned romfs_mmap_capabilities(struct file *file) | ||
74 | { | ||
75 | struct mtd_info *mtd = file_inode(file)->i_sb->s_mtd; | ||
76 | |||
77 | if (!mtd) | ||
78 | return NOMMU_MAP_COPY; | ||
79 | return mtd_mmap_capabilities(mtd); | ||
80 | } | ||
81 | |||
73 | const struct file_operations romfs_ro_fops = { | 82 | const struct file_operations romfs_ro_fops = { |
74 | .llseek = generic_file_llseek, | 83 | .llseek = generic_file_llseek, |
75 | .read = new_sync_read, | 84 | .read = new_sync_read, |
@@ -77,4 +86,5 @@ const struct file_operations romfs_ro_fops = { | |||
77 | .splice_read = generic_file_splice_read, | 86 | .splice_read = generic_file_splice_read, |
78 | .mmap = romfs_mmap, | 87 | .mmap = romfs_mmap, |
79 | .get_unmapped_area = romfs_get_unmapped_area, | 88 | .get_unmapped_area = romfs_get_unmapped_area, |
89 | .mmap_capabilities = romfs_mmap_capabilities, | ||
80 | }; | 90 | }; |
diff --git a/fs/romfs/super.c b/fs/romfs/super.c index e98dd88197d5..268733cda397 100644 --- a/fs/romfs/super.c +++ b/fs/romfs/super.c | |||
@@ -355,9 +355,6 @@ static struct inode *romfs_iget(struct super_block *sb, unsigned long pos) | |||
355 | case ROMFH_REG: | 355 | case ROMFH_REG: |
356 | i->i_fop = &romfs_ro_fops; | 356 | i->i_fop = &romfs_ro_fops; |
357 | i->i_data.a_ops = &romfs_aops; | 357 | i->i_data.a_ops = &romfs_aops; |
358 | if (i->i_sb->s_mtd) | ||
359 | i->i_data.backing_dev_info = | ||
360 | i->i_sb->s_mtd->backing_dev_info; | ||
361 | if (nextfh & ROMFH_EXEC) | 358 | if (nextfh & ROMFH_EXEC) |
362 | mode |= S_IXUGO; | 359 | mode |= S_IXUGO; |
363 | break; | 360 | break; |
diff --git a/fs/super.c b/fs/super.c index eae088f6aaae..05a021638b11 100644 --- a/fs/super.c +++ b/fs/super.c | |||
@@ -36,8 +36,8 @@ | |||
36 | #include "internal.h" | 36 | #include "internal.h" |
37 | 37 | ||
38 | 38 | ||
39 | LIST_HEAD(super_blocks); | 39 | static LIST_HEAD(super_blocks); |
40 | DEFINE_SPINLOCK(sb_lock); | 40 | static DEFINE_SPINLOCK(sb_lock); |
41 | 41 | ||
42 | static char *sb_writers_name[SB_FREEZE_LEVELS] = { | 42 | static char *sb_writers_name[SB_FREEZE_LEVELS] = { |
43 | "sb_writers", | 43 | "sb_writers", |
@@ -185,8 +185,8 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags) | |||
185 | } | 185 | } |
186 | init_waitqueue_head(&s->s_writers.wait); | 186 | init_waitqueue_head(&s->s_writers.wait); |
187 | init_waitqueue_head(&s->s_writers.wait_unfrozen); | 187 | init_waitqueue_head(&s->s_writers.wait_unfrozen); |
188 | s->s_bdi = &noop_backing_dev_info; | ||
188 | s->s_flags = flags; | 189 | s->s_flags = flags; |
189 | s->s_bdi = &default_backing_dev_info; | ||
190 | INIT_HLIST_NODE(&s->s_instances); | 190 | INIT_HLIST_NODE(&s->s_instances); |
191 | INIT_HLIST_BL_HEAD(&s->s_anon); | 191 | INIT_HLIST_BL_HEAD(&s->s_anon); |
192 | INIT_LIST_HEAD(&s->s_inodes); | 192 | INIT_LIST_HEAD(&s->s_inodes); |
@@ -863,10 +863,7 @@ EXPORT_SYMBOL(free_anon_bdev); | |||
863 | 863 | ||
864 | int set_anon_super(struct super_block *s, void *data) | 864 | int set_anon_super(struct super_block *s, void *data) |
865 | { | 865 | { |
866 | int error = get_anon_bdev(&s->s_dev); | 866 | return get_anon_bdev(&s->s_dev); |
867 | if (!error) | ||
868 | s->s_bdi = &noop_backing_dev_info; | ||
869 | return error; | ||
870 | } | 867 | } |
871 | 868 | ||
872 | EXPORT_SYMBOL(set_anon_super); | 869 | EXPORT_SYMBOL(set_anon_super); |
@@ -1111,7 +1108,6 @@ mount_fs(struct file_system_type *type, int flags, const char *name, void *data) | |||
1111 | sb = root->d_sb; | 1108 | sb = root->d_sb; |
1112 | BUG_ON(!sb); | 1109 | BUG_ON(!sb); |
1113 | WARN_ON(!sb->s_bdi); | 1110 | WARN_ON(!sb->s_bdi); |
1114 | WARN_ON(sb->s_bdi == &default_backing_dev_info); | ||
1115 | sb->s_flags |= MS_BORN; | 1111 | sb->s_flags |= MS_BORN; |
1116 | 1112 | ||
1117 | error = security_sb_kern_mount(sb, flags, secdata); | 1113 | error = security_sb_kern_mount(sb, flags, secdata); |
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c index ea41649e4ca5..c49b1981ac95 100644 --- a/fs/ubifs/dir.c +++ b/fs/ubifs/dir.c | |||
@@ -108,8 +108,6 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir, | |||
108 | inode->i_mtime = inode->i_atime = inode->i_ctime = | 108 | inode->i_mtime = inode->i_atime = inode->i_ctime = |
109 | ubifs_current_time(inode); | 109 | ubifs_current_time(inode); |
110 | inode->i_mapping->nrpages = 0; | 110 | inode->i_mapping->nrpages = 0; |
111 | /* Disable readahead */ | ||
112 | inode->i_mapping->backing_dev_info = &c->bdi; | ||
113 | 111 | ||
114 | switch (mode & S_IFMT) { | 112 | switch (mode & S_IFMT) { |
115 | case S_IFREG: | 113 | case S_IFREG: |
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 106bf20629ce..6197154f36ca 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c | |||
@@ -156,9 +156,6 @@ struct inode *ubifs_iget(struct super_block *sb, unsigned long inum) | |||
156 | if (err) | 156 | if (err) |
157 | goto out_invalid; | 157 | goto out_invalid; |
158 | 158 | ||
159 | /* Disable read-ahead */ | ||
160 | inode->i_mapping->backing_dev_info = &c->bdi; | ||
161 | |||
162 | switch (inode->i_mode & S_IFMT) { | 159 | switch (inode->i_mode & S_IFMT) { |
163 | case S_IFREG: | 160 | case S_IFREG: |
164 | inode->i_mapping->a_ops = &ubifs_file_address_operations; | 161 | inode->i_mapping->a_ops = &ubifs_file_address_operations; |
@@ -2017,7 +2014,7 @@ static int ubifs_fill_super(struct super_block *sb, void *data, int silent) | |||
2017 | * Read-ahead will be disabled because @c->bdi.ra_pages is 0. | 2014 | * Read-ahead will be disabled because @c->bdi.ra_pages is 0. |
2018 | */ | 2015 | */ |
2019 | c->bdi.name = "ubifs", | 2016 | c->bdi.name = "ubifs", |
2020 | c->bdi.capabilities = BDI_CAP_MAP_COPY; | 2017 | c->bdi.capabilities = 0; |
2021 | err = bdi_init(&c->bdi); | 2018 | err = bdi_init(&c->bdi); |
2022 | if (err) | 2019 | if (err) |
2023 | goto out_close; | 2020 | goto out_close; |
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index f2d05a19d68c..1cdba95c78cb 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c | |||
@@ -735,7 +735,7 @@ xfs_file_buffered_aio_write( | |||
735 | 735 | ||
736 | iov_iter_truncate(from, count); | 736 | iov_iter_truncate(from, count); |
737 | /* We can write back this queue in page reclaim */ | 737 | /* We can write back this queue in page reclaim */ |
738 | current->backing_dev_info = mapping->backing_dev_info; | 738 | current->backing_dev_info = inode_to_bdi(inode); |
739 | 739 | ||
740 | write_retry: | 740 | write_retry: |
741 | trace_xfs_file_buffered_write(ip, count, iocb->ki_pos, 0); | 741 | trace_xfs_file_buffered_write(ip, count, iocb->ki_pos, 0); |