Skip to content

Commit 1008fe6

Browse files
Christoph Hellwigaxboe
authored andcommitted
block: remove the all_bdevs list
Instead just iterate over the inodes for the block device superblock. Reviewed-by: Johannes Thumshirn <[email protected]> Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent 47b5e00 commit 1008fe6

File tree

2 files changed

+7
-16
lines changed

2 files changed

+7
-16
lines changed

fs/block_dev.c

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,6 @@ static void init_once(void *foo)
773773

774774
memset(bdev, 0, sizeof(*bdev));
775775
mutex_init(&bdev->bd_mutex);
776-
INIT_LIST_HEAD(&bdev->bd_list);
777776
#ifdef CONFIG_SYSFS
778777
INIT_LIST_HEAD(&bdev->bd_holder_disks);
779778
#endif
@@ -789,9 +788,6 @@ static void bdev_evict_inode(struct inode *inode)
789788
truncate_inode_pages_final(&inode->i_data);
790789
invalidate_inode_buffers(inode); /* is it needed here? */
791790
clear_inode(inode);
792-
spin_lock(&bdev_lock);
793-
list_del_init(&bdev->bd_list);
794-
spin_unlock(&bdev_lock);
795791
/* Detach inode from wb early as bdi_put() may free bdi->wb */
796792
inode_detach_wb(inode);
797793
if (bdev->bd_bdi != &noop_backing_dev_info) {
@@ -866,8 +862,6 @@ static int bdev_set(struct inode *inode, void *data)
866862
return 0;
867863
}
868864

869-
static LIST_HEAD(all_bdevs);
870-
871865
struct block_device *bdget(dev_t dev)
872866
{
873867
struct block_device *bdev;
@@ -892,9 +886,6 @@ struct block_device *bdget(dev_t dev)
892886
inode->i_bdev = bdev;
893887
inode->i_data.a_ops = &def_blk_aops;
894888
mapping_set_gfp_mask(&inode->i_data, GFP_USER);
895-
spin_lock(&bdev_lock);
896-
list_add(&bdev->bd_list, &all_bdevs);
897-
spin_unlock(&bdev_lock);
898889
unlock_new_inode(inode);
899890
}
900891
return bdev;
@@ -915,13 +906,14 @@ EXPORT_SYMBOL(bdgrab);
915906

916907
long nr_blockdev_pages(void)
917908
{
918-
struct block_device *bdev;
909+
struct inode *inode;
919910
long ret = 0;
920-
spin_lock(&bdev_lock);
921-
list_for_each_entry(bdev, &all_bdevs, bd_list) {
922-
ret += bdev->bd_inode->i_mapping->nrpages;
923-
}
924-
spin_unlock(&bdev_lock);
911+
912+
spin_lock(&blockdev_superblock->s_inode_list_lock);
913+
list_for_each_entry(inode, &blockdev_superblock->s_inodes, i_sb_list)
914+
ret += inode->i_mapping->nrpages;
915+
spin_unlock(&blockdev_superblock->s_inode_list_lock);
916+
925917
return ret;
926918
}
927919

include/linux/blk_types.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ struct block_device {
4040
int bd_invalidated;
4141
struct gendisk * bd_disk;
4242
struct backing_dev_info *bd_bdi;
43-
struct list_head bd_list;
4443

4544
/* The counter of freeze processes */
4645
int bd_fsfreeze_count;

0 commit comments

Comments
 (0)