Jens Axboe <axboe@xxxxxxxxx> writes: > From: Christoph Hellwig <hch@xxxxxx> > > This new methods is used to explicitly poll for I/O completion for an > iocb. It must be called for any iocb submitted asynchronously (that > is with a non-null ki_complete) which has the IOCB_HIPRI flag set. > > The method is assisted by a new ki_cookie field in struct iocb to store > the polling cookie. > > TODO: we can probably union ki_cookie with the existing hint and I/O > priority fields to avoid struct kiocb growth. Please document return values. Thanks, Jeff > > Reviewed-by: Johannes Thumshirn <jthumshirn@xxxxxxx> > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> > --- > Documentation/filesystems/vfs.txt | 3 +++ > include/linux/fs.h | 2 ++ > 2 files changed, 5 insertions(+) > > diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt > index 5f71a252e2e0..d9dc5e4d82b9 100644 > --- a/Documentation/filesystems/vfs.txt > +++ b/Documentation/filesystems/vfs.txt > @@ -857,6 +857,7 @@ struct file_operations { > ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); > ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); > ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); > + int (*iopoll)(struct kiocb *kiocb, bool spin); > int (*iterate) (struct file *, struct dir_context *); > int (*iterate_shared) (struct file *, struct dir_context *); > __poll_t (*poll) (struct file *, struct poll_table_struct *); > @@ -902,6 +903,8 @@ otherwise noted. > > write_iter: possibly asynchronous write with iov_iter as source > > + iopoll: called when aio wants to poll for completions on HIPRI iocbs > + > iterate: called when the VFS needs to read the directory contents > > iterate_shared: called when the VFS needs to read the directory contents > diff --git a/include/linux/fs.h b/include/linux/fs.h > index a1ab233e6469..6a5f71f8ae06 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -310,6 +310,7 @@ struct kiocb { > int ki_flags; > u16 ki_hint; > u16 ki_ioprio; /* See linux/ioprio.h */ > + unsigned int ki_cookie; /* for ->iopoll */ > } __randomize_layout; > > static inline bool is_sync_kiocb(struct kiocb *kiocb) > @@ -1781,6 +1782,7 @@ struct file_operations { > ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); > ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); > ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); > + int (*iopoll)(struct kiocb *kiocb, bool spin); > int (*iterate) (struct file *, struct dir_context *); > int (*iterate_shared) (struct file *, struct dir_context *); > __poll_t (*poll) (struct file *, struct poll_table_struct *);