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.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
Christoph Hellwig 2015-10-15 14:10:48 +02:00 committed by Jens Axboe
parent d8e4bb8103
commit bbd3e06436
5 changed files with 290 additions and 0 deletions

18
include/linux/pr.h Normal file
View file

@ -0,0 +1,18 @@
#ifndef LINUX_PR_H
#define LINUX_PR_H
#include <uapi/linux/pr.h>
struct pr_ops {
int (*pr_register)(struct block_device *bdev, u64 old_key, u64 new_key,
u32 flags);
int (*pr_reserve)(struct block_device *bdev, u64 key,
enum pr_type type, u32 flags);
int (*pr_release)(struct block_device *bdev, u64 key,
enum pr_type type);
int (*pr_preempt)(struct block_device *bdev, u64 old_key, u64 new_key,
enum pr_type type, bool abort);
int (*pr_clear)(struct block_device *bdev, u64 key);
};
#endif /* LINUX_PR_H */