Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-block.git] / include / linux / pr.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef LINUX_PR_H
3 #define LINUX_PR_H
4
5 #include <uapi/linux/pr.h>
6
7 struct pr_keys {
8         u32     generation;
9         u32     num_keys;
10         u64     keys[];
11 };
12
13 struct pr_held_reservation {
14         u64             key;
15         u32             generation;
16         enum pr_type    type;
17 };
18
19 struct pr_ops {
20         int (*pr_register)(struct block_device *bdev, u64 old_key, u64 new_key,
21                         u32 flags);
22         int (*pr_reserve)(struct block_device *bdev, u64 key,
23                         enum pr_type type, u32 flags);
24         int (*pr_release)(struct block_device *bdev, u64 key,
25                         enum pr_type type);
26         int (*pr_preempt)(struct block_device *bdev, u64 old_key, u64 new_key,
27                         enum pr_type type, bool abort);
28         int (*pr_clear)(struct block_device *bdev, u64 key);
29         /*
30          * pr_read_keys - Read the registered keys and return them in the
31          * pr_keys->keys array. The keys array will have been allocated at the
32          * end of the pr_keys struct, and pr_keys->num_keys must be set to the
33          * number of keys the array can hold. If there are more than can fit
34          * in the array, success will still be returned and pr_keys->num_keys
35          * will reflect the total number of keys the device contains, so the
36          * caller can retry with a larger array.
37          */
38         int (*pr_read_keys)(struct block_device *bdev,
39                         struct pr_keys *keys_info);
40         int (*pr_read_reservation)(struct block_device *bdev,
41                         struct pr_held_reservation *rsv);
42 };
43
44 #endif /* LINUX_PR_H */