@@ -322,9 +322,7 @@ void ext4_fc_del(struct inode *inode)
322
322
WARN_ON (!list_empty (& ei -> i_fc_dilist ));
323
323
spin_unlock (& sbi -> s_fc_lock );
324
324
325
- if (fc_dentry -> fcd_name .name &&
326
- fc_dentry -> fcd_name .len > DNAME_INLINE_LEN )
327
- kfree (fc_dentry -> fcd_name .name );
325
+ release_dentry_name_snapshot (& fc_dentry -> fcd_name );
328
326
kmem_cache_free (ext4_fc_dentry_cachep , fc_dentry );
329
327
330
328
return ;
@@ -449,22 +447,7 @@ static int __track_dentry_update(handle_t *handle, struct inode *inode,
449
447
node -> fcd_op = dentry_update -> op ;
450
448
node -> fcd_parent = dir -> i_ino ;
451
449
node -> fcd_ino = inode -> i_ino ;
452
- if (dentry -> d_name .len > DNAME_INLINE_LEN ) {
453
- node -> fcd_name .name = kmalloc (dentry -> d_name .len , GFP_NOFS );
454
- if (!node -> fcd_name .name ) {
455
- kmem_cache_free (ext4_fc_dentry_cachep , node );
456
- ext4_fc_mark_ineligible (sb , EXT4_FC_REASON_NOMEM , handle );
457
- mutex_lock (& ei -> i_fc_lock );
458
- return - ENOMEM ;
459
- }
460
- memcpy ((u8 * )node -> fcd_name .name , dentry -> d_name .name ,
461
- dentry -> d_name .len );
462
- } else {
463
- memcpy (node -> fcd_iname , dentry -> d_name .name ,
464
- dentry -> d_name .len );
465
- node -> fcd_name .name = node -> fcd_iname ;
466
- }
467
- node -> fcd_name .len = dentry -> d_name .len ;
450
+ take_dentry_name_snapshot (& node -> fcd_name , dentry );
468
451
INIT_LIST_HEAD (& node -> fcd_dilist );
469
452
spin_lock (& sbi -> s_fc_lock );
470
453
if (sbi -> s_journal -> j_flags & JBD2_FULL_COMMIT_ONGOING ||
@@ -832,7 +815,7 @@ static bool ext4_fc_add_dentry_tlv(struct super_block *sb, u32 *crc,
832
815
{
833
816
struct ext4_fc_dentry_info fcd ;
834
817
struct ext4_fc_tl tl ;
835
- int dlen = fc_dentry -> fcd_name .len ;
818
+ int dlen = fc_dentry -> fcd_name .name . len ;
836
819
u8 * dst = ext4_fc_reserve_space (sb ,
837
820
EXT4_FC_TAG_BASE_LEN + sizeof (fcd ) + dlen , crc );
838
821
@@ -847,7 +830,7 @@ static bool ext4_fc_add_dentry_tlv(struct super_block *sb, u32 *crc,
847
830
dst += EXT4_FC_TAG_BASE_LEN ;
848
831
memcpy (dst , & fcd , sizeof (fcd ));
849
832
dst += sizeof (fcd );
850
- memcpy (dst , fc_dentry -> fcd_name .name , dlen );
833
+ memcpy (dst , fc_dentry -> fcd_name .name . name , dlen );
851
834
852
835
return true;
853
836
}
@@ -1328,9 +1311,7 @@ static void ext4_fc_cleanup(journal_t *journal, int full, tid_t tid)
1328
1311
list_del_init (& fc_dentry -> fcd_dilist );
1329
1312
spin_unlock (& sbi -> s_fc_lock );
1330
1313
1331
- if (fc_dentry -> fcd_name .name &&
1332
- fc_dentry -> fcd_name .len > DNAME_INLINE_LEN )
1333
- kfree (fc_dentry -> fcd_name .name );
1314
+ release_dentry_name_snapshot (& fc_dentry -> fcd_name );
1334
1315
kmem_cache_free (ext4_fc_dentry_cachep , fc_dentry );
1335
1316
spin_lock (& sbi -> s_fc_lock );
1336
1317
}
0 commit comments