1*4882a593Smuzhiyun /* SPDX-License-Identifier: LGPL-2.0+ WITH Linux-syscall-note */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2001 - 2003 Sistina Software (UK) Limited. 4*4882a593Smuzhiyun * Copyright (C) 2004 - 2009 Red Hat, Inc. All rights reserved. 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * This file is released under the LGPL. 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef _LINUX_DM_IOCTL_V4_H 10*4882a593Smuzhiyun #define _LINUX_DM_IOCTL_V4_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <linux/types.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define DM_DIR "mapper" /* Slashes not supported */ 15*4882a593Smuzhiyun #define DM_CONTROL_NODE "control" 16*4882a593Smuzhiyun #define DM_MAX_TYPE_NAME 16 17*4882a593Smuzhiyun #define DM_NAME_LEN 128 18*4882a593Smuzhiyun #define DM_UUID_LEN 129 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /* 21*4882a593Smuzhiyun * A traditional ioctl interface for the device mapper. 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * Each device can have two tables associated with it, an 24*4882a593Smuzhiyun * 'active' table which is the one currently used by io passing 25*4882a593Smuzhiyun * through the device, and an 'inactive' one which is a table 26*4882a593Smuzhiyun * that is being prepared as a replacement for the 'active' one. 27*4882a593Smuzhiyun * 28*4882a593Smuzhiyun * DM_VERSION: 29*4882a593Smuzhiyun * Just get the version information for the ioctl interface. 30*4882a593Smuzhiyun * 31*4882a593Smuzhiyun * DM_REMOVE_ALL: 32*4882a593Smuzhiyun * Remove all dm devices, destroy all tables. Only really used 33*4882a593Smuzhiyun * for debug. 34*4882a593Smuzhiyun * 35*4882a593Smuzhiyun * DM_LIST_DEVICES: 36*4882a593Smuzhiyun * Get a list of all the dm device names. 37*4882a593Smuzhiyun * 38*4882a593Smuzhiyun * DM_DEV_CREATE: 39*4882a593Smuzhiyun * Create a new device, neither the 'active' or 'inactive' table 40*4882a593Smuzhiyun * slots will be filled. The device will be in suspended state 41*4882a593Smuzhiyun * after creation, however any io to the device will get errored 42*4882a593Smuzhiyun * since it will be out-of-bounds. 43*4882a593Smuzhiyun * 44*4882a593Smuzhiyun * DM_DEV_REMOVE: 45*4882a593Smuzhiyun * Remove a device, destroy any tables. 46*4882a593Smuzhiyun * 47*4882a593Smuzhiyun * DM_DEV_RENAME: 48*4882a593Smuzhiyun * Rename a device or set its uuid if none was previously supplied. 49*4882a593Smuzhiyun * 50*4882a593Smuzhiyun * DM_SUSPEND: 51*4882a593Smuzhiyun * This performs both suspend and resume, depending which flag is 52*4882a593Smuzhiyun * passed in. 53*4882a593Smuzhiyun * Suspend: This command will not return until all pending io to 54*4882a593Smuzhiyun * the device has completed. Further io will be deferred until 55*4882a593Smuzhiyun * the device is resumed. 56*4882a593Smuzhiyun * Resume: It is no longer an error to issue this command on an 57*4882a593Smuzhiyun * unsuspended device. If a table is present in the 'inactive' 58*4882a593Smuzhiyun * slot, it will be moved to the active slot, then the old table 59*4882a593Smuzhiyun * from the active slot will be _destroyed_. Finally the device 60*4882a593Smuzhiyun * is resumed. 61*4882a593Smuzhiyun * 62*4882a593Smuzhiyun * DM_DEV_STATUS: 63*4882a593Smuzhiyun * Retrieves the status for the table in the 'active' slot. 64*4882a593Smuzhiyun * 65*4882a593Smuzhiyun * DM_DEV_WAIT: 66*4882a593Smuzhiyun * Wait for a significant event to occur to the device. This 67*4882a593Smuzhiyun * could either be caused by an event triggered by one of the 68*4882a593Smuzhiyun * targets of the table in the 'active' slot, or a table change. 69*4882a593Smuzhiyun * 70*4882a593Smuzhiyun * DM_TABLE_LOAD: 71*4882a593Smuzhiyun * Load a table into the 'inactive' slot for the device. The 72*4882a593Smuzhiyun * device does _not_ need to be suspended prior to this command. 73*4882a593Smuzhiyun * 74*4882a593Smuzhiyun * DM_TABLE_CLEAR: 75*4882a593Smuzhiyun * Destroy any table in the 'inactive' slot (ie. abort). 76*4882a593Smuzhiyun * 77*4882a593Smuzhiyun * DM_TABLE_DEPS: 78*4882a593Smuzhiyun * Return a set of device dependencies for the 'active' table. 79*4882a593Smuzhiyun * 80*4882a593Smuzhiyun * DM_TABLE_STATUS: 81*4882a593Smuzhiyun * Return the targets status for the 'active' table. 82*4882a593Smuzhiyun * 83*4882a593Smuzhiyun * DM_TARGET_MSG: 84*4882a593Smuzhiyun * Pass a message string to the target at a specific offset of a device. 85*4882a593Smuzhiyun * 86*4882a593Smuzhiyun * DM_DEV_SET_GEOMETRY: 87*4882a593Smuzhiyun * Set the geometry of a device by passing in a string in this format: 88*4882a593Smuzhiyun * 89*4882a593Smuzhiyun * "cylinders heads sectors_per_track start_sector" 90*4882a593Smuzhiyun * 91*4882a593Smuzhiyun * Beware that CHS geometry is nearly obsolete and only provided 92*4882a593Smuzhiyun * for compatibility with dm devices that can be booted by a PC 93*4882a593Smuzhiyun * BIOS. See struct hd_geometry for range limits. Also note that 94*4882a593Smuzhiyun * the geometry is erased if the device size changes. 95*4882a593Smuzhiyun */ 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /* 98*4882a593Smuzhiyun * All ioctl arguments consist of a single chunk of memory, with 99*4882a593Smuzhiyun * this structure at the start. If a uuid is specified any 100*4882a593Smuzhiyun * lookup (eg. for a DM_INFO) will be done on that, *not* the 101*4882a593Smuzhiyun * name. 102*4882a593Smuzhiyun */ 103*4882a593Smuzhiyun struct dm_ioctl { 104*4882a593Smuzhiyun /* 105*4882a593Smuzhiyun * The version number is made up of three parts: 106*4882a593Smuzhiyun * major - no backward or forward compatibility, 107*4882a593Smuzhiyun * minor - only backwards compatible, 108*4882a593Smuzhiyun * patch - both backwards and forwards compatible. 109*4882a593Smuzhiyun * 110*4882a593Smuzhiyun * All clients of the ioctl interface should fill in the 111*4882a593Smuzhiyun * version number of the interface that they were 112*4882a593Smuzhiyun * compiled with. 113*4882a593Smuzhiyun * 114*4882a593Smuzhiyun * All recognised ioctl commands (ie. those that don't 115*4882a593Smuzhiyun * return -ENOTTY) fill out this field, even if the 116*4882a593Smuzhiyun * command failed. 117*4882a593Smuzhiyun */ 118*4882a593Smuzhiyun __u32 version[3]; /* in/out */ 119*4882a593Smuzhiyun __u32 data_size; /* total size of data passed in 120*4882a593Smuzhiyun * including this struct */ 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun __u32 data_start; /* offset to start of data 123*4882a593Smuzhiyun * relative to start of this struct */ 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun __u32 target_count; /* in/out */ 126*4882a593Smuzhiyun __s32 open_count; /* out */ 127*4882a593Smuzhiyun __u32 flags; /* in/out */ 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun /* 130*4882a593Smuzhiyun * event_nr holds either the event number (input and output) or the 131*4882a593Smuzhiyun * udev cookie value (input only). 132*4882a593Smuzhiyun * The DM_DEV_WAIT ioctl takes an event number as input. 133*4882a593Smuzhiyun * The DM_SUSPEND, DM_DEV_REMOVE and DM_DEV_RENAME ioctls 134*4882a593Smuzhiyun * use the field as a cookie to return in the DM_COOKIE 135*4882a593Smuzhiyun * variable with the uevents they issue. 136*4882a593Smuzhiyun * For output, the ioctls return the event number, not the cookie. 137*4882a593Smuzhiyun */ 138*4882a593Smuzhiyun __u32 event_nr; /* in/out */ 139*4882a593Smuzhiyun __u32 padding; 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun __u64 dev; /* in/out */ 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun char name[DM_NAME_LEN]; /* device name */ 144*4882a593Smuzhiyun char uuid[DM_UUID_LEN]; /* unique identifier for 145*4882a593Smuzhiyun * the block device */ 146*4882a593Smuzhiyun char data[7]; /* padding or data */ 147*4882a593Smuzhiyun }; 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun /* 150*4882a593Smuzhiyun * Used to specify tables. These structures appear after the 151*4882a593Smuzhiyun * dm_ioctl. 152*4882a593Smuzhiyun */ 153*4882a593Smuzhiyun struct dm_target_spec { 154*4882a593Smuzhiyun __u64 sector_start; 155*4882a593Smuzhiyun __u64 length; 156*4882a593Smuzhiyun __s32 status; /* used when reading from kernel only */ 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun /* 159*4882a593Smuzhiyun * Location of the next dm_target_spec. 160*4882a593Smuzhiyun * - When specifying targets on a DM_TABLE_LOAD command, this value is 161*4882a593Smuzhiyun * the number of bytes from the start of the "current" dm_target_spec 162*4882a593Smuzhiyun * to the start of the "next" dm_target_spec. 163*4882a593Smuzhiyun * - When retrieving targets on a DM_TABLE_STATUS command, this value 164*4882a593Smuzhiyun * is the number of bytes from the start of the first dm_target_spec 165*4882a593Smuzhiyun * (that follows the dm_ioctl struct) to the start of the "next" 166*4882a593Smuzhiyun * dm_target_spec. 167*4882a593Smuzhiyun */ 168*4882a593Smuzhiyun __u32 next; 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun char target_type[DM_MAX_TYPE_NAME]; 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun /* 173*4882a593Smuzhiyun * Parameter string starts immediately after this object. 174*4882a593Smuzhiyun * Be careful to add padding after string to ensure correct 175*4882a593Smuzhiyun * alignment of subsequent dm_target_spec. 176*4882a593Smuzhiyun */ 177*4882a593Smuzhiyun }; 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun /* 180*4882a593Smuzhiyun * Used to retrieve the target dependencies. 181*4882a593Smuzhiyun */ 182*4882a593Smuzhiyun struct dm_target_deps { 183*4882a593Smuzhiyun __u32 count; /* Array size */ 184*4882a593Smuzhiyun __u32 padding; /* unused */ 185*4882a593Smuzhiyun __u64 dev[0]; /* out */ 186*4882a593Smuzhiyun }; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun /* 189*4882a593Smuzhiyun * Used to get a list of all dm devices. 190*4882a593Smuzhiyun */ 191*4882a593Smuzhiyun struct dm_name_list { 192*4882a593Smuzhiyun __u64 dev; 193*4882a593Smuzhiyun __u32 next; /* offset to the next record from 194*4882a593Smuzhiyun the _start_ of this */ 195*4882a593Smuzhiyun char name[0]; 196*4882a593Smuzhiyun }; 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun /* 199*4882a593Smuzhiyun * Used to retrieve the target versions 200*4882a593Smuzhiyun */ 201*4882a593Smuzhiyun struct dm_target_versions { 202*4882a593Smuzhiyun __u32 next; 203*4882a593Smuzhiyun __u32 version[3]; 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun char name[0]; 206*4882a593Smuzhiyun }; 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /* 209*4882a593Smuzhiyun * Used to pass message to a target 210*4882a593Smuzhiyun */ 211*4882a593Smuzhiyun struct dm_target_msg { 212*4882a593Smuzhiyun __u64 sector; /* Device sector */ 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun char message[0]; 215*4882a593Smuzhiyun }; 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun /* 218*4882a593Smuzhiyun * If you change this make sure you make the corresponding change 219*4882a593Smuzhiyun * to dm-ioctl.c:lookup_ioctl() 220*4882a593Smuzhiyun */ 221*4882a593Smuzhiyun enum { 222*4882a593Smuzhiyun /* Top level cmds */ 223*4882a593Smuzhiyun DM_VERSION_CMD = 0, 224*4882a593Smuzhiyun DM_REMOVE_ALL_CMD, 225*4882a593Smuzhiyun DM_LIST_DEVICES_CMD, 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun /* device level cmds */ 228*4882a593Smuzhiyun DM_DEV_CREATE_CMD, 229*4882a593Smuzhiyun DM_DEV_REMOVE_CMD, 230*4882a593Smuzhiyun DM_DEV_RENAME_CMD, 231*4882a593Smuzhiyun DM_DEV_SUSPEND_CMD, 232*4882a593Smuzhiyun DM_DEV_STATUS_CMD, 233*4882a593Smuzhiyun DM_DEV_WAIT_CMD, 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun /* Table level cmds */ 236*4882a593Smuzhiyun DM_TABLE_LOAD_CMD, 237*4882a593Smuzhiyun DM_TABLE_CLEAR_CMD, 238*4882a593Smuzhiyun DM_TABLE_DEPS_CMD, 239*4882a593Smuzhiyun DM_TABLE_STATUS_CMD, 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun /* Added later */ 242*4882a593Smuzhiyun DM_LIST_VERSIONS_CMD, 243*4882a593Smuzhiyun DM_TARGET_MSG_CMD, 244*4882a593Smuzhiyun DM_DEV_SET_GEOMETRY_CMD, 245*4882a593Smuzhiyun DM_DEV_ARM_POLL_CMD, 246*4882a593Smuzhiyun DM_GET_TARGET_VERSION_CMD, 247*4882a593Smuzhiyun }; 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun #define DM_IOCTL 0xfd 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun #define DM_VERSION _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl) 252*4882a593Smuzhiyun #define DM_REMOVE_ALL _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl) 253*4882a593Smuzhiyun #define DM_LIST_DEVICES _IOWR(DM_IOCTL, DM_LIST_DEVICES_CMD, struct dm_ioctl) 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun #define DM_DEV_CREATE _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl) 256*4882a593Smuzhiyun #define DM_DEV_REMOVE _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl) 257*4882a593Smuzhiyun #define DM_DEV_RENAME _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl) 258*4882a593Smuzhiyun #define DM_DEV_SUSPEND _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl) 259*4882a593Smuzhiyun #define DM_DEV_STATUS _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl) 260*4882a593Smuzhiyun #define DM_DEV_WAIT _IOWR(DM_IOCTL, DM_DEV_WAIT_CMD, struct dm_ioctl) 261*4882a593Smuzhiyun #define DM_DEV_ARM_POLL _IOWR(DM_IOCTL, DM_DEV_ARM_POLL_CMD, struct dm_ioctl) 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun #define DM_TABLE_LOAD _IOWR(DM_IOCTL, DM_TABLE_LOAD_CMD, struct dm_ioctl) 264*4882a593Smuzhiyun #define DM_TABLE_CLEAR _IOWR(DM_IOCTL, DM_TABLE_CLEAR_CMD, struct dm_ioctl) 265*4882a593Smuzhiyun #define DM_TABLE_DEPS _IOWR(DM_IOCTL, DM_TABLE_DEPS_CMD, struct dm_ioctl) 266*4882a593Smuzhiyun #define DM_TABLE_STATUS _IOWR(DM_IOCTL, DM_TABLE_STATUS_CMD, struct dm_ioctl) 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun #define DM_LIST_VERSIONS _IOWR(DM_IOCTL, DM_LIST_VERSIONS_CMD, struct dm_ioctl) 269*4882a593Smuzhiyun #define DM_GET_TARGET_VERSION _IOWR(DM_IOCTL, DM_GET_TARGET_VERSION_CMD, struct dm_ioctl) 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun #define DM_TARGET_MSG _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl) 272*4882a593Smuzhiyun #define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl) 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun #define DM_VERSION_MAJOR 4 275*4882a593Smuzhiyun #define DM_VERSION_MINOR 44 276*4882a593Smuzhiyun #define DM_VERSION_PATCHLEVEL 0 277*4882a593Smuzhiyun #define DM_VERSION_EXTRA "-ioctl (2021-02-01)" 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun /* Status bits */ 280*4882a593Smuzhiyun #define DM_READONLY_FLAG (1 << 0) /* In/Out */ 281*4882a593Smuzhiyun #define DM_SUSPEND_FLAG (1 << 1) /* In/Out */ 282*4882a593Smuzhiyun #define DM_PERSISTENT_DEV_FLAG (1 << 3) /* In */ 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun /* 285*4882a593Smuzhiyun * Flag passed into ioctl STATUS command to get table information 286*4882a593Smuzhiyun * rather than current status. 287*4882a593Smuzhiyun */ 288*4882a593Smuzhiyun #define DM_STATUS_TABLE_FLAG (1 << 4) /* In */ 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun /* 291*4882a593Smuzhiyun * Flags that indicate whether a table is present in either of 292*4882a593Smuzhiyun * the two table slots that a device has. 293*4882a593Smuzhiyun */ 294*4882a593Smuzhiyun #define DM_ACTIVE_PRESENT_FLAG (1 << 5) /* Out */ 295*4882a593Smuzhiyun #define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */ 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun /* 298*4882a593Smuzhiyun * Indicates that the buffer passed in wasn't big enough for the 299*4882a593Smuzhiyun * results. 300*4882a593Smuzhiyun */ 301*4882a593Smuzhiyun #define DM_BUFFER_FULL_FLAG (1 << 8) /* Out */ 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun /* 304*4882a593Smuzhiyun * This flag is now ignored. 305*4882a593Smuzhiyun */ 306*4882a593Smuzhiyun #define DM_SKIP_BDGET_FLAG (1 << 9) /* In */ 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun /* 309*4882a593Smuzhiyun * Set this to avoid attempting to freeze any filesystem when suspending. 310*4882a593Smuzhiyun */ 311*4882a593Smuzhiyun #define DM_SKIP_LOCKFS_FLAG (1 << 10) /* In */ 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun /* 314*4882a593Smuzhiyun * Set this to suspend without flushing queued ios. 315*4882a593Smuzhiyun * Also disables flushing uncommitted changes in the thin target before 316*4882a593Smuzhiyun * generating statistics for DM_TABLE_STATUS and DM_DEV_WAIT. 317*4882a593Smuzhiyun */ 318*4882a593Smuzhiyun #define DM_NOFLUSH_FLAG (1 << 11) /* In */ 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun /* 321*4882a593Smuzhiyun * If set, any table information returned will relate to the inactive 322*4882a593Smuzhiyun * table instead of the live one. Always check DM_INACTIVE_PRESENT_FLAG 323*4882a593Smuzhiyun * is set before using the data returned. 324*4882a593Smuzhiyun */ 325*4882a593Smuzhiyun #define DM_QUERY_INACTIVE_TABLE_FLAG (1 << 12) /* In */ 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun /* 328*4882a593Smuzhiyun * If set, a uevent was generated for which the caller may need to wait. 329*4882a593Smuzhiyun */ 330*4882a593Smuzhiyun #define DM_UEVENT_GENERATED_FLAG (1 << 13) /* Out */ 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun /* 333*4882a593Smuzhiyun * If set, rename changes the uuid not the name. Only permitted 334*4882a593Smuzhiyun * if no uuid was previously supplied: an existing uuid cannot be changed. 335*4882a593Smuzhiyun */ 336*4882a593Smuzhiyun #define DM_UUID_FLAG (1 << 14) /* In */ 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun /* 339*4882a593Smuzhiyun * If set, all buffers are wiped after use. Use when sending 340*4882a593Smuzhiyun * or requesting sensitive data such as an encryption key. 341*4882a593Smuzhiyun */ 342*4882a593Smuzhiyun #define DM_SECURE_DATA_FLAG (1 << 15) /* In */ 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun /* 345*4882a593Smuzhiyun * If set, a message generated output data. 346*4882a593Smuzhiyun */ 347*4882a593Smuzhiyun #define DM_DATA_OUT_FLAG (1 << 16) /* Out */ 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun /* 350*4882a593Smuzhiyun * If set with DM_DEV_REMOVE or DM_REMOVE_ALL this indicates that if 351*4882a593Smuzhiyun * the device cannot be removed immediately because it is still in use 352*4882a593Smuzhiyun * it should instead be scheduled for removal when it gets closed. 353*4882a593Smuzhiyun * 354*4882a593Smuzhiyun * On return from DM_DEV_REMOVE, DM_DEV_STATUS or other ioctls, this 355*4882a593Smuzhiyun * flag indicates that the device is scheduled to be removed when it 356*4882a593Smuzhiyun * gets closed. 357*4882a593Smuzhiyun */ 358*4882a593Smuzhiyun #define DM_DEFERRED_REMOVE (1 << 17) /* In/Out */ 359*4882a593Smuzhiyun 360*4882a593Smuzhiyun /* 361*4882a593Smuzhiyun * If set, the device is suspended internally. 362*4882a593Smuzhiyun */ 363*4882a593Smuzhiyun #define DM_INTERNAL_SUSPEND_FLAG (1 << 18) /* Out */ 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun #endif /* _LINUX_DM_IOCTL_H */ 366