diff options
author | Alasdair G Kergon <agk@redhat.com> | 2006-01-06 03:20:07 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-06 11:34:01 -0500 |
commit | 6da487dcc0c6f4c827779687a20016efeffc4d60 (patch) | |
tree | 824d14e18cbb81bf45c6d17104993acfa47c9c36 /drivers/md/dm-ioctl.c | |
parent | aa8d7c2fbe619d8c0837296d2eaf4c14cebac198 (diff) |
[PATCH] device-mapper ioctl: add skip lock_fs flag
Add ioctl DM_SKIP_LOCKFS_FLAG for userspace to request that lock_fs is
bypassed when suspending a device.
There's no change to the behaviour of existing code that doesn't know about
the new flag.
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>
Diffstat (limited to 'drivers/md/dm-ioctl.c')
-rw-r--r-- | drivers/md/dm-ioctl.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c index dbc07afd4462..561bda5011e0 100644 --- a/drivers/md/dm-ioctl.c +++ b/drivers/md/dm-ioctl.c | |||
@@ -693,14 +693,18 @@ static int dev_rename(struct dm_ioctl *param, size_t param_size) | |||
693 | static int do_suspend(struct dm_ioctl *param) | 693 | static int do_suspend(struct dm_ioctl *param) |
694 | { | 694 | { |
695 | int r = 0; | 695 | int r = 0; |
696 | int do_lockfs = 1; | ||
696 | struct mapped_device *md; | 697 | struct mapped_device *md; |
697 | 698 | ||
698 | md = find_device(param); | 699 | md = find_device(param); |
699 | if (!md) | 700 | if (!md) |
700 | return -ENXIO; | 701 | return -ENXIO; |
701 | 702 | ||
703 | if (param->flags & DM_SKIP_LOCKFS_FLAG) | ||
704 | do_lockfs = 0; | ||
705 | |||
702 | if (!dm_suspended(md)) | 706 | if (!dm_suspended(md)) |
703 | r = dm_suspend(md, 1); | 707 | r = dm_suspend(md, do_lockfs); |
704 | 708 | ||
705 | if (!r) | 709 | if (!r) |
706 | r = __dev_status(md, param); | 710 | r = __dev_status(md, param); |
@@ -712,6 +716,7 @@ static int do_suspend(struct dm_ioctl *param) | |||
712 | static int do_resume(struct dm_ioctl *param) | 716 | static int do_resume(struct dm_ioctl *param) |
713 | { | 717 | { |
714 | int r = 0; | 718 | int r = 0; |
719 | int do_lockfs = 1; | ||
715 | struct hash_cell *hc; | 720 | struct hash_cell *hc; |
716 | struct mapped_device *md; | 721 | struct mapped_device *md; |
717 | struct dm_table *new_map; | 722 | struct dm_table *new_map; |
@@ -737,8 +742,10 @@ static int do_resume(struct dm_ioctl *param) | |||
737 | /* Do we need to load a new map ? */ | 742 | /* Do we need to load a new map ? */ |
738 | if (new_map) { | 743 | if (new_map) { |
739 | /* Suspend if it isn't already suspended */ | 744 | /* Suspend if it isn't already suspended */ |
745 | if (param->flags & DM_SKIP_LOCKFS_FLAG) | ||
746 | do_lockfs = 0; | ||
740 | if (!dm_suspended(md)) | 747 | if (!dm_suspended(md)) |
741 | dm_suspend(md, 1); | 748 | dm_suspend(md, do_lockfs); |
742 | 749 | ||
743 | r = dm_swap_table(md, new_map); | 750 | r = dm_swap_table(md, new_map); |
744 | if (r) { | 751 | if (r) { |