btrfs: use helper sizeof_field in struct accessors
authorDavid Sterba <dsterba@suse.com>
Thu, 13 Jul 2023 14:10:26 +0000 (16:10 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Aug 2023 12:52:13 +0000 (14:52 +0200)
There's a helper for obtaining size of a struct member, we can use it
instead of open coding the pointer magic.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/accessors.h

index ceadfc5..8cfc821 100644 (file)
@@ -3,6 +3,8 @@
 #ifndef BTRFS_ACCESSORS_H
 #define BTRFS_ACCESSORS_H
 
+#include <linux/stddef.h>
+
 struct btrfs_map_token {
        struct extent_buffer *eb;
        char *kaddr;
@@ -34,13 +36,13 @@ static inline void put_unaligned_le8(u8 val, void *p)
        read_extent_buffer(eb, (char *)(result),                        \
                           ((unsigned long)(ptr)) +                     \
                            offsetof(type, member),                     \
-                          sizeof(((type *)0)->member)))
+                           sizeof_field(type, member)))
 
 #define write_eb_member(eb, ptr, type, member, result) (\
        write_extent_buffer(eb, (char *)(result),                       \
                           ((unsigned long)(ptr)) +                     \
                            offsetof(type, member),                     \
-                          sizeof(((type *)0)->member)))
+                           sizeof_field(type, member)))
 
 #define DECLARE_BTRFS_SETGET_BITS(bits)                                        \
 u##bits btrfs_get_token_##bits(struct btrfs_map_token *token,          \
@@ -62,25 +64,25 @@ DECLARE_BTRFS_SETGET_BITS(64)
 static inline u##bits btrfs_##name(const struct extent_buffer *eb,     \
                                   const type *s)                       \
 {                                                                      \
-       static_assert(sizeof(u##bits) == sizeof(((type *)0))->member);  \
+       static_assert(sizeof(u##bits) == sizeof_field(type, member));   \
        return btrfs_get_##bits(eb, s, offsetof(type, member));         \
 }                                                                      \
 static inline void btrfs_set_##name(const struct extent_buffer *eb, type *s, \
                                    u##bits val)                        \
 {                                                                      \
-       static_assert(sizeof(u##bits) == sizeof(((type *)0))->member);  \
+       static_assert(sizeof(u##bits) == sizeof_field(type, member));   \
        btrfs_set_##bits(eb, s, offsetof(type, member), val);           \
 }                                                                      \
 static inline u##bits btrfs_token_##name(struct btrfs_map_token *token,        \
                                         const type *s)                 \
 {                                                                      \
-       static_assert(sizeof(u##bits) == sizeof(((type *)0))->member);  \
+       static_assert(sizeof(u##bits) == sizeof_field(type, member));   \
        return btrfs_get_token_##bits(token, s, offsetof(type, member));\
 }                                                                      \
 static inline void btrfs_set_token_##name(struct btrfs_map_token *token,\
                                          type *s, u##bits val)         \
 {                                                                      \
-       static_assert(sizeof(u##bits) == sizeof(((type *)0))->member);  \
+       static_assert(sizeof(u##bits) == sizeof_field(type, member));   \
        btrfs_set_token_##bits(token, s, offsetof(type, member), val);  \
 }
 
@@ -111,17 +113,14 @@ static inline void btrfs_set_##name(type *s, u##bits val)         \
 static inline u64 btrfs_device_total_bytes(const struct extent_buffer *eb,
                                           struct btrfs_dev_item *s)
 {
-       static_assert(sizeof(u64) ==
-                     sizeof(((struct btrfs_dev_item *)0))->total_bytes);
-       return btrfs_get_64(eb, s, offsetof(struct btrfs_dev_item,
-                                           total_bytes));
+       static_assert(sizeof(u64) == sizeof_field(struct btrfs_dev_item, total_bytes));
+       return btrfs_get_64(eb, s, offsetof(struct btrfs_dev_item, total_bytes));
 }
 static inline void btrfs_set_device_total_bytes(const struct extent_buffer *eb,
                                                struct btrfs_dev_item *s,
                                                u64 val)
 {
-       static_assert(sizeof(u64) ==
-                     sizeof(((struct btrfs_dev_item *)0))->total_bytes);
+       static_assert(sizeof(u64) == sizeof_field(struct btrfs_dev_item, total_bytes));
        WARN_ON(!IS_ALIGNED(val, eb->fs_info->sectorsize));
        btrfs_set_64(eb, s, offsetof(struct btrfs_dev_item, total_bytes), val);
 }