From: John Garry <[email protected]>

This is in preparation for adding atomic write support for buffered
IO. Since the limits reported by FS for atomic write buffered IO
could be different from direct IO, rename STATX_WRITE_ATOMIC ->
STATX_WRITE_ATOMIC_DIO and STATX_ATTR_WRITE_ATOMIC ->
STATX_ATTR_WRITE_ATOMIC_DIO, to make it clear that they are only
relevant to direct IO.

Later we will add a separate flag for reporting atomic write with
buffered IO

Co-developed-by: Ojaswin Mujoo <[email protected]>
Signed-off-by: Ojaswin Mujoo <[email protected]>
Signed-off-by: John Garry <[email protected]>
---
 Documentation/filesystems/ext4/atomic_writes.rst  | 4 ++--
 block/bdev.c                                      | 4 ++--
 fs/ext4/inode.c                                   | 2 +-
 fs/stat.c                                         | 8 ++++----
 fs/xfs/xfs_iops.c                                 | 2 +-
 include/trace/misc/fs.h                           | 2 +-
 include/uapi/linux/stat.h                         | 8 ++++++--
 tools/include/uapi/linux/stat.h                   | 8 ++++++--
 tools/perf/trace/beauty/include/uapi/linux/stat.h | 8 ++++++--
 9 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/Documentation/filesystems/ext4/atomic_writes.rst 
b/Documentation/filesystems/ext4/atomic_writes.rst
index ae8995740aa8..108c9e9cb977 100644
--- a/Documentation/filesystems/ext4/atomic_writes.rst
+++ b/Documentation/filesystems/ext4/atomic_writes.rst
@@ -189,7 +189,7 @@ The write must be aligned to the filesystem's block size 
and not exceed the
 filesystem's maximum atomic write unit size.
 See ``generic_atomic_write_valid()`` for more details.
 
-``statx()`` system call with ``STATX_WRITE_ATOMIC`` flag can provide following
+``statx()`` system call with ``STATX_WRITE_ATOMIC_DIO`` flag can provide 
following
 details:
 
  * ``stx_atomic_write_unit_min``: Minimum size of an atomic write request.
@@ -198,7 +198,7 @@ details:
    separate memory buffers that can be gathered into a write operation
    (e.g., the iovcnt parameter for IOV_ITER). Currently, this is always set to 
one.
 
-The STATX_ATTR_WRITE_ATOMIC flag in ``statx->attributes`` is set if atomic
+The STATX_ATTR_WRITE_ATOMIC_DIO flag in ``statx->attributes`` is set if atomic
 writes are supported.
 
 .. _atomic_write_bdev_support:
diff --git a/block/bdev.c b/block/bdev.c
index 810707cca970..3bc90d5feb4c 100644
--- a/block/bdev.c
+++ b/block/bdev.c
@@ -1308,7 +1308,7 @@ void sync_bdevs(bool wait)
 }
 
 /*
- * Handle STATX_{DIOALIGN, WRITE_ATOMIC} for block devices.
+ * Handle STATX_{DIOALIGN, WRITE_ATOMIC_DIO} for block devices.
  */
 void bdev_statx(const struct path *path, struct kstat *stat, u32 request_mask)
 {
@@ -1330,7 +1330,7 @@ void bdev_statx(const struct path *path, struct kstat 
*stat, u32 request_mask)
                stat->result_mask |= STATX_DIOALIGN;
        }
 
