Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a2ecb5c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "block: Unhash block device inodes on gendisk destruction"

parents 07f75167 9507b39a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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);
	}
+15 −0
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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);