1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (C) 2001 - 2003 Sistina Software (UK) Limited. 3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (C) 2004 - 2009 Red Hat, Inc. All rights reserved. 4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This file is released under the LGPL. 6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _LINUX_DM_IOCTL_V4_H 9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _LINUX_DM_IOCTL_V4_H 10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h> 12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DIR "mapper" /* Slashes not supported */ 14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_CONTROL_NODE "control" 15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_MAX_TYPE_NAME 16 16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_NAME_LEN 128 17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_UUID_LEN 129 18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * A traditional ioctl interface for the device mapper. 21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Each device can have two tables associated with it, an 23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 'active' table which is the one currently used by io passing 24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * through the device, and an 'inactive' one which is a table 25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * that is being prepared as a replacement for the 'active' one. 26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_VERSION: 28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Just get the version information for the ioctl interface. 29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_REMOVE_ALL: 31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Remove all dm devices, destroy all tables. Only really used 32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * for debug. 33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_LIST_DEVICES: 35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Get a list of all the dm device names. 36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_CREATE: 38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Create a new device, neither the 'active' or 'inactive' table 39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * slots will be filled. The device will be in suspended state 40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * after creation, however any io to the device will get errored 41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * since it will be out-of-bounds. 42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_REMOVE: 44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Remove a device, destroy any tables. 45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_RENAME: 47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Rename a device or set its uuid if none was previously supplied. 48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_SUSPEND: 50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This performs both suspend and resume, depending which flag is 51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * passed in. 52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Suspend: This command will not return until all pending io to 53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the device has completed. Further io will be deferred until 54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the device is resumed. 55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Resume: It is no longer an error to issue this command on an 56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * unsuspended device. If a table is present in the 'inactive' 57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * slot, it will be moved to the active slot, then the old table 58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * from the active slot will be _destroyed_. Finally the device 59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * is resumed. 60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_STATUS: 62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Retrieves the status for the table in the 'active' slot. 63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_WAIT: 65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Wait for a significant event to occur to the device. This 66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * could either be caused by an event triggered by one of the 67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * targets of the table in the 'active' slot, or a table change. 68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_TABLE_LOAD: 70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Load a table into the 'inactive' slot for the device. The 71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * device does _not_ need to be suspended prior to this command. 72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_TABLE_CLEAR: 74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Destroy any table in the 'inactive' slot (ie. abort). 75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_TABLE_DEPS: 77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Return a set of device dependencies for the 'active' table. 78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_TABLE_STATUS: 80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Return the targets status for the 'active' table. 81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_TARGET_MSG: 83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Pass a message string to the target at a specific offset of a device. 84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_SET_GEOMETRY: 86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Set the geometry of a device by passing in a string in this format: 87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * "cylinders heads sectors_per_track start_sector" 89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Beware that CHS geometry is nearly obsolete and only provided 91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * for compatibility with dm devices that can be booted by a PC 92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * BIOS. See struct hd_geometry for range limits. Also note that 93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the geometry is erased if the device size changes. 94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * All ioctl arguments consist of a single chunk of memory, with 98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * this structure at the start. If a uuid is specified any 99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * lookup (eg. for a DM_INFO) will be done on that, *not* the 100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * name. 101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_ioctl { 103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* 104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * The version number is made up of three parts: 105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * major - no backward or forward compatibility, 106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * minor - only backwards compatible, 107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * patch - both backwards and forwards compatible. 108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * All clients of the ioctl interface should fill in the 110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * version number of the interface that they were 111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * compiled with. 112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * All recognised ioctl commands (ie. those that don't 114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * return -ENOTTY) fill out this field, even if the 115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * command failed. 116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 version[3]; /* in/out */ 118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 data_size; /* total size of data passed in 119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * including this struct */ 120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 data_start; /* offset to start of data 122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * relative to start of this struct */ 123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 target_count; /* in/out */ 125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __s32 open_count; /* out */ 126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 flags; /* in/out */ 127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* 129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * event_nr holds either the event number (input and output) or the 130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * udev cookie value (input only). 131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * The DM_DEV_WAIT ioctl takes an event number as input. 132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * The DM_SUSPEND, DM_DEV_REMOVE and DM_DEV_RENAME ioctls 133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * use the field as a cookie to return in the DM_COOKIE 134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * variable with the uevents they issue. 135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * For output, the ioctls return the event number, not the cookie. 136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 event_nr; /* in/out */ 138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 padding; 139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 dev; /* in/out */ 141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng char name[DM_NAME_LEN]; /* device name */ 143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng char uuid[DM_UUID_LEN]; /* unique identifier for 144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the block device */ 145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng char data[7]; /* padding or data */ 146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Used to specify tables. These structures appear after the 150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * dm_ioctl. 151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_target_spec { 153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 sector_start; 154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 length; 155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __s32 status; /* used when reading from kernel only */ 156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* 158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Location of the next dm_target_spec. 159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * - When specifying targets on a DM_TABLE_LOAD command, this value is 160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the number of bytes from the start of the "current" dm_target_spec 161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * to the start of the "next" dm_target_spec. 162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * - When retrieving targets on a DM_TABLE_STATUS command, this value 163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * is the number of bytes from the start of the first dm_target_spec 164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * (that follows the dm_ioctl struct) to the start of the "next" 165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * dm_target_spec. 166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 next; 168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng char target_type[DM_MAX_TYPE_NAME]; 170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* 172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Parameter string starts immediately after this object. 173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Be careful to add padding after string to ensure correct 174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * alignment of subsequent dm_target_spec. 175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Used to retrieve the target dependencies. 180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_target_deps { 182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 count; /* Array size */ 183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 padding; /* unused */ 184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 dev[0]; /* out */ 185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Used to get a list of all dm devices. 189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_name_list { 191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 dev; 192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 next; /* offset to the next record from 193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng the _start_ of this */ 194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng char name[0]; 195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Used to retrieve the target versions 199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_target_versions { 201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 next; 202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 version[3]; 203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng char name[0]; 205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Used to pass message to a target 209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 210224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_target_msg { 211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 sector; /* Device sector */ 212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng char message[0]; 214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If you change this make sure you make the corresponding change 218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * to dm-ioctl.c:lookup_ioctl() 219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum { 221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* Top level cmds */ 222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_VERSION_CMD = 0, 223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_REMOVE_ALL_CMD, 224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_LIST_DEVICES_CMD, 225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* device level cmds */ 227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_DEV_CREATE_CMD, 228224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_DEV_REMOVE_CMD, 229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_DEV_RENAME_CMD, 230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_DEV_SUSPEND_CMD, 231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_DEV_STATUS_CMD, 232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_DEV_WAIT_CMD, 233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* Table level cmds */ 235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_TABLE_LOAD_CMD, 236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_TABLE_CLEAR_CMD, 237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_TABLE_DEPS_CMD, 238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_TABLE_STATUS_CMD, 239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng /* Added later */ 241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_LIST_VERSIONS_CMD, 242224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_TARGET_MSG_CMD, 243224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng DM_DEV_SET_GEOMETRY_CMD 244224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 245224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 246224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_IOCTL 0xfd 247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_VERSION _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl) 249224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_REMOVE_ALL _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl) 250224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_LIST_DEVICES _IOWR(DM_IOCTL, DM_LIST_DEVICES_CMD, struct dm_ioctl) 251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_CREATE _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl) 253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_REMOVE _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl) 254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_RENAME _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl) 255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_SUSPEND _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl) 256224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_STATUS _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl) 257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_WAIT _IOWR(DM_IOCTL, DM_DEV_WAIT_CMD, struct dm_ioctl) 258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_TABLE_LOAD _IOWR(DM_IOCTL, DM_TABLE_LOAD_CMD, struct dm_ioctl) 260224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_TABLE_CLEAR _IOWR(DM_IOCTL, DM_TABLE_CLEAR_CMD, struct dm_ioctl) 261224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_TABLE_DEPS _IOWR(DM_IOCTL, DM_TABLE_DEPS_CMD, struct dm_ioctl) 262224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_TABLE_STATUS _IOWR(DM_IOCTL, DM_TABLE_STATUS_CMD, struct dm_ioctl) 263224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 264224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_LIST_VERSIONS _IOWR(DM_IOCTL, DM_LIST_VERSIONS_CMD, struct dm_ioctl) 265224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 266224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_TARGET_MSG _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl) 267224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl) 268224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 269224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_VERSION_MAJOR 4 270e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define DM_VERSION_MINOR 27 271224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_VERSION_PATCHLEVEL 0 272e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define DM_VERSION_EXTRA "-ioctl (2013-10-30)" 273224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 274224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Status bits */ 275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_READONLY_FLAG (1 << 0) /* In/Out */ 276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_SUSPEND_FLAG (1 << 1) /* In/Out */ 277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_PERSISTENT_DEV_FLAG (1 << 3) /* In */ 278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Flag passed into ioctl STATUS command to get table information 281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * rather than current status. 282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_STATUS_TABLE_FLAG (1 << 4) /* In */ 284224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 285224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Flags that indicate whether a table is present in either of 287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the two table slots that a device has. 288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_ACTIVE_PRESENT_FLAG (1 << 5) /* Out */ 290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */ 291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Indicates that the buffer passed in wasn't big enough for the 294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * results. 295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_BUFFER_FULL_FLAG (1 << 8) /* Out */ 297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This flag is now ignored. 300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_SKIP_BDGET_FLAG (1 << 9) /* In */ 302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Set this to avoid attempting to freeze any filesystem when suspending. 305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_SKIP_LOCKFS_FLAG (1 << 10) /* In */ 307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Set this to suspend without flushing queued ios. 310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Also disables flushing uncommitted changes in the thin target before 311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * generating statistics for DM_TABLE_STATUS and DM_DEV_WAIT. 312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_NOFLUSH_FLAG (1 << 11) /* In */ 314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If set, any table information returned will relate to the inactive 317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * table instead of the live one. Always check DM_INACTIVE_PRESENT_FLAG 318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * is set before using the data returned. 319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_QUERY_INACTIVE_TABLE_FLAG (1 << 12) /* In */ 321224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 322224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 323224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If set, a uevent was generated for which the caller may need to wait. 324224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 325224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_UEVENT_GENERATED_FLAG (1 << 13) /* Out */ 326224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 327224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 328224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If set, rename changes the uuid not the name. Only permitted 329224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * if no uuid was previously supplied: an existing uuid cannot be changed. 330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_UUID_FLAG (1 << 14) /* In */ 332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If set, all buffers are wiped after use. Use when sending 335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * or requesting sensitive data such as an encryption key. 336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_SECURE_DATA_FLAG (1 << 15) /* In */ 338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If set, a message generated output data. 341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DATA_OUT_FLAG (1 << 16) /* Out */ 343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 344e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/* 345e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * If set with DM_DEV_REMOVE or DM_REMOVE_ALL this indicates that if 346e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * the device cannot be removed immediately because it is still in use 347e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * it should instead be scheduled for removal when it gets closed. 348e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * 349e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * On return from DM_DEV_REMOVE, DM_DEV_STATUS or other ioctls, this 350e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * flag indicates that the device is scheduled to be removed when it 351e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * gets closed. 352e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */ 353e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define DM_DEFERRED_REMOVE (1 << 17) /* In/Out */ 354e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl 355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _LINUX_DM_IOCTL_H */ 356