Blame view

Documentation/block/pr.txt 3.61 KB
bbd3e0643   Christoph Hellwig   block: add an API...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
  
  Block layer support for Persistent Reservations
  ===============================================
  
  The Linux kernel supports a user space interface for simplified
  Persistent Reservations which map to block devices that support
  these (like SCSI). Persistent Reservations allow restricting
  access to block devices to specific initiators in a shared storage
  setup.
  
  This document gives a general overview of the support ioctl commands.
  For a more detailed reference please refer the the SCSI Primary
  Commands standard, specifically the section on Reservations and the
  "PERSISTENT RESERVE IN" and "PERSISTENT RESERVE OUT" commands.
  
  All implementations are expected to ensure the reservations survive
  a power loss and cover all connections in a multi path environment.
  These behaviors are optional in SPC but will be automatically applied
  by Linux.
  
  
  The following types of reservations are supported:
  --------------------------------------------------
  
   - PR_WRITE_EXCLUSIVE
  
  	Only the initiator that owns the reservation can write to the
  	device.  Any initiator can read from the device.
  
   - PR_EXCLUSIVE_ACCESS
  
  	Only the initiator that owns the reservation can access the
  	device.
  
   - PR_WRITE_EXCLUSIVE_REG_ONLY
  
  	Only initiators with a registered key can write to the device,
  	Any initiator can read from the device.
  
   - PR_EXCLUSIVE_ACCESS_REG_ONLY
  
  	Only initiators with a registered key can access the device.
  
   - PR_WRITE_EXCLUSIVE_ALL_REGS
  
  	Only initiators with a registered key can write to the device,
  	Any initiator can read from the device.
  	All initiators with a registered key are considered reservation
  	holders.
  	Please reference the SPC spec on the meaning of a reservation
  	holder if you want to use this type. 
  
   - PR_EXCLUSIVE_ACCESS_ALL_REGS
  
  	Only initiators with a registered key can access the device.
  	All initiators with a registered key are considered reservation
  	holders.
  	Please reference the SPC spec on the meaning of a reservation
  	holder if you want to use this type. 
  
  
  The following ioctl are supported:
  ----------------------------------
  
  1. IOC_PR_REGISTER
  
  This ioctl command registers a new reservation if the new_key argument
  is non-null.  If no existing reservation exists old_key must be zero,
  if an existing reservation should be replaced old_key must contain
  the old reservation key.
  
  If the new_key argument is 0 it unregisters the existing reservation passed
  in old_key.
  
  
  2. IOC_PR_RESERVE
  
  This ioctl command reserves the device and thus restricts access for other
  devices based on the type argument.  The key argument must be the existing
  reservation key for the device as acquired by the IOC_PR_REGISTER,
  IOC_PR_REGISTER_IGNORE, IOC_PR_PREEMPT or IOC_PR_PREEMPT_ABORT commands.
  
  
  3. IOC_PR_RELEASE
  
  This ioctl command releases the reservation specified by key and flags
  and thus removes any access restriction implied by it.
  
  
  4. IOC_PR_PREEMPT
  
  This ioctl command releases the existing reservation referred to by
  old_key and replaces it with a a new reservation of type for the
  reservation key new_key.
  
  
  5. IOC_PR_PREEMPT_ABORT
  
  This ioctl command works like IOC_PR_PREEMPT except that it also aborts
  any outstanding command sent over a connection identified by old_key.
  
  6. IOC_PR_CLEAR
  
  This ioctl command unregisters both key and any other reservation key
  registered with the device and drops any existing reservation.
  
  
  Flags
  -----
  
  All the ioctls have a flag field.  Currently only one flag is supported:
  
   - PR_FL_IGNORE_KEY
  
  	Ignore the existing reservation key.  This is commonly supported for
  	IOC_PR_REGISTER, and some implementation may support the flag for
  	IOC_PR_RESERVE.
  
  For all unknown flags the kernel will return -EOPNOTSUPP.