Thread (18 messages) flat view 18 messages, 3 authors, 2016-09-04

Re: [PATCH 09/10] fs: add RWF_DSYNC aand RWF_SYNC

From: Michael Kerrisk (man-pages) <hidden>
Date: 2016-08-06 21:45:25
Also in: linux-fsdevel

Hello Christoph,

On 8 April 2016 at 01:52, Christoph Hellwig [off-list ref] 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.
I've added some documentation for these flags to the man page, but in
the process I realized that have a question. Do these flags provide
equivalents of O_DSYNC and O_SYNC for the I/O operation, or for the
file? What I mean is this: with, say, RWF_DSYNC, is it just the data
written by this pwritev2() call that is synced to the underlying file,
or is all dirty data for the file synced at that point?

Thanks,

Michael

quoted hunk ↗ jump to hunk
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 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..e21fe04 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                       0x00000004 /* per-IO O_SYNC */

 #endif /* _UAPI_LINUX_FS_H */
--
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help