[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:
Alasdair G Kergon 2006-01-06 00:20:05 -08:00 committed by Linus Torvalds
parent a1a1908070
commit e39e2e95eb
1 changed files with 25 additions and 26 deletions

View File

@ -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);