]> git.ipfire.org Git - thirdparty/util-linux.git/blobdiff - include/loopdev.h
dmesg: add --follow-new
[thirdparty/util-linux.git] / include / loopdev.h
index 793539935fb42e64d6c01a5fb609c99f791b1d1e..0e3a7517a98513fa58fd3d35c3e45f66216a0dc5 100644 (file)
@@ -23,6 +23,8 @@
 #define LOOP_GET_STATUS64      0x4C05
 /* #define LOOP_CHANGE_FD      0x4C06 */
 #define LOOP_SET_CAPACITY      0x4C07
+#define LOOP_SET_DIRECT_IO     0x4C08
+#define LOOP_SET_BLOCK_SIZE    0x4C09
 
 /* /dev/loop-control interface */
 #ifndef LOOP_CTL_ADD
@@ -39,13 +41,14 @@ enum {
        LO_FLAGS_USE_AOPS   = 2,
        LO_FLAGS_AUTOCLEAR  = 4,        /* kernel >= 2.6.25 */
        LO_FLAGS_PARTSCAN   = 8,        /* kernel >= 3.2 */
+       LO_FLAGS_DIRECT_IO  = 16,       /* kernel >= 4.2 */
 };
 
 #define LO_NAME_SIZE   64
 #define LO_KEY_SIZE    32
 
 /*
- * Linux LOOP_{SET,GET}_STATUS64 ioclt struct
+ * Linux LOOP_{SET,GET}_STATUS64 ioctl struct
  */
 struct loop_info64 {
        uint64_t        lo_device;
@@ -93,20 +96,20 @@ struct loopdev_cxt {
        char            *filename;      /* backing file for loopcxt_set_... */
        int             fd;             /* open(/dev/looo<N>) */
        int             mode;           /* fd mode O_{RDONLY,RDWR} */
+       uint64_t        blocksize;      /* used by loopcxt_setup_device() */
 
        int             flags;          /* LOOPDEV_FL_* flags */
        unsigned int    has_info:1;     /* .info contains data */
        unsigned int    extra_check:1;  /* unusual stuff for iterator */
-       unsigned int    debug:1;        /* debug mode ON/OFF */
        unsigned int    info_failed:1;  /* LOOP_GET_STATUS ioctl failed */
        unsigned int    control_ok:1;   /* /dev/loop-control success */
 
-       struct sysfs_cxt        sysfs;  /* pointer to /sys/dev/block/<maj:min>/ */
+       struct path_cxt         *sysfs; /* pointer to /sys/dev/block/<maj:min>/ */
        struct loop_info64      info;   /* for GET/SET ioctl */
        struct loopdev_iter     iter;   /* scans /sys or /dev for used/free devices */
 };
 
-#define UL_LOOPDEVCXT_EMPTY { .fd = -1, .sysfs = UL_SYSFSCXT_EMPTY }
+#define UL_LOOPDEVCXT_EMPTY { .fd = -1  }
 
 /*
  * loopdev_cxt.flags
@@ -132,9 +135,9 @@ extern int loopdev_is_autoclear(const char *device);
 
 extern char *loopdev_get_backing_file(const char *device);
 extern int loopdev_is_used(const char *device, const char *filename,
-                          uint64_t offset, int flags);
+                          uint64_t offset, uint64_t sizelimit, int flags);
 extern char *loopdev_find_by_backing_file(const char *filename,
-                                         uint64_t offset, int flags);
+                               uint64_t offset, uint64_t sizelimit, int flags);
 extern int loopcxt_find_unused(struct loopdev_cxt *lc);
 extern int loopdev_delete(const char *device);
 extern int loopdev_count_by_backing_file(const char *filename, char **loopdev);
@@ -145,7 +148,6 @@ extern int loopdev_count_by_backing_file(const char *filename, char **loopdev);
 extern int loopcxt_init(struct loopdev_cxt *lc, int flags)
                                __attribute__ ((warn_unused_result));
 extern void loopcxt_deinit(struct loopdev_cxt *lc);
-extern void loopcxt_enable_debug(struct loopdev_cxt *lc, int enable);
 
 extern int loopcxt_set_device(struct loopdev_cxt *lc, const char *device)
                                __attribute__ ((warn_unused_result));
@@ -153,7 +155,6 @@ extern int loopcxt_has_device(struct loopdev_cxt *lc);
 extern int loopcxt_add_device(struct loopdev_cxt *lc);
 extern char *loopcxt_strdup_device(struct loopdev_cxt *lc);
 extern const char *loopcxt_get_device(struct loopdev_cxt *lc);
-extern struct sysfs_cxt *loopcxt_get_sysfs(struct loopdev_cxt *lc);
 extern struct loop_info64 *loopcxt_get_info(struct loopdev_cxt *lc);
 
 extern int loopcxt_get_fd(struct loopdev_cxt *lc);
@@ -165,10 +166,15 @@ extern int loopcxt_next(struct loopdev_cxt *lc);
 
 extern int loopcxt_setup_device(struct loopdev_cxt *lc);
 extern int loopcxt_delete_device(struct loopdev_cxt *lc);
-extern int loopcxt_set_capacity(struct loopdev_cxt *lc);
+
+extern int loopcxt_ioctl_status(struct loopdev_cxt *lc);
+extern int loopcxt_ioctl_capacity(struct loopdev_cxt *lc);
+extern int loopcxt_ioctl_dio(struct loopdev_cxt *lc, unsigned long use_dio);
+extern int loopcxt_ioctl_blocksize(struct loopdev_cxt *lc, uint64_t blocksize);
 
 int loopcxt_set_offset(struct loopdev_cxt *lc, uint64_t offset);
 int loopcxt_set_sizelimit(struct loopdev_cxt *lc, uint64_t sizelimit);
+int loopcxt_set_blocksize(struct loopdev_cxt *lc, uint64_t blocksize);
 int loopcxt_set_flags(struct loopdev_cxt *lc, uint32_t flags);
 int loopcxt_set_backing_file(struct loopdev_cxt *lc, const char *filename);
 
@@ -176,20 +182,27 @@ extern char *loopcxt_get_backing_file(struct loopdev_cxt *lc);
 extern int loopcxt_get_backing_devno(struct loopdev_cxt *lc, dev_t *devno);
 extern int loopcxt_get_backing_inode(struct loopdev_cxt *lc, ino_t *ino);
 extern int loopcxt_get_offset(struct loopdev_cxt *lc, uint64_t *offset);
+extern int loopcxt_get_blocksize(struct loopdev_cxt *lc, uint64_t *blocksize);
 extern int loopcxt_get_sizelimit(struct loopdev_cxt *lc, uint64_t *size);
 extern int loopcxt_get_encrypt_type(struct loopdev_cxt *lc, uint32_t *type);
 extern const char *loopcxt_get_crypt_name(struct loopdev_cxt *lc);
 extern int loopcxt_is_autoclear(struct loopdev_cxt *lc);
 extern int loopcxt_is_readonly(struct loopdev_cxt *lc);
+extern int loopcxt_is_dio(struct loopdev_cxt *lc);
 extern int loopcxt_is_partscan(struct loopdev_cxt *lc);
 extern int loopcxt_find_by_backing_file(struct loopdev_cxt *lc,
                                const char *filename,
-                                uint64_t offset, int flags);
+                               uint64_t offset, uint64_t sizelimit,
+                               int flags);
+extern int loopcxt_find_overlap(struct loopdev_cxt *lc,
+                               const char *filename,
+                               uint64_t offset, uint64_t sizelimit);
 
 extern int loopcxt_is_used(struct loopdev_cxt *lc,
                     struct stat *st,
                     const char *backing_file,
                     uint64_t offset,
+                    uint64_t sizelimit,
                     int flags);
 
 #endif /* UTIL_LINUX_LOOPDEV_H */