new helper: ihold()
Clones an existing reference to inode; caller must already hold one. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@ -550,7 +550,7 @@ EXPORT_SYMBOL(bdget);
|
||||
*/
|
||||
struct block_device *bdgrab(struct block_device *bdev)
|
||||
{
|
||||
atomic_inc(&bdev->bd_inode->i_count);
|
||||
ihold(bdev->bd_inode);
|
||||
return bdev;
|
||||
}
|
||||
|
||||
@ -580,7 +580,7 @@ static struct block_device *bd_acquire(struct inode *inode)
|
||||
spin_lock(&bdev_lock);
|
||||
bdev = inode->i_bdev;
|
||||
if (bdev) {
|
||||
atomic_inc(&bdev->bd_inode->i_count);
|
||||
ihold(bdev->bd_inode);
|
||||
spin_unlock(&bdev_lock);
|
||||
return bdev;
|
||||
}
|
||||
@ -591,12 +591,12 @@ static struct block_device *bd_acquire(struct inode *inode)
|
||||
spin_lock(&bdev_lock);
|
||||
if (!inode->i_bdev) {
|
||||
/*
|
||||
* We take an additional bd_inode->i_count for inode,
|
||||
* We take an additional reference to bd_inode,
|
||||
* and it's released in clear_inode() of inode.
|
||||
* So, we can access it via ->i_mapping always
|
||||
* without igrab().
|
||||
*/
|
||||
atomic_inc(&bdev->bd_inode->i_count);
|
||||
ihold(bdev->bd_inode);
|
||||
inode->i_bdev = bdev;
|
||||
inode->i_mapping = bdev->bd_inode->i_mapping;
|
||||
list_add(&inode->i_devices, &bdev->bd_inodes);
|
||||
|
Reference in New Issue
Block a user