@@ -208,6 +208,17 @@ static struct lmStat {
208
208
} lmStat ;
209
209
#endif
210
210
211
+ static void write_special_inodes (struct jfs_log * log ,
212
+ int (* writer )(struct address_space * ))
213
+ {
214
+ struct jfs_sb_info * sbi ;
215
+
216
+ list_for_each_entry (sbi , & log -> sb_list , log_list ) {
217
+ writer (sbi -> ipbmap -> i_mapping );
218
+ writer (sbi -> ipimap -> i_mapping );
219
+ writer (sbi -> direct_inode -> i_mapping );
220
+ }
221
+ }
211
222
212
223
/*
213
224
* NAME: lmLog()
@@ -935,22 +946,13 @@ static int lmLogSync(struct jfs_log * log, int hard_sync)
935
946
struct lrd lrd ;
936
947
int lsn ;
937
948
struct logsyncblk * lp ;
938
- struct jfs_sb_info * sbi ;
939
949
unsigned long flags ;
940
950
941
951
/* push dirty metapages out to disk */
942
952
if (hard_sync )
943
- list_for_each_entry (sbi , & log -> sb_list , log_list ) {
944
- filemap_fdatawrite (sbi -> ipbmap -> i_mapping );
945
- filemap_fdatawrite (sbi -> ipimap -> i_mapping );
946
- filemap_fdatawrite (sbi -> direct_inode -> i_mapping );
947
- }
953
+ write_special_inodes (log , filemap_fdatawrite );
948
954
else
949
- list_for_each_entry (sbi , & log -> sb_list , log_list ) {
950
- filemap_flush (sbi -> ipbmap -> i_mapping );
951
- filemap_flush (sbi -> ipimap -> i_mapping );
952
- filemap_flush (sbi -> direct_inode -> i_mapping );
953
- }
955
+ write_special_inodes (log , filemap_flush );
954
956
955
957
/*
956
958
* forward syncpt
@@ -1536,7 +1538,6 @@ void jfs_flush_journal(struct jfs_log *log, int wait)
1536
1538
{
1537
1539
int i ;
1538
1540
struct tblock * target = NULL ;
1539
- struct jfs_sb_info * sbi ;
1540
1541
1541
1542
/* jfs_write_inode may call us during read-only mount */
1542
1543
if (!log )
@@ -1598,11 +1599,7 @@ void jfs_flush_journal(struct jfs_log *log, int wait)
1598
1599
if (wait < 2 )
1599
1600
return ;
1600
1601
1601
- list_for_each_entry (sbi , & log -> sb_list , log_list ) {
1602
- filemap_fdatawrite (sbi -> ipbmap -> i_mapping );
1603
- filemap_fdatawrite (sbi -> ipimap -> i_mapping );
1604
- filemap_fdatawrite (sbi -> direct_inode -> i_mapping );
1605
- }
1602
+ write_special_inodes (log , filemap_fdatawrite );
1606
1603
1607
1604
/*
1608
1605
* If there was recent activity, we may need to wait
@@ -1611,6 +1608,7 @@ void jfs_flush_journal(struct jfs_log *log, int wait)
1611
1608
if ((!list_empty (& log -> cqueue )) || !list_empty (& log -> synclist )) {
1612
1609
for (i = 0 ; i < 200 ; i ++ ) { /* Too much? */
1613
1610
msleep (250 );
1611
+ write_special_inodes (log , filemap_fdatawrite );
1614
1612
if (list_empty (& log -> cqueue ) &&
1615
1613
list_empty (& log -> synclist ))
1616
1614
break ;
0 commit comments