Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -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) {
+8 −3
Original line number Diff line number Diff line
@@ -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 */