-       if (request_mask & STATX_WRITE_ATOMIC && bdev_can_atomic_write(bdev)) {
+       if (request_mask & STATX_WRITE_ATOMIC_DIO && 
bdev_can_atomic_write(bdev)) {
                struct request_queue *bd_queue = bdev->bd_queue;
 
                generic_fill_statx_atomic_writes(stat,
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index f9e4ac87211e..9555149a8ba6 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -6097,7 +6097,7 @@ int ext4_getattr(struct mnt_idmap *idmap, const struct 
path *path,
                }
        }
 
-       if ((request_mask & STATX_WRITE_ATOMIC) && S_ISREG(inode->i_mode)) {
+       if ((request_mask & STATX_WRITE_ATOMIC_DIO) && S_ISREG(inode->i_mode)) {
                struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
                unsigned int awu_min = 0, awu_max = 0;
 
diff --git a/fs/stat.c b/fs/stat.c
index 6c79661e1b96..7eb2a247ab67 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -138,7 +138,7 @@ EXPORT_SYMBOL(generic_fill_statx_attr);
  * @unit_max:  Maximum supported atomic write length in bytes
  * @unit_max_opt: Optimised maximum supported atomic write length in bytes
  *
- * Fill in the STATX{_ATTR}_WRITE_ATOMIC flags in the kstat structure from
+ * Fill in the STATX{_ATTR}_WRITE_ATOMIC_DIO flags in the kstat structure from
  * atomic write unit_min and unit_max values.
  */
 void generic_fill_statx_atomic_writes(struct kstat *stat,
@@ -147,10 +147,10 @@ void generic_fill_statx_atomic_writes(struct kstat *stat,
                                      unsigned int unit_max_opt)
 {
        /* Confirm that the request type is known */
-       stat->result_mask |= STATX_WRITE_ATOMIC;
+       stat->result_mask |= STATX_WRITE_ATOMIC_DIO;
 
        /* Confirm that the file attribute type is known */
-       stat->attributes_mask |= STATX_ATTR_WRITE_ATOMIC;
+       stat->attributes_mask |= STATX_ATTR_WRITE_ATOMIC_DIO;
 
        if (unit_min) {
                stat->atomic_write_unit_min = unit_min;
@@ -160,7 +160,7 @@ void generic_fill_statx_atomic_writes(struct kstat *stat,
                stat->atomic_write_segments_max = 1;
 
                /* Confirm atomic writes are actually supported */
-               stat->attributes |= STATX_ATTR_WRITE_ATOMIC;
+               stat->attributes |= STATX_ATTR_WRITE_ATOMIC_DIO;
        }
 }
 EXPORT_SYMBOL_GPL(generic_fill_statx_atomic_writes);
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
index caff0125faea..f41fcdd3043b 100644
--- a/fs/xfs/xfs_iops.c
+++ b/fs/xfs/xfs_iops.c
@@ -741,7 +741,7 @@ xfs_vn_getattr(
        case S_IFREG:
                if (request_mask & (STATX_DIOALIGN | STATX_DIO_READ_ALIGN))
                        xfs_report_dioalign(ip, stat);
-               if (request_mask & STATX_WRITE_ATOMIC)
+               if (request_mask & STATX_WRITE_ATOMIC_DIO)
                        xfs_report_atomic_write(ip, stat);
                fallthrough;
        default:
diff --git a/include/trace/misc/fs.h b/include/trace/misc/fs.h
index 7ead1c61f0cb..19ea9339b9bd 100644
--- a/include/trace/misc/fs.h
+++ b/include/trace/misc/fs.h
@@ -161,5 +161,5 @@
                { STATX_DIOALIGN,       "DIOALIGN" },           \
                { STATX_MNT_ID_UNIQUE,  "MNT_ID_UNIQUE" },      \
                { STATX_SUBVOL,         "SUBVOL" },             \
-               { STATX_WRITE_ATOMIC,   "WRITE_ATOMIC" },       \
+               { STATX_WRITE_ATOMIC_DIO,       "WRITE_ATOMIC_DIO" },   \
                { STATX_DIO_READ_ALIGN, "DIO_READ_ALIGN" })
diff --git a/include/uapi/linux/stat.h b/include/uapi/linux/stat.h
index 1686861aae20..57f558be933e 100644
--- a/include/uapi/linux/stat.h
+++ b/include/uapi/linux/stat.h
@@ -217,7 +217,9 @@ struct statx {
 #define STATX_DIOALIGN         0x00002000U     /* Want/got direct I/O 
alignment info */
 #define STATX_MNT_ID_UNIQUE    0x00004000U     /* Want/got extended 
stx_mount_id */
 #define STATX_SUBVOL           0x00008000U     /* Want/got stx_subvol */
-#define STATX_WRITE_ATOMIC     0x00010000U     /* Want/got atomic_write_* 
fields */
+#define STATX_WRITE_ATOMIC_DIO 0x00010000U     /* Want/got dio atomic_write_* 
fields */
+/* Old name kept for backward compatibility */
+#define STATX_WRITE_ATOMIC     STATX_WRITE_ATOMIC_DIO
 #define STATX_DIO_READ_ALIGN   0x00020000U     /* Want/got dio read alignment 
info */
 
 #define STATX__RESERVED                0x80000000U     /* Reserved for future 
struct statx expansion */
@@ -254,7 +256,9 @@ struct statx {
 #define STATX_ATTR_MOUNT_ROOT          0x00002000 /* Root of a mount */
 #define STATX_ATTR_VERITY              0x00100000 /* [I] Verity protected file 
*/
 #define STATX_ATTR_DAX                 0x00200000 /* File is currently in DAX 
state */
-#define STATX_ATTR_WRITE_ATOMIC                0x00400000 /* File supports 
atomic write operations */
+#define STATX_ATTR_WRITE_ATOMIC_DIO    0x00400000 /* File supports dio atomic 
write operations */
+/* Old name kept for backward compatibility */
+#define STATX_ATTR_WRITE_ATOMIC        STATX_ATTR_WRITE_ATOMIC_DIO
 
 
 #endif /* _UAPI_LINUX_STAT_H */
diff --git a/tools/include/uapi/linux/stat.h b/tools/include/uapi/linux/stat.h
index 1686861aae20..57f558be933e 100644
--- a/tools/include/uapi/linux/stat.h
+++ b/tools/include/uapi/linux/stat.h
@@ -217,7 +217,9 @@ struct statx {
 #define STATX_DIOALIGN         0x00002000U     /* Want/got direct I/O 
alignment info */
 #define STATX_MNT_ID_UNIQUE    0x00004000U     /* Want/got extended 
stx_mount_id */
 #define STATX_SUBVOL           0x00008000U     /* Want/got stx_subvol */
-#define STATX_WRITE_ATOMIC     0x00010000U     /* Want/got atomic_write_* 
fields */
+#define STATX_WRITE_ATOMIC_DIO 0x00010000U     /* Want/got dio atomic_write_* 
fields */
+/* Old name kept for backward compatibility */
+#define STATX_WRITE_ATOMIC     STATX_WRITE_ATOMIC_DIO
 #define STATX_DIO_READ_ALIGN   0x00020000U     /* Want/got dio read alignment 
info */
 
 #define STATX__RESERVED                0x80000000U     /* Reserved for future 
struct statx expansion */
@@ -254,7 +256,9 @@ struct statx {
 #define STATX_ATTR_MOUNT_ROOT          0x00002000 /* Root of a mount */
 #define STATX_ATTR_VERITY              0x00100000 /* [I] Verity protected file 
*/
 #define STATX_ATTR_DAX                 0x00200000 /* File is currently in DAX 
state */
-#define STATX_ATTR_WRITE_ATOMIC                0x00400000 /* File supports 
atomic write operations */
+#define STATX_ATTR_WRITE_ATOMIC_DIO    0x00400000 /* File supports dio atomic 
write operations */
+/* Old name kept for backward compatibility */
+#define STATX_ATTR_WRITE_ATOMIC        STATX_ATTR_WRITE_ATOMIC_DIO
 
 
 #endif /* _UAPI_LINUX_STAT_H */
diff --git a/tools/perf/trace/beauty/include/uapi/linux/stat.h 
b/tools/perf/trace/beauty/include/uapi/linux/stat.h
index 1686861aae20..57f558be933e 100644
--- a/tools/perf/trace/beauty/include/uapi/linux/stat.h
+++ b/tools/perf/trace/beauty/include/uapi/linux/stat.h
@@ -217,7 +217,9 @@ struct statx {
 #define STATX_DIOALIGN         0x00002000U     /* Want/got direct I/O 
alignment info */
 #define STATX_MNT_ID_UNIQUE    0x00004000U     /* Want/got extended 
stx_mount_id */
 #define STATX_SUBVOL           0x00008000U     /* Want/got stx_subvol */
-#define STATX_WRITE_ATOMIC     0x00010000U     /* Want/got atomic_write_* 
fields */
+#define STATX_WRITE_ATOMIC_DIO 0x00010000U     /* Want/got dio atomic_write_* 
fields */
+/* Old name kept for backward compatibility */
+#define STATX_WRITE_ATOMIC     STATX_WRITE_ATOMIC_DIO
 #define STATX_DIO_READ_ALIGN   0x00020000U     /* Want/got dio read alignment 
info */
 
 #define STATX__RESERVED                0x80000000U     /* Reserved for future 
struct statx expansion */
@@ -254,7 +256,9 @@ struct statx {
 #define STATX_ATTR_MOUNT_ROOT          0x00002000 /* Root of a mount */
 #define STATX_ATTR_VERITY              0x00100000 /* [I] Verity protected file 
*/
 #define STATX_ATTR_DAX                 0x00200000 /* File is currently in DAX 
state */
-#define STATX_ATTR_WRITE_ATOMIC                0x00400000 /* File supports 
atomic write operations */
+#define STATX_ATTR_WRITE_ATOMIC_DIO    0x00400000 /* File supports dio atomic 
write operations */
+/* Old name kept for backward compatibility */
+#define STATX_ATTR_WRITE_ATOMIC        STATX_ATTR_WRITE_ATOMIC_DIO
 
 
 #endif /* _UAPI_LINUX_STAT_H */
-- 
2.51.0


Reply via email to