[PATCH] device-mapper ioctl: add skip lock_fs flag
authorAlasdair G Kergon <agk@redhat.com>
Fri, 6 Jan 2006 08:20:07 +0000 (00:20 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 6 Jan 2006 16:34:01 +0000 (08:34 -0800)
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>
drivers/md/dm-ioctl.c
include/linux/dm-ioctl.h

index dbc07af..561bda5 100644 (file)
@@ -693,14 +693,18 @@ static int dev_rename(struct dm_ioctl *param, size_t param_size)
 static int do_suspend(struct dm_ioctl *param)
 {
        int r = 0;
+       int do_lockfs = 1;
        struct mapped_device *md;
 
        md = find_device(param);
        if (!md)
                return -ENXIO;
 
+       if (param->flags & DM_SKIP_LOCKFS_FLAG)
+               do_lockfs = 0;
+
        if (!dm_suspended(md))
-               r = dm_suspend(md, 1);
+               r = dm_suspend(md, do_lockfs);
 
        if (!r)
                r = __dev_status(md, param);
@@ -712,6 +716,7 @@ static int do_suspend(struct dm_ioctl *param)
 static int do_resume(struct dm_ioctl *param)
 {
        int r = 0;
+       int do_lockfs = 1;
        struct hash_cell *hc;
        struct mapped_device *md;
        struct dm_table *new_map;
@@ -737,8 +742,10 @@ static int do_resume(struct dm_ioctl *param)
        /* Do we need to load a new map ? */
        if (new_map) {
                /* Suspend if it isn't already suspended */
+               if (param->flags & DM_SKIP_LOCKFS_FLAG)
+                       do_lockfs = 0;
                if (!dm_suspended(md))
-                       dm_suspend(md, 1);
+                       dm_suspend(md, do_lockfs);
 
                r = dm_swap_table(md, new_map);
                if (r) {
index f5eb6b6..fa75ba0 100644 (file)
@@ -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_VERSION_MAJOR       4
-#define DM_VERSION_MINOR       4
+#define DM_VERSION_MINOR       5
 #define DM_VERSION_PATCHLEVEL  0
-#define DM_VERSION_EXTRA       "-ioctl (2005-01-12)"
+#define DM_VERSION_EXTRA       "-ioctl (2005-10-04)"
 
 /* Status bits */
 #define DM_READONLY_FLAG       (1 << 0) /* In/Out */
@@ -301,8 +301,13 @@ typedef char ioctl_struct[308];
 #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 */
 
+/*
+ * Set this to avoid attempting to freeze any filesystem when suspending.
+ */
+#define DM_SKIP_LOCKFS_FLAG    (1 << 10) /* In */
+
 #endif                         /* _LINUX_DM_IOCTL_H */