Commit 6da487dc authored by Alasdair G Kergon's avatar Alasdair G Kergon Committed by Linus Torvalds

[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: default avatarAlasdair G Kergon <agk@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent aa8d7c2f
...@@ -693,14 +693,18 @@ static int dev_rename(struct dm_ioctl *param, size_t param_size) ...@@ -693,14 +693,18 @@ static int dev_rename(struct dm_ioctl *param, size_t param_size)
static int do_suspend(struct dm_ioctl *param) static int do_suspend(struct dm_ioctl *param)
{ {
int r = 0; int r = 0;
int do_lockfs = 1;
struct mapped_device *md; struct mapped_device *md;
md = find_device(param); md = find_device(param);
if (!md) if (!md)
return -ENXIO; return -ENXIO;
if (param->flags & DM_SKIP_LOCKFS_FLAG)
do_lockfs = 0;
if (!dm_suspended(md)) if (!dm_suspended(md))
r = dm_suspend(md, 1); r = dm_suspend(md, do_lockfs);
if (!r) if (!r)
r = __dev_status(md, param); r = __dev_status(md, param);
...@@ -712,6 +716,7 @@ static int do_suspend(struct dm_ioctl *param) ...@@ -712,6 +716,7 @@ static int do_suspend(struct dm_ioctl *param)
static int do_resume(struct dm_ioctl *param) static int do_resume(struct dm_ioctl *param)
{ {
int r = 0; int r = 0;
int do_lockfs = 1;
struct hash_cell *hc; struct hash_cell *hc;
struct mapped_device *md; struct mapped_device *md;
struct dm_table *new_map; struct dm_table *new_map;
...@@ -737,8 +742,10 @@ static int do_resume(struct dm_ioctl *param) ...@@ -737,8 +742,10 @@ static int do_resume(struct dm_ioctl *param)
/* Do we need to load a new map ? */ /* Do we need to load a new map ? */
if (new_map) { if (new_map) {
/* Suspend if it isn't already suspended */ /* Suspend if it isn't already suspended */
if (param->flags & DM_SKIP_LOCKFS_FLAG)
do_lockfs = 0;
if (!dm_suspended(md)) if (!dm_suspended(md))
dm_suspend(md, 1); dm_suspend(md, do_lockfs);
r = dm_swap_table(md, new_map); r = dm_swap_table(md, new_map);
if (r) { if (r) {
......
...@@ -272,9 +272,9 @@ typedef char ioctl_struct[308]; ...@@ -272,9 +272,9 @@ typedef char ioctl_struct[308];
#define DM_TARGET_MSG _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl) #define DM_TARGET_MSG _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl)
#define DM_VERSION_MAJOR 4 #define DM_VERSION_MAJOR 4
#define DM_VERSION_MINOR 4 #define DM_VERSION_MINOR 5
#define DM_VERSION_PATCHLEVEL 0 #define DM_VERSION_PATCHLEVEL 0
#define DM_VERSION_EXTRA "-ioctl (2005-01-12)" #define DM_VERSION_EXTRA "-ioctl (2005-10-04)"
/* Status bits */ /* Status bits */
#define DM_READONLY_FLAG (1 << 0) /* In/Out */ #define DM_READONLY_FLAG (1 << 0) /* In/Out */
...@@ -301,8 +301,13 @@ typedef char ioctl_struct[308]; ...@@ -301,8 +301,13 @@ typedef char ioctl_struct[308];
#define DM_BUFFER_FULL_FLAG (1 << 8) /* Out */ #define DM_BUFFER_FULL_FLAG (1 << 8) /* Out */
/* /*
* Set this to improve performance when you aren't going to use open_count * Set this to improve performance when you aren't going to use open_count.
*/ */
#define DM_SKIP_BDGET_FLAG (1 << 9) /* In */ #define DM_SKIP_BDGET_FLAG (1 << 9) /* In */
/*
* Set this to avoid attempting to freeze any filesystem when suspending.
*/
#define DM_SKIP_LOCKFS_FLAG (1 << 10) /* In */
#endif /* _LINUX_DM_IOCTL_H */ #endif /* _LINUX_DM_IOCTL_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment