mirror of https://gitee.com/openkylin/linux.git
[PATCH] device-mapper: rename frozen_bdev
Rename frozen_bdev to suspended_bdev and move the bdget outside lockfs. (This prepares for making lockfs optional.) Signed-off-by: Alasdair G Kergon <agk@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
a1a1908070
commit
e39e2e95eb
|
@ -97,7 +97,7 @@ struct mapped_device {
|
||||||
* freeze/thaw support require holding onto a super block
|
* freeze/thaw support require holding onto a super block
|
||||||
*/
|
*/
|
||||||
struct super_block *frozen_sb;
|
struct super_block *frozen_sb;
|
||||||
struct block_device *frozen_bdev;
|
struct block_device *suspended_bdev;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MIN_IOS 256
|
#define MIN_IOS 256
|
||||||
|
@ -836,9 +836,9 @@ static void __set_size(struct mapped_device *md, sector_t size)
|
||||||
{
|
{
|
||||||
set_capacity(md->disk, size);
|
set_capacity(md->disk, size);
|
||||||
|
|
||||||
down(&md->frozen_bdev->bd_inode->i_sem);
|
down(&md->suspended_bdev->bd_inode->i_sem);
|
||||||
i_size_write(md->frozen_bdev->bd_inode, (loff_t)size << SECTOR_SHIFT);
|
i_size_write(md->suspended_bdev->bd_inode, (loff_t)size << SECTOR_SHIFT);
|
||||||
up(&md->frozen_bdev->bd_inode->i_sem);
|
up(&md->suspended_bdev->bd_inode->i_sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __bind(struct mapped_device *md, struct dm_table *t)
|
static int __bind(struct mapped_device *md, struct dm_table *t)
|
||||||
|
@ -1010,43 +1010,27 @@ int dm_swap_table(struct mapped_device *md, struct dm_table *table)
|
||||||
*/
|
*/
|
||||||
static int lock_fs(struct mapped_device *md)
|
static int lock_fs(struct mapped_device *md)
|
||||||
{
|
{
|
||||||
int r = -ENOMEM;
|
int r;
|
||||||
|
|
||||||
md->frozen_bdev = bdget_disk(md->disk, 0);
|
|
||||||
if (!md->frozen_bdev) {
|
|
||||||
DMWARN("bdget failed in lock_fs");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
WARN_ON(md->frozen_sb);
|
WARN_ON(md->frozen_sb);
|
||||||
|
|
||||||
md->frozen_sb = freeze_bdev(md->frozen_bdev);
|
md->frozen_sb = freeze_bdev(md->suspended_bdev);
|
||||||
if (IS_ERR(md->frozen_sb)) {
|
if (IS_ERR(md->frozen_sb)) {
|
||||||
r = PTR_ERR(md->frozen_sb);
|
r = PTR_ERR(md->frozen_sb);
|
||||||
goto out_bdput;
|
md->frozen_sb = NULL;
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* don't bdput right now, we don't want the bdev
|
/* don't bdput right now, we don't want the bdev
|
||||||
* to go away while it is locked. We'll bdput
|
* to go away while it is locked.
|
||||||
* in unlock_fs
|
|
||||||
*/
|
*/
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_bdput:
|
|
||||||
bdput(md->frozen_bdev);
|
|
||||||
md->frozen_sb = NULL;
|
|
||||||
md->frozen_bdev = NULL;
|
|
||||||
out:
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unlock_fs(struct mapped_device *md)
|
static void unlock_fs(struct mapped_device *md)
|
||||||
{
|
{
|
||||||
thaw_bdev(md->frozen_bdev, md->frozen_sb);
|
thaw_bdev(md->suspended_bdev, md->frozen_sb);
|
||||||
bdput(md->frozen_bdev);
|
|
||||||
|
|
||||||
md->frozen_sb = NULL;
|
md->frozen_sb = NULL;
|
||||||
md->frozen_bdev = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1072,6 +1056,13 @@ int dm_suspend(struct mapped_device *md)
|
||||||
/* This does not get reverted if there's an error later. */
|
/* This does not get reverted if there's an error later. */
|
||||||
dm_table_presuspend_targets(map);
|
dm_table_presuspend_targets(map);
|
||||||
|
|
||||||
|
md->suspended_bdev = bdget_disk(md->disk, 0);
|
||||||
|
if (!md->suspended_bdev) {
|
||||||
|
DMWARN("bdget failed in dm_suspend");
|
||||||
|
r = -ENOMEM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* Flush I/O to the device. */
|
/* Flush I/O to the device. */
|
||||||
r = lock_fs(md);
|
r = lock_fs(md);
|
||||||
if (r)
|
if (r)
|
||||||
|
@ -1124,6 +1115,11 @@ int dm_suspend(struct mapped_device *md)
|
||||||
r = 0;
|
r = 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
if (r && md->suspended_bdev) {
|
||||||
|
bdput(md->suspended_bdev);
|
||||||
|
md->suspended_bdev = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
dm_table_put(map);
|
dm_table_put(map);
|
||||||
up(&md->suspend_lock);
|
up(&md->suspend_lock);
|
||||||
return r;
|
return r;
|
||||||
|
@ -1154,6 +1150,9 @@ int dm_resume(struct mapped_device *md)
|
||||||
|
|
||||||
unlock_fs(md);
|
unlock_fs(md);
|
||||||
|
|
||||||
|
bdput(md->suspended_bdev);
|
||||||
|
md->suspended_bdev = NULL;
|
||||||
|
|
||||||
clear_bit(DMF_SUSPENDED, &md->flags);
|
clear_bit(DMF_SUSPENDED, &md->flags);
|
||||||
|
|
||||||
dm_table_unplug_all(map);
|
dm_table_unplug_all(map);
|
||||||
|
|
Loading…
Reference in New Issue