]> sourceware.org Git - lvm2.git/commitdiff
libdm: add dm_stats_bind_from_fd()
authorBryn M. Reeves <bmr@redhat.com>
Sun, 18 Dec 2016 14:40:57 +0000 (14:40 +0000)
committerBryn M. Reeves <bmr@redhat.com>
Sun, 18 Dec 2016 20:47:17 +0000 (20:47 +0000)
dmsetup already has a version of this function, and dmfilemapd will
need it too: move it to libdevmapper to avoid copying it around.

WHATS_NEW_DM
libdm/.exported_symbols.DM_1_02_138
libdm/libdevmapper.h
libdm/libdm-stats.c
tools/dmsetup.c

index d57ddd792982fe5903e3e2b1da02e4613661cd7f..3f9eeac45242d6dd1bacf48515074787a0fbfe4f 100644 (file)
@@ -1,5 +1,6 @@
 Version 1.02.138 - 
 =====================================
+  Add dm_stats_bind_from_fd() to bind a stats handle from a file descriptor.
   Do not try call callback when reverting activation on error path.
   Fix file mapping for extents with physically adjacent extents.
   Validation vsnprintf result in runtime translate of dm_log (1.02.136).
index 7535829374f3226fc1be1aea2dfbc97ed02d8607..08f936fe3f160dc1778e12221558a5c91c86d367 100644 (file)
@@ -1,3 +1,4 @@
 dm_bit_get_last
 dm_bit_get_prev
 dm_bitset_parse_list
+dm_stats_bind_from_fd
index ed46795b95139084aab2e03c41f798cabb8d443a..363cf8e677550dcfa6a2263b404c44fd3060a715 100644 (file)
@@ -517,6 +517,16 @@ int dm_stats_bind_name(struct dm_stats *dms, const char *name);
  */
 int dm_stats_bind_uuid(struct dm_stats *dms, const char *uuid);
 
+/*
+ * Bind a dm_stats handle to the device backing the file referenced
+ * by the specified file descriptor.
+ *
+ * File descriptor fd must reference a regular file, open for reading,
+ * in a local file system, backed by a device-mapper device, that
+ * supports the FIEMAP ioctl, and that returns data describing the
+ * physical location of extents.
+ */
+int dm_stats_bind_from_fd(struct dm_stats *dms, int fd);
 /*
  * Test whether the running kernel supports the precise_timestamps
  * feature. Presence of this feature also implies histogram support.
index 39782446f2f28a8e8ad53ea0a7c02f153766dcf6..6e79a093571a177561a804c50c1c0f0407159232 100644 (file)
@@ -16,6 +16,7 @@
  */
 
 #include "dmlib.h"
+#include "kdev_t.h"
 
 #include "math.h" /* log10() */
 
@@ -452,6 +453,24 @@ int dm_stats_bind_uuid(struct dm_stats *dms, const char *uuid)
        return 1;
 }
 
+int dm_stats_bind_from_fd(struct dm_stats *dms, int fd)
+{
+        int major, minor;
+        struct stat buf;
+
+        if (fstat(fd, &buf)) {
+                log_error("fstat failed for fd %d.", fd);
+                return 0;
+        }
+
+        major = (int) MAJOR(buf.st_dev);
+        minor = (int) MINOR(buf.st_dev);
+
+        if (!dm_stats_bind_devno(dms, major, minor))
+                return_0;
+        return 1;
+}
+
 static int _stats_check_precise_timestamps(const struct dm_stats *dms)
 {
        /* Already checked? */
index 3f2c619cbe7636472b623cfa5000dfbfb247c7d1..fabb1830b09b5bf8d5e2f571c1db7a2ca8130686 100644 (file)
@@ -4640,24 +4640,6 @@ static int _bind_stats_device(struct dm_stats *dms, const char *name)
        return 1;
 }
 
-static int _bind_stats_from_fd(struct dm_stats *dms, int fd)
-{
-       int major, minor;
-       struct stat buf;
-
-       if (fstat(fd, &buf)) {
-               log_error("fstat failed for fd %d.", fd);
-               return 0;
-       }
-
-       major = (int) MAJOR(buf.st_dev);
-       minor = (int) MINOR(buf.st_dev);
-
-       if (!dm_stats_bind_devno(dms, major, minor))
-               return_0;
-       return 1;
-}
-
 static int _stats_clear_one_region(struct dm_stats *dms, uint64_t region_id)
 {
 
@@ -5068,7 +5050,7 @@ static int _stats_create_file(CMD_ARGS)
                goto bad;
        }
 
-       if (!_bind_stats_from_fd(dms, fd))
+       if (!dm_stats_bind_from_fd(dms, fd))
                goto_bad;
 
        if (!strlen(program_id))
This page took 0.101958 seconds and 5 git commands to generate.