diff options
Diffstat (limited to 'fs/block_dev.c')
| -rw-r--r-- | fs/block_dev.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c index f5a3d314bcd4..9b20fd7b9f52 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -332,6 +332,29 @@ struct block_device *bdget(dev_t dev) return bdev; } +long nr_blockdev_pages(void) +{ + long ret = 0; + int i; + + spin_lock(&bdev_lock); + for (i = 0; i < ARRAY_SIZE(bdev_hashtable); i++) { + struct list_head *head = &bdev_hashtable[i]; + struct list_head *lh; + + if (head == NULL) + continue; + list_for_each(lh, head) { + struct block_device *bdev; + + bdev = list_entry(lh, struct block_device, bd_hash); + ret += bdev->bd_inode->i_mapping->nrpages; + } + } + spin_unlock(&bdev_lock); + return ret; +} + static inline void __bd_forget(struct inode *inode) { list_del_init(&inode->i_devices); |
