aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/dm-ioctl.c12
-rw-r--r--drivers/md/dm.c3
-rw-r--r--drivers/md/dm.h5
3 files changed, 13 insertions, 7 deletions
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index 4510ad8f971c..6d7a3d0c8f88 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -765,7 +765,7 @@ out:
765static int do_suspend(struct dm_ioctl *param) 765static int do_suspend(struct dm_ioctl *param)
766{ 766{
767 int r = 0; 767 int r = 0;
768 int do_lockfs = 1; 768 unsigned suspend_flags = DM_SUSPEND_LOCKFS_FLAG;
769 struct mapped_device *md; 769 struct mapped_device *md;
770 770
771 md = find_device(param); 771 md = find_device(param);
@@ -773,10 +773,10 @@ static int do_suspend(struct dm_ioctl *param)
773 return -ENXIO; 773 return -ENXIO;
774 774
775 if (param->flags & DM_SKIP_LOCKFS_FLAG) 775 if (param->flags & DM_SKIP_LOCKFS_FLAG)
776 do_lockfs = 0; 776 suspend_flags &= ~DM_SUSPEND_LOCKFS_FLAG;
777 777
778 if (!dm_suspended(md)) 778 if (!dm_suspended(md))
779 r = dm_suspend(md, do_lockfs); 779 r = dm_suspend(md, suspend_flags);
780 780
781 if (!r) 781 if (!r)
782 r = __dev_status(md, param); 782 r = __dev_status(md, param);
@@ -788,7 +788,7 @@ static int do_suspend(struct dm_ioctl *param)
788static int do_resume(struct dm_ioctl *param) 788static int do_resume(struct dm_ioctl *param)
789{ 789{
790 int r = 0; 790 int r = 0;
791 int do_lockfs = 1; 791 unsigned suspend_flags = DM_SUSPEND_LOCKFS_FLAG;
792 struct hash_cell *hc; 792 struct hash_cell *hc;
793 struct mapped_device *md; 793 struct mapped_device *md;
794 struct dm_table *new_map; 794 struct dm_table *new_map;
@@ -814,9 +814,9 @@ static int do_resume(struct dm_ioctl *param)
814 if (new_map) { 814 if (new_map) {
815 /* Suspend if it isn't already suspended */ 815 /* Suspend if it isn't already suspended */
816 if (param->flags & DM_SKIP_LOCKFS_FLAG) 816 if (param->flags & DM_SKIP_LOCKFS_FLAG)
817 do_lockfs = 0; 817 suspend_flags &= ~DM_SUSPEND_LOCKFS_FLAG;
818 if (!dm_suspended(md)) 818 if (!dm_suspended(md))
819 dm_suspend(md, do_lockfs); 819 dm_suspend(md, suspend_flags);
820 820
821 r = dm_swap_table(md, new_map); 821 r = dm_swap_table(md, new_map);
822 if (r) { 822 if (r) {
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index dd50e30b6dcf..b42e71bb9e67 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1272,12 +1272,13 @@ static void unlock_fs(struct mapped_device *md)
1272 * dm_bind_table, dm_suspend must be called to flush any in 1272 * dm_bind_table, dm_suspend must be called to flush any in
1273 * flight bios and ensure that any further io gets deferred. 1273 * flight bios and ensure that any further io gets deferred.
1274 */ 1274 */
1275int dm_suspend(struct mapped_device *md, int do_lockfs) 1275int dm_suspend(struct mapped_device *md, unsigned suspend_flags)
1276{ 1276{
1277 struct dm_table *map = NULL; 1277 struct dm_table *map = NULL;
1278 DECLARE_WAITQUEUE(wait, current); 1278 DECLARE_WAITQUEUE(wait, current);
1279 struct bio *def; 1279 struct bio *def;
1280 int r = -EINVAL; 1280 int r = -EINVAL;
1281 int do_lockfs = suspend_flags & DM_SUSPEND_LOCKFS_FLAG ? 1 : 0;
1281 1282
1282 down(&md->suspend_lock); 1283 down(&md->suspend_lock);
1283 1284
diff --git a/drivers/md/dm.h b/drivers/md/dm.h
index a48ec5e3c1f4..81c98d6e35e9 100644
--- a/drivers/md/dm.h
+++ b/drivers/md/dm.h
@@ -33,6 +33,11 @@
33#define SECTOR_SHIFT 9 33#define SECTOR_SHIFT 9
34 34
35/* 35/*
36 * Suspend feature flags
37 */
38#define DM_SUSPEND_LOCKFS_FLAG (1 << 0)
39
40/*
36 * List of devices that a metadevice uses and should open/close. 41 * List of devices that a metadevice uses and should open/close.
37 */ 42 */
38struct dm_dev { 43struct dm_dev {