History

block: add an API for Persistent Reservations

This commits adds a driver API and ioctls for controlling Persistent Reservations s/genericly/generically/ at the block layer. Persistent Reservations are supported by SCSI and NVMe and allow controlling who gets access to a device in a shared storage setup. Note that we add a pr_ops structure to struct block_device_operations instead of adding the members directly to avoid bloating all instances of devices that will never support Persistent Reservations.

Christoph Hellwig committed 11 years ago

Commit bbd3e061 parent d8e4bb85 files · +290 −0Browse files

Showing the changes to include/uapi (1 of 5 files). Show all

Unified · Split

include/uapi/linux/pr.h+48−0
@@ -0,0 +1,48 @@
1+#ifndef _UAPI_PR_H
2+#define _UAPI_PR_H
3+
4+enum pr_type {
5+ PR_WRITE_EXCLUSIVE = 1,
6+ PR_EXCLUSIVE_ACCESS = 2,
7+ PR_WRITE_EXCLUSIVE_REG_ONLY = 3,
8+ PR_EXCLUSIVE_ACCESS_REG_ONLY = 4,
9+ PR_WRITE_EXCLUSIVE_ALL_REGS = 5,
10+ PR_EXCLUSIVE_ACCESS_ALL_REGS = 6,
11+};
12+
13+struct pr_reservation {
14+ __u64 key;
15+ __u32 type;
16+ __u32 flags;
17+};
18+
19+struct pr_registration {
20+ __u64 old_key;
21+ __u64 new_key;
22+ __u32 flags;
23+ __u32 __pad;
24+};
25+
26+struct pr_preempt {
27+ __u64 old_key;
28+ __u64 new_key;
29+ __u32 type;
30+ __u32 flags;
31+};
32+
33+struct pr_clear {
34+ __u64 key;
35+ __u32 flags;
36+ __u32 __pad;
37+};
38+
39+#define PR_FL_IGNORE_KEY (1 << 0) /* ignore existing key */
40+
41+#define IOC_PR_REGISTER _IOW('p', 200, struct pr_registration)
42+#define IOC_PR_RESERVE _IOW('p', 201, struct pr_reservation)
43+#define IOC_PR_RELEASE _IOW('p', 202, struct pr_reservation)
44+#define IOC_PR_PREEMPT _IOW('p', 203, struct pr_preempt)
45+#define IOC_PR_PREEMPT_ABORT _IOW('p', 204, struct pr_preempt)
46+#define IOC_PR_CLEAR _IOW('p', 205, struct pr_clear)
47+
48+#endif /* _UAPI_PR_H */