/usr/include/linux
NameSizeModeActions
byteorder/-0755rm
can/-0755rm
dvb/-0755rm
hdlc/-0755rm
isdn/-0755rm
netfilter/-0755rm
netfilter_arp/-0755rm
netfilter_bridge/-0755rm
netfilter_ipv4/-0755rm
netfilter_ipv6/-0755rm
nfsd/-0755rm
raid/-0755rm
spi/-0755rm
sunrpc/-0755rm
tc_act/-0755rm
tc_ematch/-0755rm
usb/-0755rm
wimax/-0755rm
a.out.h73190644editdlrm
acct.h34900644editdlrm
adb.h10770644editdlrm
adfs_fs.h8560644editdlrm
affs_hardblocks.h14810644editdlrm
agpgart.h39250644editdlrm
aio_abi.h31120644editdlrm
apm_bios.h35440644editdlrm
arcfb.h1500644editdlrm
atalk.h9270644editdlrm
atm.h78060644editdlrm
atmapi.h8890644editdlrm
atmarp.h12330644editdlrm
atmbr2684.h32080644editdlrm
atmclip.h5130644editdlrm
atmdev.h75930644editdlrm
atmioc.h15830644editdlrm
atmlec.h25610644editdlrm
atmmpc.h41630644editdlrm
atmppp.h5760644editdlrm
atmsap.h49070644editdlrm
atmsvc.h17900644editdlrm
atm_eni.h5850644editdlrm
atm_he.h3430644editdlrm
atm_idt77105.h8920644editdlrm
atm_nicstar.h12150644editdlrm
atm_tcp.h15370644editdlrm
atm_zatm.h16060644editdlrm
audit.h158800644editdlrm
auto_fs.h23460644editdlrm
auto_fs4.h41310644editdlrm
auxvec.h13840644editdlrm
ax25.h27520644editdlrm
b1lli.h16540644editdlrm
baycom.h8200644editdlrm
bfs_fs.h18300644editdlrm
binfmts.h5650644editdlrm
blkpg.h15980644editdlrm
blktrace_api.h44730644editdlrm
blk_types.h71060644editdlrm
bpqether.h9520644editdlrm
bsg.h23850644editdlrm
can.h33260644editdlrm
capability.h105890644editdlrm
capi.h30570644editdlrm
cciss_ioctl.h58240644editdlrm
cdk.h127700644editdlrm
cdrom.h281290644editdlrm
cgroupstats.h21550644editdlrm
chio.h52800644editdlrm
cm4000_cs.h17180644editdlrm
cn_proc.h27150644editdlrm
coda.h174870644editdlrm
coda_psdev.h6790644editdlrm
coff.h124130644editdlrm
comstats.h31200644editdlrm
connector.h21290644editdlrm
const.h6820644editdlrm
cramfs_fs.h29300644editdlrm
cuda.h7690644editdlrm
cyclades.h170450644editdlrm
cycx_cfm.h29260644editdlrm
dcbnl.h221200644editdlrm
dccp.h58000644editdlrm
dlm.h25290644editdlrm
dlmconstants.h50130644editdlrm
dlm_device.h24800644editdlrm
dlm_netlink.h10640644editdlrm
dlm_plock.h8060644editdlrm
dm-ioctl.h106680644editdlrm
dm-log-userspace.h151730644editdlrm
dn.h45270644editdlrm
dqblk_xfs.h69520644editdlrm
edd.h55440644editdlrm
efs_fs_sb.h21640644editdlrm
elf-em.h18340644editdlrm
elf-fdpic.h25570644editdlrm
elf.h112360644editdlrm
elfcore.h29320644editdlrm
errno.h790644editdlrm
errqueue.h4430644editdlrm
ethtool.h341660644editdlrm
eventpoll.h13530644editdlrm
ext2_fs.h188020644editdlrm
fadvise.h8550644editdlrm
falloc.h2930644editdlrm
fb.h160160644editdlrm
fcntl.h16070644editdlrm
fd.h115630644editdlrm
fdreg.h53550644editdlrm
fib_rules.h14590644editdlrm
fiemap.h25480644editdlrm
filter.h35340644editdlrm
firewire-cdev.h250530644editdlrm
firewire-constants.h19750644editdlrm
flat.h20850644editdlrm
fs.h189100644editdlrm
fuse.h114410644editdlrm
futex.h49090644editdlrm
gameport.h8160644editdlrm
generic_serial.h8950644editdlrm
genetlink.h16830644editdlrm
gen_stats.h13040644editdlrm
gfs2_ondisk.h118140644editdlrm
gigaset_dev.h9810644editdlrm
hayesesp.h2300644editdlrm
hdlc.h5740644editdlrm
hdlcdrv.h28450644editdlrm
hdreg.h226400644editdlrm
hid.h18240644editdlrm
hiddev.h62650644editdlrm
hidraw.h12170644editdlrm
hpet.h6860644editdlrm
hysdn_if.h13190644editdlrm
i2c-dev.h24030644editdlrm
i2c.h66310644editdlrm
i2o-dev.h114880644editdlrm
i8k.h14380644editdlrm
icmp.h28920644editdlrm
icmpv6.h38310644editdlrm
if.h86730644editdlrm
if_addr.h14560644editdlrm
if_addrlabel.h6580644editdlrm
if_arcnet.h37180644editdlrm
if_arp.h61090644editdlrm
if_bonding.h40760644editdlrm
if_bridge.h38100644editdlrm
if_cablemodem.h9100644editdlrm
if_ec.h9010644editdlrm
if_eql.h12840644editdlrm
if_ether.h65390644editdlrm
if_fc.h16740644editdlrm
if_fddi.h37000644editdlrm
if_frad.h29400644editdlrm
if_hippi.h41750644editdlrm
if_infiniband.h11450644editdlrm
if_link.h120780644editdlrm
if_ltalk.h1250644editdlrm
if_packet.h35300644editdlrm
if_phonet.h3370644editdlrm
if_plip.h5960644editdlrm
if_ppp.h69380644editdlrm
if_pppol2tp.h19830644editdlrm
if_pppox.h37720644editdlrm
if_slip.h8090644editdlrm
if_strip.h7000644editdlrm
if_tr.h31990644editdlrm
if_tun.h30140644editdlrm
if_tunnel.h14590644editdlrm
if_vlan.h17080644editdlrm
igmp.h29280644editdlrm
in.h92030644editdlrm
in6.h74950644editdlrm
inet_diag.h24530644editdlrm
inotify.h28380644editdlrm
input.h275940644editdlrm
in_route.h8730644editdlrm
ioctl.h1000644editdlrm
ip.h35550644editdlrm
ip6_tunnel.h10730644editdlrm
ipc.h20380644editdlrm
ipmi.h165430644editdlrm
ipmi_msgdefs.h44770644editdlrm
ipsec.h8840644editdlrm
ipv6.h28920644editdlrm
ipv6_route.h16140644editdlrm
ipx.h18240644editdlrm
ip_vs.h125830644editdlrm
irda.h76510644editdlrm
irqnr.h930644editdlrm
isdn.h56870644editdlrm
isdnif.h23060644editdlrm
isdn_divertif.h10380644editdlrm
isdn_ppp.h18590644editdlrm
iso_fs.h64390644editdlrm
ivtv.h27260644editdlrm
ivtvfb.h11430644editdlrm
ixjuser.h251160644editdlrm
jffs2.h69490644editdlrm
joystick.h35870644editdlrm
kd.h61690644editdlrm
kdev_t.h2980644editdlrm
kernel.h24570644editdlrm
kernelcapi.h9590644editdlrm
keyboard.h126950644editdlrm
keyctl.h29840644editdlrm
kvm.h206810644editdlrm
kvm_para.h5640644editdlrm
libc-compat.h35400644editdlrm
limits.h8740644editdlrm
llc.h28350644editdlrm
loop.h21890644editdlrm
lp.h37940644editdlrm
magic.h22920644editdlrm
major.h46550644editdlrm
map_to_7segment.h71870644editdlrm
matroxfb.h14290644editdlrm
mempolicy.h20520644editdlrm
meye.h25440644editdlrm
mii.h79500644editdlrm
minix_fs.h20590644editdlrm
mman.h2300644editdlrm
mmtimer.h20540644editdlrm
mqueue.h20550644editdlrm
mroute.h38130644editdlrm
mroute6.h39910644editdlrm
msdos_fs.h58390644editdlrm
msg.h25390644editdlrm
mtio.h80800644editdlrm
nbd.h19580644editdlrm
ncp.h50550644editdlrm
ncp_fs.h33540644editdlrm
ncp_mount.h21120644editdlrm
ncp_no.h6510644editdlrm
neighbour.h40600644editdlrm
net.h20210644editdlrm
netdevice.h17710644editdlrm
netfilter.h15460644editdlrm
netfilter_arp.h3800644editdlrm
netfilter_bridge.h7350644editdlrm
netfilter_decnet.h18720644editdlrm
netfilter_ipv4.h20320644editdlrm
netfilter_ipv6.h20500644editdlrm
netlink.h49690644editdlrm
netrom.h7190644editdlrm
net_dropmon.h10910644editdlrm
net_tstamp.h34680644editdlrm
nfs.h43510644editdlrm
nfs2.h14050644editdlrm
nfs3.h22070644editdlrm
nfs4.h57630644editdlrm
nfs4_mount.h18690644editdlrm
nfsacl.h5770644editdlrm
nfs_fs.h15520644editdlrm
nfs_idmap.h22380644editdlrm
nfs_mount.h32000644editdlrm
nl80211.h1923540644editdlrm
nubus.h83660644editdlrm
nvram.h4700644editdlrm
n_r3964.h23490644editdlrm
oom.h4560644editdlrm
param.h780644editdlrm
parport.h36440644editdlrm
patchkey.h8310644editdlrm
pci.h14850644editdlrm
pci_regs.h379750644editdlrm
perf_event.h218490644editdlrm
personality.h19980644editdlrm
pfkeyv2.h101470644editdlrm
pg.h22820644editdlrm
phantom.h15900644editdlrm
phonet.h43490644editdlrm
pktcdvd.h26230644editdlrm
pkt_cls.h92930644editdlrm
pkt_sched.h108870644editdlrm
pmu.h51870644editdlrm
poll.h960644editdlrm
posix_types.h12700644editdlrm
ppdev.h31470644editdlrm
ppp-comp.h65160644editdlrm
ppp_defs.h64610644editdlrm
pps.h39390644editdlrm
prctl.h49720644editdlrm
ptp_clock.h34960644editdlrm
ptrace.h22900644editdlrm
qnx4_fs.h22650644editdlrm
qnxtypes.h5610644editdlrm
quota.h57230644editdlrm
radeonfb.h2970644editdlrm
random.h10850644editdlrm
raw.h3020644editdlrm
reboot.h12800644editdlrm
reiserfs_fs.h9070644editdlrm
reiserfs_xattr.h4650644editdlrm
resource.h20870644editdlrm
rfkill.h33840644editdlrm
romfs_fs.h11270644editdlrm
rose.h21000644editdlrm
route.h22690644editdlrm
rtc.h36960644editdlrm
rtnetlink.h153350644editdlrm
scc.h45430644editdlrm
sched.h20960644editdlrm
screen_info.h22020644editdlrm
sdla.h28370644editdlrm
selinux_netlink.h11320644editdlrm
sem.h36660644editdlrm
serial.h67800644editdlrm
serial_core.h40240644editdlrm
serial_reg.h132450644editdlrm
serio.h16880644editdlrm
shm.h21870644editdlrm
signal.h1290644editdlrm
signalfd.h10960644editdlrm
smb.h12090644editdlrm
smbno.h145200644editdlrm
smb_fs.h5350644editdlrm
smb_mount.h4680644editdlrm
snmp.h111570644editdlrm
socket.h7380644editdlrm
sockios.h59670644editdlrm
som.h54800644editdlrm
sonet.h22070644editdlrm
sonypi.h51360644editdlrm
sound.h10990644editdlrm
soundcard.h460190644editdlrm
stat.h10050644editdlrm
stddef.h6330644editdlrm
string.h1750644editdlrm
suspend_ioctls.h13680644editdlrm
swab.h62920644editdlrm
synclink.h86950644editdlrm
sysctl.h264950644editdlrm
taskstats.h69470644editdlrm
tcp.h52050644editdlrm
telephony.h90510644editdlrm
termios.h5440644editdlrm
time.h17360644editdlrm
times.h2150644editdlrm
timex.h62210644editdlrm
tiocl.h16660644editdlrm
tipc.h59100644editdlrm
tipc_config.h153700644editdlrm
toshiba.h12840644editdlrm
tty.h1280644editdlrm
types.h9910644editdlrm
udf_fs_i.h6340644editdlrm
udp.h11660644editdlrm
uinput.h51250644editdlrm
uio.h6480644editdlrm
ultrasound.h44990644editdlrm
un.h2030644editdlrm
unistd.h1570644editdlrm
usbdevice_fs.h53400644editdlrm
utime.h1520644editdlrm
utsname.h6060644editdlrm
uuid.h17690644editdlrm
version.h2810644editdlrm
veth.h4740644editdlrm
vhost.h45660644editdlrm
videodev.h105130644editdlrm
videodev2.h660710644editdlrm
videotext.h42420644editdlrm
virtio_9p.h3510644editdlrm
virtio_balloon.h12550644editdlrm
virtio_blk.h29810644editdlrm
virtio_config.h12840644editdlrm
virtio_console.h14060644editdlrm
virtio_ids.h5450644editdlrm
virtio_net.h70260644editdlrm
virtio_pci.h22630644editdlrm
virtio_ring.h44890644editdlrm
virtio_rng.h2650644editdlrm
vt.h30700644editdlrm
wait.h5800644editdlrm
wanrouter.h178360644editdlrm
watchdog.h24000644editdlrm
wimax.h83700644editdlrm
wireless.h426530644editdlrm
x25.h34180644editdlrm
xattr.h6460644editdlrm
xfrm.h105580644editdlrm
Edit: /usr/include/linux/dm-log-userspace.h (15173B)
/* * Copyright (C) 2006-2009 Red Hat, Inc. * * This file is released under the LGPL. */ #ifndef __DM_LOG_USERSPACE_H__ #define __DM_LOG_USERSPACE_H__ #include /* For DM_UUID_LEN */ /* * The device-mapper userspace log module consists of a kernel component and * a user-space component. The kernel component implements the API defined * in dm-dirty-log.h. Its purpose is simply to pass the parameters and * return values of those API functions between kernel and user-space. * * Below are defined the 'request_types' - DM_ULOG_CTR, DM_ULOG_DTR, etc. * These request types represent the different functions in the device-mapper * dirty log API. Each of these is described in more detail below. * * The user-space program must listen for requests from the kernel (representing * the various API functions) and process them. * * User-space begins by setting up the communication link (error checking * removed for clarity): * fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR); * addr.nl_family = AF_NETLINK; * addr.nl_groups = CN_IDX_DM; * addr.nl_pid = 0; * r = bind(fd, (struct sockaddr *) &addr, sizeof(addr)); * opt = addr.nl_groups; * setsockopt(fd, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, &opt, sizeof(opt)); * * User-space will then wait to receive requests form the kernel, which it * will process as described below. The requests are received in the form, * ((struct dm_ulog_request) + (additional data)). Depending on the request * type, there may or may not be 'additional data'. In the descriptions below, * you will see 'Payload-to-userspace' and 'Payload-to-kernel'. The * 'Payload-to-userspace' is what the kernel sends in 'additional data' as * necessary parameters to complete the request. The 'Payload-to-kernel' is * the 'additional data' returned to the kernel that contains the necessary * results of the request. The 'data_size' field in the dm_ulog_request * structure denotes the availability and amount of payload data. */ /* * DM_ULOG_CTR corresponds to (found in dm-dirty-log.h): * int (*ctr)(struct dm_dirty_log *log, struct dm_target *ti, * unsigned argc, char **argv); * * Payload-to-userspace: * A single string containing all the argv arguments separated by ' 's * Payload-to-kernel: * A NUL-terminated string that is the name of the device that is used * as the backing store for the log data. 'dm_get_device' will be called * on this device. ('dm_put_device' will be called on this device * automatically after calling DM_ULOG_DTR.) If there is no device needed * for log data, 'data_size' in the dm_ulog_request struct should be 0. * * The UUID contained in the dm_ulog_request structure is the reference that * will be used by all request types to a specific log. The constructor must * record this association with the instance created. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field, filling the * data field with the log device if necessary, and setting 'data_size' * appropriately. */ #define DM_ULOG_CTR 1 /* * DM_ULOG_DTR corresponds to (found in dm-dirty-log.h): * void (*dtr)(struct dm_dirty_log *log); * * Payload-to-userspace: * A single string containing all the argv arguments separated by ' 's * Payload-to-kernel: * None. ('data_size' in the dm_ulog_request struct should be 0.) * * The UUID contained in the dm_ulog_request structure is all that is * necessary to identify the log instance being destroyed. There is no * payload data. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and clearing * 'data_size' appropriately. */ #define DM_ULOG_DTR 2 /* * DM_ULOG_PRESUSPEND corresponds to (found in dm-dirty-log.h): * int (*presuspend)(struct dm_dirty_log *log); * * Payload-to-userspace: * None. * Payload-to-kernel: * None. * * The UUID contained in the dm_ulog_request structure is all that is * necessary to identify the log instance being presuspended. There is no * payload data. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and * 'data_size' appropriately. */ #define DM_ULOG_PRESUSPEND 3 /* * DM_ULOG_POSTSUSPEND corresponds to (found in dm-dirty-log.h): * int (*postsuspend)(struct dm_dirty_log *log); * * Payload-to-userspace: * None. * Payload-to-kernel: * None. * * The UUID contained in the dm_ulog_request structure is all that is * necessary to identify the log instance being postsuspended. There is no * payload data. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and * 'data_size' appropriately. */ #define DM_ULOG_POSTSUSPEND 4 /* * DM_ULOG_RESUME corresponds to (found in dm-dirty-log.h): * int (*resume)(struct dm_dirty_log *log); * * Payload-to-userspace: * None. * Payload-to-kernel: * None. * * The UUID contained in the dm_ulog_request structure is all that is * necessary to identify the log instance being resumed. There is no * payload data. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and * 'data_size' appropriately. */ #define DM_ULOG_RESUME 5 /* * DM_ULOG_GET_REGION_SIZE corresponds to (found in dm-dirty-log.h): * uint32_t (*get_region_size)(struct dm_dirty_log *log); * * Payload-to-userspace: * None. * Payload-to-kernel: * uint64_t - contains the region size * * The region size is something that was determined at constructor time. * It is returned in the payload area and 'data_size' is set to * reflect this. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field appropriately. */ #define DM_ULOG_GET_REGION_SIZE 6 /* * DM_ULOG_IS_CLEAN corresponds to (found in dm-dirty-log.h): * int (*is_clean)(struct dm_dirty_log *log, region_t region); * * Payload-to-userspace: * uint64_t - the region to get clean status on * Payload-to-kernel: * int64_t - 1 if clean, 0 otherwise * * Payload is sizeof(uint64_t) and contains the region for which the clean * status is being made. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - filling the payload with 0 (not clean) or * 1 (clean), setting 'data_size' and 'error' appropriately. */ #define DM_ULOG_IS_CLEAN 7 /* * DM_ULOG_IN_SYNC corresponds to (found in dm-dirty-log.h): * int (*in_sync)(struct dm_dirty_log *log, region_t region, * int can_block); * * Payload-to-userspace: * uint64_t - the region to get sync status on * Payload-to-kernel: * int64_t - 1 if in-sync, 0 otherwise * * Exactly the same as 'is_clean' above, except this time asking "has the * region been recovered?" vs. "is the region not being modified?" */ #define DM_ULOG_IN_SYNC 8 /* * DM_ULOG_FLUSH corresponds to (found in dm-dirty-log.h): * int (*flush)(struct dm_dirty_log *log); * * Payload-to-userspace: * If the 'integrated_flush' directive is present in the constructor * table, the payload is as same as DM_ULOG_MARK_REGION: * uint64_t [] - region(s) to mark * else * None * Payload-to-kernel: * None. * * If the 'integrated_flush' option was used during the creation of the * log, mark region requests are carried as payload in the flush request. * Piggybacking the mark requests in this way allows for fewer communications * between kernel and userspace. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and clearing * 'data_size' appropriately. */ #define DM_ULOG_FLUSH 9 /* * DM_ULOG_MARK_REGION corresponds to (found in dm-dirty-log.h): * void (*mark_region)(struct dm_dirty_log *log, region_t region); * * Payload-to-userspace: * uint64_t [] - region(s) to mark * Payload-to-kernel: * None. * * Incoming payload contains the one or more regions to mark dirty. * The number of regions contained in the payload can be determined from * 'data_size/sizeof(uint64_t)'. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and clearing * 'data_size' appropriately. */ #define DM_ULOG_MARK_REGION 10 /* * DM_ULOG_CLEAR_REGION corresponds to (found in dm-dirty-log.h): * void (*clear_region)(struct dm_dirty_log *log, region_t region); * * Payload-to-userspace: * uint64_t [] - region(s) to clear * Payload-to-kernel: * None. * * Incoming payload contains the one or more regions to mark clean. * The number of regions contained in the payload can be determined from * 'data_size/sizeof(uint64_t)'. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and clearing * 'data_size' appropriately. */ #define DM_ULOG_CLEAR_REGION 11 /* * DM_ULOG_GET_RESYNC_WORK corresponds to (found in dm-dirty-log.h): * int (*get_resync_work)(struct dm_dirty_log *log, region_t *region); * * Payload-to-userspace: * None. * Payload-to-kernel: * { * int64_t i; -- 1 if recovery necessary, 0 otherwise * uint64_t r; -- The region to recover if i=1 * } * 'data_size' should be set appropriately. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field appropriately. */ #define DM_ULOG_GET_RESYNC_WORK 12 /* * DM_ULOG_SET_REGION_SYNC corresponds to (found in dm-dirty-log.h): * void (*set_region_sync)(struct dm_dirty_log *log, * region_t region, int in_sync); * * Payload-to-userspace: * { * uint64_t - region to set sync state on * int64_t - 0 if not-in-sync, 1 if in-sync * } * Payload-to-kernel: * None. * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and clearing * 'data_size' appropriately. */ #define DM_ULOG_SET_REGION_SYNC 13 /* * DM_ULOG_GET_SYNC_COUNT corresponds to (found in dm-dirty-log.h): * region_t (*get_sync_count)(struct dm_dirty_log *log); * * Payload-to-userspace: * None. * Payload-to-kernel: * uint64_t - the number of in-sync regions * * No incoming payload. Kernel-bound payload contains the number of * regions that are in-sync (in a size_t). * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and * 'data_size' appropriately. */ #define DM_ULOG_GET_SYNC_COUNT 14 /* * DM_ULOG_STATUS_INFO corresponds to (found in dm-dirty-log.h): * int (*status)(struct dm_dirty_log *log, STATUSTYPE_INFO, * char *result, unsigned maxlen); * * Payload-to-userspace: * None. * Payload-to-kernel: * Character string containing STATUSTYPE_INFO * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and * 'data_size' appropriately. */ #define DM_ULOG_STATUS_INFO 15 /* * DM_ULOG_STATUS_TABLE corresponds to (found in dm-dirty-log.h): * int (*status)(struct dm_dirty_log *log, STATUSTYPE_TABLE, * char *result, unsigned maxlen); * * Payload-to-userspace: * None. * Payload-to-kernel: * Character string containing STATUSTYPE_TABLE * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and * 'data_size' appropriately. */ #define DM_ULOG_STATUS_TABLE 16 /* * DM_ULOG_IS_REMOTE_RECOVERING corresponds to (found in dm-dirty-log.h): * int (*is_remote_recovering)(struct dm_dirty_log *log, region_t region); * * Payload-to-userspace: * uint64_t - region to determine recovery status on * Payload-to-kernel: * { * int64_t is_recovering; -- 0 if no, 1 if yes * uint64_t in_sync_hint; -- lowest region still needing resync * } * * When the request has been processed, user-space must return the * dm_ulog_request to the kernel - setting the 'error' field and * 'data_size' appropriately. */ #define DM_ULOG_IS_REMOTE_RECOVERING 17 /* * (DM_ULOG_REQUEST_MASK & request_type) to get the request type * * Payload-to-userspace: * A single string containing all the argv arguments separated by ' 's * Payload-to-kernel: * None. ('data_size' in the dm_ulog_request struct should be 0.) * * We are reserving 8 bits of the 32-bit 'request_type' field for the * various request types above. The remaining 24-bits are currently * set to zero and are reserved for future use and compatibility concerns. * * User-space should always use DM_ULOG_REQUEST_TYPE to acquire the * request type from the 'request_type' field to maintain forward compatibility. */ #define DM_ULOG_REQUEST_MASK 0xFF #define DM_ULOG_REQUEST_TYPE(request_type) \ (DM_ULOG_REQUEST_MASK & (request_type)) /* * DM_ULOG_REQUEST_VERSION is incremented when there is a * change to the way information is passed between kernel * and userspace. This could be a structure change of * dm_ulog_request or a change in the way requests are * issued/handled. Changes are outlined here: * version 1: Initial implementation * version 2: DM_ULOG_CTR allowed to return a string containing a * device name that is to be registered with DM via * 'dm_get_device'. * version 3: DM_ULOG_FLUSH is capable of carrying payload for marking * regions. This "integrated flush" reduces the number of * requests between the kernel and userspace by effectively * merging 'mark' and 'flush' requests. A constructor table * argument ('integrated_flush') is required to turn this * feature on, so it is backwards compatible with older * userspace versions. */ #define DM_ULOG_REQUEST_VERSION 3 struct dm_ulog_request { /* * The local unique identifier (luid) and the universally unique * identifier (uuid) are used to tie a request to a specific * mirror log. A single machine log could probably make due with * just the 'luid', but a cluster-aware log must use the 'uuid' and * the 'luid'. The uuid is what is required for node to node * communication concerning a particular log, but the 'luid' helps * differentiate between logs that are being swapped and have the * same 'uuid'. (Think "live" and "inactive" device-mapper tables.) */ uint64_t luid; char uuid[DM_UUID_LEN]; char padding[3]; /* Padding because DM_UUID_LEN = 129 */ uint32_t version; /* See DM_ULOG_REQUEST_VERSION */ int32_t error; /* Used to report back processing errors */ uint32_t seq; /* Sequence number for request */ uint32_t request_type; /* DM_ULOG_* defined above */ uint32_t data_size; /* How much data (not including this struct) */ char data[0]; }; #endif /* __DM_LOG_USERSPACE_H__ */