Message ID | 20250110024303.4157645-1-viro@zeniv.linux.org.uk (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [01/20] make sure that DNAME_INLINE_LEN is a multiple of word size | expand |
On Fri 10-01-25 02:42:44, Al Viro wrote: > ... calling the number of words DNAME_INLINE_WORDS. > > The next step will be to have a structure to hold inline name arrays > (both in dentry and in name_snapshot) and use that to alias the > existing arrays of unsigned char there. That will allow both > full-structure copies and convenient word-by-word accesses. > > Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/dcache.c | 4 +--- > include/linux/dcache.h | 8 +++++--- > 2 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/fs/dcache.c b/fs/dcache.c > index b4d5e9e1e43d..ea0f0bea511b 100644 > --- a/fs/dcache.c > +++ b/fs/dcache.c > @@ -2748,9 +2748,7 @@ static void swap_names(struct dentry *dentry, struct dentry *target) > /* > * Both are internal. > */ > - unsigned int i; > - BUILD_BUG_ON(!IS_ALIGNED(DNAME_INLINE_LEN, sizeof(long))); > - for (i = 0; i < DNAME_INLINE_LEN / sizeof(long); i++) { > + for (int i = 0; i < DNAME_INLINE_WORDS; i++) { > swap(((long *) &dentry->d_iname)[i], > ((long *) &target->d_iname)[i]); > } > diff --git a/include/linux/dcache.h b/include/linux/dcache.h > index bff956f7b2b9..42dd89beaf4e 100644 > --- a/include/linux/dcache.h > +++ b/include/linux/dcache.h > @@ -68,15 +68,17 @@ extern const struct qstr dotdot_name; > * large memory footprint increase). > */ > #ifdef CONFIG_64BIT > -# define DNAME_INLINE_LEN 40 /* 192 bytes */ > +# define DNAME_INLINE_WORDS 5 /* 192 bytes */ > #else > # ifdef CONFIG_SMP > -# define DNAME_INLINE_LEN 36 /* 128 bytes */ > +# define DNAME_INLINE_WORDS 9 /* 128 bytes */ > # else > -# define DNAME_INLINE_LEN 44 /* 128 bytes */ > +# define DNAME_INLINE_WORDS 11 /* 128 bytes */ > # endif > #endif > > +#define DNAME_INLINE_LEN (DNAME_INLINE_WORDS*sizeof(unsigned long)) > + > #define d_lock d_lockref.lock > > struct dentry { > -- > 2.39.5 >
diff --git a/fs/dcache.c b/fs/dcache.c index b4d5e9e1e43d..ea0f0bea511b 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -2748,9 +2748,7 @@ static void swap_names(struct dentry *dentry, struct dentry *target) /* * Both are internal. */ - unsigned int i; - BUILD_BUG_ON(!IS_ALIGNED(DNAME_INLINE_LEN, sizeof(long))); - for (i = 0; i < DNAME_INLINE_LEN / sizeof(long); i++) { + for (int i = 0; i < DNAME_INLINE_WORDS; i++) { swap(((long *) &dentry->d_iname)[i], ((long *) &target->d_iname)[i]); } diff --git a/include/linux/dcache.h b/include/linux/dcache.h index bff956f7b2b9..42dd89beaf4e 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h @@ -68,15 +68,17 @@ extern const struct qstr dotdot_name; * large memory footprint increase). */ #ifdef CONFIG_64BIT -# define DNAME_INLINE_LEN 40 /* 192 bytes */ +# define DNAME_INLINE_WORDS 5 /* 192 bytes */ #else # ifdef CONFIG_SMP -# define DNAME_INLINE_LEN 36 /* 128 bytes */ +# define DNAME_INLINE_WORDS 9 /* 128 bytes */ # else -# define DNAME_INLINE_LEN 44 /* 128 bytes */ +# define DNAME_INLINE_WORDS 11 /* 128 bytes */ # endif #endif +#define DNAME_INLINE_LEN (DNAME_INLINE_WORDS*sizeof(unsigned long)) + #define d_lock d_lockref.lock struct dentry {
... calling the number of words DNAME_INLINE_WORDS. The next step will be to have a structure to hold inline name arrays (both in dentry and in name_snapshot) and use that to alias the existing arrays of unsigned char there. That will allow both full-structure copies and convenient word-by-word accesses. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> --- fs/dcache.c | 4 +--- include/linux/dcache.h | 8 +++++--- 2 files changed, 6 insertions(+), 6 deletions(-)