Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 926857 Details for
Bug 1130168
DM_DEFERRED_REMOVE support is missing from dmsetup
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
The patch to fix this bug
userspace-deferred-remove.patch (text/plain), 7.29 KB, created by
Mikuláš Patočka
on 2014-08-14 16:16:02 UTC
(
hide
)
Description:
The patch to fix this bug
Filename:
MIME Type:
Creator:
Mikuláš Patočka
Created:
2014-08-14 16:16:02 UTC
Size:
7.29 KB
patch
obsolete
>dmsetup: provide deferred remove feature > >This patch adds a new flag --deferred to dmsetup remove. If this flag is >specified and the device is open, it is scheduled to be deleted on close. > >Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> > >--- > libdm/ioctl/libdm-iface.c | 16 ++++++++++++++-- > libdm/ioctl/libdm-targets.h | 1 + > libdm/libdevmapper.h | 2 ++ > libdm/misc/dm-ioctl.h | 14 ++++++++++++++ > tools/dmsetup.c | 14 +++++++++++--- > 5 files changed, 42 insertions(+), 5 deletions(-) > >Index: lvm2-copy/tools/dmsetup.c >=================================================================== >--- lvm2-copy.orig/tools/dmsetup.c 2014-08-14 17:44:32.000000000 +0200 >+++ lvm2-copy/tools/dmsetup.c 2014-08-14 17:51:45.000000000 +0200 >@@ -120,6 +120,7 @@ enum { > ADD_NODE_ON_RESUME_ARG, > CHECKS_ARG, > COLS_ARG, >+ DEFERRED_ARG, > SELECT_ARG, > EXEC_ARG, > FORCE_ARG, >@@ -468,9 +469,10 @@ static void _display_info_long(struct dm > > printf("Name: %s\n", dm_task_get_name(dmt)); > >- printf("State: %s%s\n", >+ printf("State: %s%s%s\n", > info->suspended ? "SUSPENDED" : "ACTIVE", >- info->read_only ? " (READ-ONLY)" : ""); >+ info->read_only ? " (READ-ONLY)" : "", >+ info->deferred_remove ? " (DEFERRED REMOVE)" : ""); > > /* FIXME Old value is being printed when it's being changed. */ > if (dm_task_get_read_ahead(dmt, &read_ahead)) >@@ -1321,6 +1323,9 @@ static int _simple(int task, const char > if (_switches[RETRY_ARG] && task == DM_DEVICE_REMOVE) > dm_task_retry_remove(dmt); > >+ if (_switches[DEFERRED_ARG] && (task == DM_DEVICE_REMOVE || task == DM_DEVICE_REMOVE_ALL)) >+ dm_task_deferred_remove(dmt); >+ > r = dm_task_run(dmt); > > out: >@@ -3071,7 +3076,7 @@ static struct command _commands[] = { > "\t [-u|uuid <uuid>] [{--addnodeonresume|--addnodeoncreate}]\n" > "\t [--notable | --table <table> | <table_file>]", > 1, 2,0, _create}, >- {"remove", "[-f|--force] <device>", 0, -1, 1, _remove}, >+ {"remove", "[-f|--force] [--deferred] <device>", 0, -1, 1, _remove}, > {"remove_all", "[-f|--force]", 0, 0, 0, _remove_all}, > {"suspend", "[--noflush] <device>", 0, -1, 1, _suspend}, > {"resume", "<device> [{--addnodeonresume|--addnodeoncreate}]", 0, -1, 1, _resume}, >@@ -3521,6 +3526,7 @@ static int _process_switches(int *argc, > {"readonly", 0, &ind, READ_ONLY}, > {"checks", 0, &ind, CHECKS_ARG}, > {"columns", 0, &ind, COLS_ARG}, >+ {"deferred", 0, &ind, DEFERRED_ARG}, > {"select", 1, &ind, SELECT_ARG}, > {"exec", 1, &ind, EXEC_ARG}, > {"force", 0, &ind, FORCE_ARG}, >@@ -3694,6 +3700,8 @@ static int _process_switches(int *argc, > /* FIXME Accept modes as per chmod */ > _int_args[MODE_ARG] = (int) strtol(optarg, NULL, 8); > } >+ if (ind == DEFERRED_ARG) >+ _switches[DEFERRED_ARG]++; > if (ind == EXEC_ARG) { > _switches[EXEC_ARG]++; > _command = optarg; >Index: lvm2-copy/libdm/ioctl/libdm-iface.c >=================================================================== >--- lvm2-copy.orig/libdm/ioctl/libdm-iface.c 2014-08-14 17:44:31.000000000 +0200 >+++ lvm2-copy/libdm/ioctl/libdm-iface.c 2014-08-14 17:50:39.000000000 +0200 >@@ -654,6 +654,7 @@ int dm_task_get_info(struct dm_task *dmt > info->live_table = dmt->dmi.v4->flags & DM_ACTIVE_PRESENT_FLAG ? 1 : 0; > info->inactive_table = dmt->dmi.v4->flags & DM_INACTIVE_PRESENT_FLAG ? > 1 : 0; >+ info->deferred_remove = dmt->dmi.v4->flags & DM_DEFERRED_REMOVE; > info->target_count = dmt->dmi.v4->target_count; > info->open_count = dmt->dmi.v4->open_count; > info->event_nr = dmt->dmi.v4->event_nr; >@@ -862,6 +863,13 @@ int dm_task_retry_remove(struct dm_task > return 1; > } > >+int dm_task_deferred_remove(struct dm_task *dmt) >+{ >+ dmt->deferred_remove = 1; >+ >+ return 1; >+} >+ > int dm_task_query_inactive_table(struct dm_task *dmt) > { > dmt->query_inactive_table = 1; >@@ -1137,6 +1145,9 @@ static struct dm_ioctl *_flatten(struct > dmi->flags |= DM_READONLY_FLAG; > if (dmt->skip_lockfs) > dmi->flags |= DM_SKIP_LOCKFS_FLAG; >+ if (dmt->deferred_remove && (dmt->type == DM_DEVICE_REMOVE || dmt->type == DM_DEVICE_REMOVE_ALL)) >+ dmi->flags |= DM_DEFERRED_REMOVE; >+ > if (dmt->secure_data) { > if (_dm_version_minor < 20) > log_verbose("Secure data flag unsupported by kernel. " >@@ -1732,7 +1743,7 @@ static struct dm_ioctl *_do_dm_ioctl(str > } > > log_debug_activation("dm %s %s%s %s%s%s %s%.0d%s%.0d%s" >- "%s%c%c%s%s%s%s%s%s %.0" PRIu64 " %s [%u] (*%u)", >+ "%s%c%c%s%s%s%s%s%s%s %.0" PRIu64 " %s [%u] (*%u)", > _cmd_data_v4[dmt->type].name, > dmt->new_uuid ? "UUID " : "", > dmi->name, dmi->uuid, dmt->newname ? " " : "", >@@ -1748,6 +1759,7 @@ static struct dm_ioctl *_do_dm_ioctl(str > dmt->read_only ? "R" : "", > dmt->skip_lockfs ? "S " : "", > dmt->retry_remove ? "T " : "", >+ dmt->deferred_remove ? "D " : "", > dmt->secure_data ? "W " : "", > dmt->query_inactive_table ? "I " : "", > dmt->enable_checks ? "C" : "", >@@ -1927,7 +1939,7 @@ repeat_ioctl: > break; > case DM_DEVICE_REMOVE: > /* FIXME Kernel needs to fill in dmi->name */ >- if (dev_name && !rely_on_udev) >+ if (dev_name && !rely_on_udev && !(dmi->flags & DM_DEFERRED_REMOVE)) > rm_dev_node(dev_name, check_udev, rely_on_udev); > break; > >Index: lvm2-copy/libdm/ioctl/libdm-targets.h >=================================================================== >--- lvm2-copy.orig/libdm/ioctl/libdm-targets.h 2014-08-14 17:44:31.000000000 +0200 >+++ lvm2-copy/libdm/ioctl/libdm-targets.h 2014-08-14 17:50:39.000000000 +0200 >@@ -65,6 +65,7 @@ struct dm_task { > int new_uuid; > int secure_data; > int retry_remove; >+ int deferred_remove; > int enable_checks; > int expected_errno; > >Index: lvm2-copy/libdm/libdevmapper.h >=================================================================== >--- lvm2-copy.orig/libdm/libdevmapper.h 2014-08-14 17:44:31.000000000 +0200 >+++ lvm2-copy/libdm/libdevmapper.h 2014-08-14 17:50:39.000000000 +0200 >@@ -142,6 +142,7 @@ struct dm_info { > int suspended; > int live_table; > int inactive_table; >+ int deferred_remove; > int32_t open_count; > uint32_t event_nr; > uint32_t major; >@@ -222,6 +223,7 @@ int dm_task_query_inactive_table(struct > int dm_task_suppress_identical_reload(struct dm_task *dmt); > int dm_task_secure_data(struct dm_task *dmt); > int dm_task_retry_remove(struct dm_task *dmt); >+int dm_task_deferred_remove(struct dm_task *dmt); > > /* > * Enable checks for common mistakes such as issuing ioctls in an unsafe order. >Index: lvm2-copy/libdm/misc/dm-ioctl.h >=================================================================== >--- lvm2-copy.orig/libdm/misc/dm-ioctl.h 2013-11-21 16:27:32.000000000 +0100 >+++ lvm2-copy/libdm/misc/dm-ioctl.h 2014-08-14 17:50:39.000000000 +0200 >@@ -343,4 +343,18 @@ enum { > */ > #define DM_DATA_OUT_FLAG (1 << 16) /* Out */ > >+/* >+ * Remove the device when it is closed. >+ * >+ * This flag may be set on DM_DEV_REMOVE or DM_REMOVE_ALL to indicate that >+ * the device should be remove on close if it is open. >+ * >+ * On return from DM_DEV_REMOVE, this flag indicates that the device was not >+ * removed because it was open, but it is scheduled to be removed on close. >+ * >+ * When this flag is returned in DM_DEV_STATUS or other ioctls, it indicates >+ * that the device is scheduled to be removed on close. >+ */ >+#define DM_DEFERRED_REMOVE (1 << 17) /* In/Out */ >+ > #endif /* _LINUX_DM_IOCTL_H */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 1130168
:
926857
|
927190