@@ -323,13 +323,14 @@ static inline int ext4_fc_is_ineligible(struct super_block *sb)
323
323
* If enqueue is set, this function enqueues the inode in fast commit list.
324
324
*/
325
325
static int ext4_fc_track_template (
326
- struct inode * inode , int (* __fc_track_fn )(struct inode * , void * , bool ),
326
+ handle_t * handle , struct inode * inode ,
327
+ int (* __fc_track_fn )(struct inode * , void * , bool ),
327
328
void * args , int enqueue )
328
329
{
329
- tid_t running_txn_tid ;
330
330
bool update = false;
331
331
struct ext4_inode_info * ei = EXT4_I (inode );
332
332
struct ext4_sb_info * sbi = EXT4_SB (inode -> i_sb );
333
+ tid_t tid = 0 ;
333
334
int ret ;
334
335
335
336
if (!test_opt2 (inode -> i_sb , JOURNAL_FAST_COMMIT ) ||
@@ -339,15 +340,13 @@ static int ext4_fc_track_template(
339
340
if (ext4_fc_is_ineligible (inode -> i_sb ))
340
341
return - EINVAL ;
341
342
342
- running_txn_tid = sbi -> s_journal ?
343
- sbi -> s_journal -> j_commit_sequence + 1 : 0 ;
344
-
343
+ tid = handle -> h_transaction -> t_tid ;
345
344
mutex_lock (& ei -> i_fc_lock );
346
- if (running_txn_tid == ei -> i_sync_tid ) {
345
+ if (tid == ei -> i_sync_tid ) {
347
346
update = true;
348
347
} else {
349
348
ext4_fc_reset_inode (inode );
350
- ei -> i_sync_tid = running_txn_tid ;
349
+ ei -> i_sync_tid = tid ;
351
350
}
352
351
ret = __fc_track_fn (inode , args , update );
353
352
mutex_unlock (& ei -> i_fc_lock );
@@ -422,41 +421,54 @@ static int __track_dentry_update(struct inode *inode, void *arg, bool update)
422
421
return 0 ;
423
422
}
424
423
425
- void ext4_fc_track_unlink (struct inode * inode , struct dentry * dentry )
424
+ void __ext4_fc_track_unlink (handle_t * handle ,
425
+ struct inode * inode , struct dentry * dentry )
426
426
{
427
427
struct __track_dentry_update_args args ;
428
428
int ret ;
429
429
430
430
args .dentry = dentry ;
431
431
args .op = EXT4_FC_TAG_UNLINK ;
432
432
433
- ret = ext4_fc_track_template (inode , __track_dentry_update ,
433
+ ret = ext4_fc_track_template (handle , inode , __track_dentry_update ,
434
434
(void * )& args , 0 );
435
435
trace_ext4_fc_track_unlink (inode , dentry , ret );
436
436
}
437
437
438
- void ext4_fc_track_link (struct inode * inode , struct dentry * dentry )
438
+ void ext4_fc_track_unlink (handle_t * handle , struct dentry * dentry )
439
+ {
440
+ __ext4_fc_track_unlink (handle , d_inode (dentry ), dentry );
441
+ }
442
+
443
+ void __ext4_fc_track_link (handle_t * handle ,
444
+ struct inode * inode , struct dentry * dentry )
439
445
{
440
446
struct __track_dentry_update_args args ;
441
447
int ret ;
442
448
443
449
args .dentry = dentry ;
444
450
args .op = EXT4_FC_TAG_LINK ;
445
451
446
- ret = ext4_fc_track_template (inode , __track_dentry_update ,
452
+ ret = ext4_fc_track_template (handle , inode , __track_dentry_update ,
447
453
(void * )& args , 0 );
448
454
trace_ext4_fc_track_link (inode , dentry , ret );
449
455
}
450
456
451
- void ext4_fc_track_create (struct inode * inode , struct dentry * dentry )
457
+ void ext4_fc_track_link (handle_t * handle , struct dentry * dentry )
458
+ {
459
+ __ext4_fc_track_link (handle , d_inode (dentry ), dentry );
460
+ }
461
+
462
+ void ext4_fc_track_create (handle_t * handle , struct dentry * dentry )
452
463
{
453
464
struct __track_dentry_update_args args ;
465
+ struct inode * inode = d_inode (dentry );
454
466
int ret ;
455
467
456
468
args .dentry = dentry ;
457
469
args .op = EXT4_FC_TAG_CREAT ;
458
470
459
- ret = ext4_fc_track_template (inode , __track_dentry_update ,
471
+ ret = ext4_fc_track_template (handle , inode , __track_dentry_update ,
460
472
(void * )& args , 0 );
461
473
trace_ext4_fc_track_create (inode , dentry , ret );
462
474
}
@@ -472,14 +484,14 @@ static int __track_inode(struct inode *inode, void *arg, bool update)
472
484
return 0 ;
473
485
}
474
486
475
- void ext4_fc_track_inode (struct inode * inode )
487
+ void ext4_fc_track_inode (handle_t * handle , struct inode * inode )
476
488
{
477
489
int ret ;
478
490
479
491
if (S_ISDIR (inode -> i_mode ))
480
492
return ;
481
493
482
- ret = ext4_fc_track_template (inode , __track_inode , NULL , 1 );
494
+ ret = ext4_fc_track_template (handle , inode , __track_inode , NULL , 1 );
483
495
trace_ext4_fc_track_inode (inode , ret );
484
496
}
485
497
@@ -515,7 +527,7 @@ static int __track_range(struct inode *inode, void *arg, bool update)
515
527
return 0 ;
516
528
}
517
529
518
- void ext4_fc_track_range (struct inode * inode , ext4_lblk_t start ,
530
+ void ext4_fc_track_range (handle_t * handle , struct inode * inode , ext4_lblk_t start ,
519
531
ext4_lblk_t end )
520
532
{
521
533
struct __track_range_args args ;
@@ -527,7 +539,7 @@ void ext4_fc_track_range(struct inode *inode, ext4_lblk_t start,
527
539
args .start = start ;
528
540
args .end = end ;
529
541
530
- ret = ext4_fc_track_template (inode , __track_range , & args , 1 );
542
+ ret = ext4_fc_track_template (handle , inode , __track_range , & args , 1 );
531
543
532
544
trace_ext4_fc_track_range (inode , start , end , ret );
533
545
}
@@ -1263,7 +1275,7 @@ static int ext4_fc_replay_unlink(struct super_block *sb, struct ext4_fc_tl *tl)
1263
1275
return 0 ;
1264
1276
}
1265
1277
1266
- ret = __ext4_unlink (old_parent , & entry , inode );
1278
+ ret = __ext4_unlink (NULL , old_parent , & entry , inode );
1267
1279
/* -ENOENT ok coz it might not exist anymore. */
1268
1280
if (ret == - ENOENT )
1269
1281
ret = 0 ;
0 commit comments