mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
PM / Hibernate: Replace bdget call with simple atomic_inc of i_count
Create bdgrab(). This function copies an existing reference to a block_device. It is safe to call from any context. Hibernation code wishes to copy a reference to the active swap device. Right now it calls bdget() under a spinlock, but this is wrong because bdget() can sleep. It doesn't need a full bdget() because we already hold a reference to active swap devices (and the spinlock protects against swapoff). Fixes http://bugzilla.kernel.org/show_bug.cgi?id=13827 Signed-off-by: Alan Jenkins <[email protected]> Signed-off-by: Rafael J. Wysocki <[email protected]>
This commit is contained in:
parent
ec79be2687
commit
dddac6a7b4
3 changed files with 13 additions and 2 deletions
|
|
@ -753,7 +753,7 @@ int swap_type_of(dev_t device, sector_t offset, struct block_device **bdev_p)
|
|||
|
||||
if (!bdev) {
|
||||
if (bdev_p)
|
||||
*bdev_p = bdget(sis->bdev->bd_dev);
|
||||
*bdev_p = bdgrab(sis->bdev);
|
||||
|
||||
spin_unlock(&swap_lock);
|
||||
return i;
|
||||
|
|
@ -765,7 +765,7 @@ int swap_type_of(dev_t device, sector_t offset, struct block_device **bdev_p)
|
|||
struct swap_extent, list);
|
||||
if (se->start_block == offset) {
|
||||
if (bdev_p)
|
||||
*bdev_p = bdget(sis->bdev->bd_dev);
|
||||
*bdev_p = bdgrab(sis->bdev);
|
||||
|
||||
spin_unlock(&swap_lock);
|
||||
bdput(bdev);
|
||||
|
|
|
|||
Loading…
Reference in a new issue