]> sourceware.org Git - lvm2.git/commitdiff
libdm: add dm_hold_control_dev
authorZdenek Kabelac <zkabelac@redhat.com>
Wed, 21 Oct 2015 18:36:15 +0000 (20:36 +0200)
committerZdenek Kabelac <zkabelac@redhat.com>
Thu, 22 Oct 2015 20:27:31 +0000 (22:27 +0200)
Support hold of control device open.
Useful for daemons so the control device is not frequently reopenned.

WHATS_NEW_DM
libdm/.exported_symbols.DM_1_02_110
libdm/ioctl/libdm-iface.c
libdm/libdevmapper.h

index 9818846be8b5427ff7321ba48ff2e440e19d01e2..653e32d3a1d0ae8a061df3dbaa84309743d7eaeb 100644 (file)
@@ -1,5 +1,6 @@
 Version 1.02.110 - 
 ======================================
+  Add dm_hold_control_dev to allow holding of control device open.
   Add dm_report_compact_given_fields to remove given empty fields from report.
   Use libdm status parsing and local mem raid dmeventd plugin.
   Use local mem pool and lock only lvm2 execution for mirror dmeventd plugin.
index 71d04a9e3e8837c87abe70b146a5657888030d36..da742eef7d2e8b3bc6781e18937f42dd4d59d5a9 100644 (file)
@@ -1 +1,2 @@
 dm_report_compact_given_fields
+dm_hold_control_dev
index e9566c202ca0ad08c716291870f0e7089cf64cc3..58a8dfe51123e25c5627020a083803391d4efc42 100644 (file)
@@ -81,6 +81,7 @@ static dm_bitset_t _dm_bitset = NULL;
 static uint32_t _dm_device_major = 0;
 
 static int _control_fd = -1;
+static int _hold_control_fd_open = 0;
 static int _version_checked = 0;
 static int _version_ok = 1;
 static unsigned _ioctl_buffer_double_factor = 0;
@@ -2079,9 +2080,18 @@ repeat_ioctl:
        return 0;
 }
 
+void dm_hold_control_dev(int hold_open)
+{
+       _hold_control_fd_open = hold_open ? 1 : 0;
+
+       log_debug("Hold of control device is now %sset.",
+                 _hold_control_fd_open ? "" : "un");
+}
+
 void dm_lib_release(void)
 {
-       _close_control_fd();
+       if (!_hold_control_fd_open)
+               _close_control_fd();
        dm_timestamp_destroy(_dm_ioctl_timestamp);
        _dm_ioctl_timestamp = NULL;
        update_devs();
index fcbf7cf6814171e58dd9c82f85bfbabd7eac13c9..08b24feeab8172d1956d5fbc4d21af50cadc56b8 100644 (file)
@@ -1168,6 +1168,9 @@ void dm_lib_init(void) __attribute__((constructor));
 void dm_lib_release(void);
 void dm_lib_exit(void) __attribute__((destructor));
 
+/* An optimisation for clients making repeated calls involving dm ioctls */
+void dm_hold_control_dev(int hold_open);
+
 /*
  * Use NULL for all devices.
  */
This page took 0.051556 seconds and 5 git commands to generate.