|
|
fail_bdput: | fail_bdput: |
mutex_lock(&diaper->bd_mutex); | mutex_lock(&diaper->bd_mutex); |
if (!--diaper->bd_openers) { | if (!--diaper->bd_openers) { |
invalidate_bdev(diaper, 1); |
invalidate_bdev(diaper); |
diaper->bd_contains = NULL; | diaper->bd_contains = NULL; |
diaper->bd_disk = NULL; | diaper->bd_disk = NULL; |
} else | } else |
|
|
| |
mutex_lock(&diaper->bd_mutex); | mutex_lock(&diaper->bd_mutex); |
if (!--diaper->bd_openers) { | if (!--diaper->bd_openers) { |
invalidate_bdev(diaper, 1); |
invalidate_bdev(diaper); |
diaper->bd_contains = NULL; | diaper->bd_contains = NULL; |
diaper->bd_disk = NULL; | diaper->bd_disk = NULL; |
} else | } else |
|
|
goto error; | goto error; |
} | } |
sb->s_flags |= MS_ACTIVE; | sb->s_flags |= MS_ACTIVE; |
/* Equivilant of bdev_uevent(bdev, KOBJ_MOUNT): */ |
|
if (real->bd_disk) { |
|
if (real->bd_part) |
|
kobject_uevent(&real->bd_part->kobj, KOBJ_MOUNT); |
|
else |
|
kobject_uevent(&real->bd_disk->kobj, KOBJ_MOUNT); |
|
} |
|
} | } |
| |
return simple_set_mnt(mnt, sb); | return simple_set_mnt(mnt, sb); |
|
|
struct block_device *real = gfs_diaper_2real(diaper); | struct block_device *real = gfs_diaper_2real(diaper); |
unsigned long bsize = block_size(real); | unsigned long bsize = block_size(real); |
| |
/* Equivalent of bdev_uevent(bdev, KOBJ_UMOUNT); */ |
|
if (real->bd_disk) { |
|
if (real->bd_part) |
|
kobject_uevent(&real->bd_part->kobj, KOBJ_UMOUNT); |
|
else |
|
kobject_uevent(&real->bd_disk->kobj, KOBJ_UMOUNT); |
|
} |
|
generic_shutdown_super(sb); | generic_shutdown_super(sb); |
set_blocksize(diaper, bsize); | set_blocksize(diaper, bsize); |
set_blocksize(real, bsize); | set_blocksize(real, bsize); |