Loading block/genhd.c +2 −0 Original line number Diff line number Diff line Loading @@ -648,6 +648,8 @@ void del_gendisk(struct gendisk *disk) disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY | DISK_PITER_REVERSE); while ((part = disk_part_iter_next(&piter))) { bdev_unhash_inode(MKDEV(disk->major, disk->first_minor + part->partno)); invalidate_partition(disk, part->partno); delete_partition(disk, part->partno); } Loading fs/block_dev.c +15 −0 Original line number Diff line number Diff line Loading @@ -698,6 +698,21 @@ static int bdev_set(struct inode *inode, void *data) static LIST_HEAD(all_bdevs); /* * If there is a bdev inode for this device, unhash it so that it gets evicted * as soon as last inode reference is dropped. */ void bdev_unhash_inode(dev_t dev) { struct inode *inode; inode = ilookup5(blockdev_superblock, hash(dev), bdev_test, &dev); if (inode) { remove_inode_hash(inode); iput(inode); } } struct block_device *bdget(dev_t dev) { struct block_device *bdev; Loading include/linux/fs.h +1 −0 Original line number Diff line number Diff line Loading @@ -2398,6 +2398,7 @@ extern struct kmem_cache *names_cachep; #ifdef CONFIG_BLOCK extern int register_blkdev(unsigned int, const char *); extern void unregister_blkdev(unsigned int, const char *); extern void bdev_unhash_inode(dev_t dev); extern struct block_device *bdget(dev_t); extern struct block_device *bdgrab(struct block_device *bdev); extern void bd_set_size(struct block_device *, loff_t size); Loading Loading
block/genhd.c +2 −0 Original line number Diff line number Diff line Loading @@ -648,6 +648,8 @@ void del_gendisk(struct gendisk *disk) disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY | DISK_PITER_REVERSE); while ((part = disk_part_iter_next(&piter))) { bdev_unhash_inode(MKDEV(disk->major, disk->first_minor + part->partno)); invalidate_partition(disk, part->partno); delete_partition(disk, part->partno); } Loading
fs/block_dev.c +15 −0 Original line number Diff line number Diff line Loading @@ -698,6 +698,21 @@ static int bdev_set(struct inode *inode, void *data) static LIST_HEAD(all_bdevs); /* * If there is a bdev inode for this device, unhash it so that it gets evicted * as soon as last inode reference is dropped. */ void bdev_unhash_inode(dev_t dev) { struct inode *inode; inode = ilookup5(blockdev_superblock, hash(dev), bdev_test, &dev); if (inode) { remove_inode_hash(inode); iput(inode); } } struct block_device *bdget(dev_t dev) { struct block_device *bdev; Loading
include/linux/fs.h +1 −0 Original line number Diff line number Diff line Loading @@ -2398,6 +2398,7 @@ extern struct kmem_cache *names_cachep; #ifdef CONFIG_BLOCK extern int register_blkdev(unsigned int, const char *); extern void unregister_blkdev(unsigned int, const char *); extern void bdev_unhash_inode(dev_t dev); extern struct block_device *bdget(dev_t); extern struct block_device *bdgrab(struct block_device *bdev); extern void bd_set_size(struct block_device *, loff_t size); Loading