On Mar 29, 2016, at 11:37 AM, Christoph Hellwig <hch@xxxxxx> wrote: > > This is the per-I/O equivalent of O_DSYNC and O_SYNC, and very useful for > all kinds of file servers and storage targets. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > fs/read_write.c | 6 +++++- > include/uapi/linux/fs.h | 2 ++ > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/fs/read_write.c b/fs/read_write.c > index cf377cf..3729d8d 100644 > --- a/fs/read_write.c > +++ b/fs/read_write.c > @@ -698,12 +698,16 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter, > struct kiocb kiocb; > ssize_t ret; > > - if (flags & ~RWF_HIPRI) > + if (flags & ~(RWF_HIPRI | RWF_DSYNC | RWF_SYNC)) > return -EOPNOTSUPP; > > init_sync_kiocb(&kiocb, filp); > if (flags & RWF_HIPRI) > kiocb.ki_flags |= IOCB_HIPRI; > + if (flags & RWF_DSYNC) > + kiocb.ki_flags |= IOCB_DSYNC; > + if (flags & RWF_SYNC) > + kiocb.ki_flags |= (IOCB_DSYNC | IOCB_SYNC); > kiocb.ki_pos = *ppos; > > ret = fn(&kiocb, iter); > diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h > index a079d50..7f067fe 100644 > --- a/include/uapi/linux/fs.h > +++ b/include/uapi/linux/fs.h > @@ -324,5 +324,7 @@ struct fscrypt_policy { > > /* flags for preadv2/pwritev2: */ > #define RWF_HIPRI 0x00000001 /* high priority request, poll if possible */ > +#define RWF_DSYNC 0x00000002 /* per-IO O_DSYNC */ > +#define RWF_SYNC 0x00000002 /* per-IO O_SYNC */ Is it right that both of these flags are defined as "2"? From the code they look like they should be different values. Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail