mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
btrfs: use helper sizeof_field in struct accessors
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>
This commit is contained in:
parent
16c3a47648
commit
98efb4eb31
1 changed files with 11 additions and 12 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue