@@ -324,7 +324,7 @@ static void __d_free_external(struct rcu_head *head)
324
324
325
325
static inline int dname_external (const struct dentry * dentry )
326
326
{
327
- return dentry -> d_name .name != dentry -> d_iname ;
327
+ return dentry -> d_name .name != dentry -> d_shortname . string ;
328
328
}
329
329
330
330
void take_dentry_name_snapshot (struct name_snapshot * name , struct dentry * dentry )
@@ -334,17 +334,16 @@ void take_dentry_name_snapshot(struct name_snapshot *name, struct dentry *dentry
334
334
if (unlikely (dname_external (dentry ))) {
335
335
atomic_inc (& external_name (dentry )-> u .count );
336
336
} else {
337
- memcpy (name -> inline_name , dentry -> d_iname ,
338
- dentry -> d_name .len + 1 );
339
- name -> name .name = name -> inline_name ;
337
+ name -> inline_name = dentry -> d_shortname ;
338
+ name -> name .name = name -> inline_name .string ;
340
339
}
341
340
spin_unlock (& dentry -> d_lock );
342
341
}
343
342
EXPORT_SYMBOL (take_dentry_name_snapshot );
344
343
345
344
void release_dentry_name_snapshot (struct name_snapshot * name )
346
345
{
347
- if (unlikely (name -> name .name != name -> inline_name )) {
346
+ if (unlikely (name -> name .name != name -> inline_name . string )) {
348
347
struct external_name * p ;
349
348
p = container_of (name -> name .name , struct external_name , name [0 ]);
350
349
if (unlikely (atomic_dec_and_test (& p -> u .count )))
@@ -1654,10 +1653,10 @@ static struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
1654
1653
* will still always have a NUL at the end, even if we might
1655
1654
* be overwriting an internal NUL character
1656
1655
*/
1657
- dentry -> d_iname [DNAME_INLINE_LEN - 1 ] = 0 ;
1656
+ dentry -> d_shortname . string [DNAME_INLINE_LEN - 1 ] = 0 ;
1658
1657
if (unlikely (!name )) {
1659
1658
name = & slash_name ;
1660
- dname = dentry -> d_iname ;
1659
+ dname = dentry -> d_shortname . string ;
1661
1660
} else if (name -> len > DNAME_INLINE_LEN - 1 ) {
1662
1661
size_t size = offsetof(struct external_name , name [1 ]);
1663
1662
struct external_name * p = kmalloc (size + name -> len ,
@@ -1670,7 +1669,7 @@ static struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
1670
1669
atomic_set (& p -> u .count , 1 );
1671
1670
dname = p -> name ;
1672
1671
} else {
1673
- dname = dentry -> d_iname ;
1672
+ dname = dentry -> d_shortname . string ;
1674
1673
}
1675
1674
1676
1675
dentry -> d_name .len = name -> len ;
@@ -2729,29 +2728,26 @@ static void swap_names(struct dentry *dentry, struct dentry *target)
2729
2728
* dentry:internal, target:external. Steal target's
2730
2729
* storage and make target internal.
2731
2730
*/
2732
- memcpy (target -> d_iname , dentry -> d_name .name ,
2733
- dentry -> d_name .len + 1 );
2734
2731
dentry -> d_name .name = target -> d_name .name ;
2735
- target -> d_name .name = target -> d_iname ;
2732
+ target -> d_shortname = dentry -> d_shortname ;
2733
+ target -> d_name .name = target -> d_shortname .string ;
2736
2734
}
2737
2735
} else {
2738
2736
if (unlikely (dname_external (dentry ))) {
2739
2737
/*
2740
2738
* dentry:external, target:internal. Give dentry's
2741
2739
* storage to target and make dentry internal
2742
2740
*/
2743
- memcpy (dentry -> d_iname , target -> d_name .name ,
2744
- target -> d_name .len + 1 );
2745
2741
target -> d_name .name = dentry -> d_name .name ;
2746
- dentry -> d_name .name = dentry -> d_iname ;
2742
+ dentry -> d_shortname = target -> d_shortname ;
2743
+ dentry -> d_name .name = dentry -> d_shortname .string ;
2747
2744
} else {
2748
2745
/*
2749
2746
* Both are internal.
2750
2747
*/
2751
- for (int i = 0 ; i < DNAME_INLINE_WORDS ; i ++ ) {
2752
- swap (((long * ) & dentry -> d_iname )[i ],
2753
- ((long * ) & target -> d_iname )[i ]);
2754
- }
2748
+ for (int i = 0 ; i < DNAME_INLINE_WORDS ; i ++ )
2749
+ swap (dentry -> d_shortname .words [i ],
2750
+ target -> d_shortname .words [i ]);
2755
2751
}
2756
2752
}
2757
2753
swap (dentry -> d_name .hash_len , target -> d_name .hash_len );
@@ -2766,9 +2762,8 @@ static void copy_name(struct dentry *dentry, struct dentry *target)
2766
2762
atomic_inc (& external_name (target )-> u .count );
2767
2763
dentry -> d_name = target -> d_name ;
2768
2764
} else {
2769
- memcpy (dentry -> d_iname , target -> d_name .name ,
2770
- target -> d_name .len + 1 );
2771
- dentry -> d_name .name = dentry -> d_iname ;
2765
+ dentry -> d_shortname = target -> d_shortname ;
2766
+ dentry -> d_name .name = dentry -> d_shortname .string ;
2772
2767
dentry -> d_name .hash_len = target -> d_name .hash_len ;
2773
2768
}
2774
2769
if (old_name && likely (atomic_dec_and_test (& old_name -> u .count )))
@@ -3101,12 +3096,12 @@ void d_mark_tmpfile(struct file *file, struct inode *inode)
3101
3096
{
3102
3097
struct dentry * dentry = file -> f_path .dentry ;
3103
3098
3104
- BUG_ON (dentry -> d_name . name != dentry -> d_iname ||
3099
+ BUG_ON (dname_external ( dentry ) ||
3105
3100
!hlist_unhashed (& dentry -> d_u .d_alias ) ||
3106
3101
!d_unlinked (dentry ));
3107
3102
spin_lock (& dentry -> d_parent -> d_lock );
3108
3103
spin_lock_nested (& dentry -> d_lock , DENTRY_D_LOCK_NESTED );
3109
- dentry -> d_name .len = sprintf (dentry -> d_iname , "#%llu" ,
3104
+ dentry -> d_name .len = sprintf (dentry -> d_shortname . string , "#%llu" ,
3110
3105
(unsigned long long )inode -> i_ino );
3111
3106
spin_unlock (& dentry -> d_lock );
3112
3107
spin_unlock (& dentry -> d_parent -> d_lock );
@@ -3194,7 +3189,7 @@ static void __init dcache_init(void)
3194
3189
*/
3195
3190
dentry_cache = KMEM_CACHE_USERCOPY (dentry ,
3196
3191
SLAB_RECLAIM_ACCOUNT |SLAB_PANIC |SLAB_ACCOUNT ,
3197
- d_iname );
3192
+ d_shortname . string );
3198
3193
3199
3194
/* Hash may have been set up in dcache_init_early */
3200
3195
if (!hashdist )
0 commit comments