Block protocol: add user endpoint to IOCTL request
I/O control requests now come with the endpoint of the user process that initiated the ioctl(2) call. It is stored in a new BDEV_USER field, which is an alias for BDEV_FLAGS. The contents of this field are to be used only in highly specific situations. It should be preserved (not replaced!) by services that forward IOCTL requests, and may be set to NONE for service-initiated IOCTL requests. Change-Id: I68a01b9ce43eca00e61b985a9cf87f55ba683de4
This commit is contained in:
@@ -16,7 +16,8 @@ extern ssize_t bdev_gather(dev_t dev, u64_t pos, iovec_t *vec, int count,
|
||||
int flags);
|
||||
extern ssize_t bdev_scatter(dev_t dev, u64_t pos, iovec_t *vec, int count,
|
||||
int flags);
|
||||
extern int bdev_ioctl(dev_t dev, int request, void *buf);
|
||||
extern int bdev_ioctl(dev_t dev, int request, void *buf,
|
||||
endpoint_t user_endpt);
|
||||
|
||||
/* Asynchronous API. */
|
||||
typedef int bdev_id_t;
|
||||
@@ -36,7 +37,7 @@ extern bdev_id_t bdev_gather_asyn(dev_t dev, u64_t pos, iovec_t *vec,
|
||||
extern bdev_id_t bdev_scatter_asyn(dev_t dev, u64_t pos, iovec_t *vec,
|
||||
int count, int flags, bdev_callback_t callback, bdev_param_t param);
|
||||
extern bdev_id_t bdev_ioctl_asyn(dev_t dev, int request, void *buf,
|
||||
bdev_callback_t callback, bdev_param_t param);
|
||||
endpoint_t user_endpt, bdev_callback_t callback, bdev_param_t param);
|
||||
|
||||
extern int bdev_wait_asyn(bdev_id_t id);
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ struct blockdriver {
|
||||
ssize_t (*bdr_transfer)(devminor_t minor, int do_write, u64_t pos,
|
||||
endpoint_t endpt, iovec_t *iov, unsigned int count, int flags);
|
||||
int (*bdr_ioctl)(devminor_t minor, unsigned int request, endpoint_t endpt,
|
||||
cp_grant_id_t grant);
|
||||
cp_grant_id_t grant, endpoint_t user_endpt);
|
||||
void (*bdr_cleanup)(void);
|
||||
struct device *(*bdr_part)(devminor_t minor);
|
||||
void (*bdr_geometry)(devminor_t minor, struct part_geom *part);
|
||||
|
||||
@@ -1325,6 +1325,7 @@
|
||||
#define BDEV_COUNT m10_i2 /* number of bytes or elements in transfer */
|
||||
#define BDEV_GRANT m10_i3 /* grant ID of buffer or vector */
|
||||
#define BDEV_FLAGS m10_i4 /* transfer flags */
|
||||
#define BDEV_USER m10_i4 /* user endpoint requesting I/O control */
|
||||
#define BDEV_ID m10_l1 /* opaque request ID */
|
||||
#define BDEV_POS_LO m10_l2 /* transfer position (low bits) */
|
||||
#define BDEV_POS_HI m10_l3 /* transfer position (high bits) */
|
||||
|
||||
Reference in New Issue
Block a user