@ -1105,7 +1105,7 @@ static bool inode_dirtied_after(struct inode *inode, unsigned long t)
*/
static int move_expired_inodes ( struct list_head * delaying_queue ,
struct list_head * dispatch_queue ,
int flags , unsigned long dirtied_before )
unsigned long dirtied_before )
{
LIST_HEAD ( tmp ) ;
struct list_head * pos , * node ;
@ -1121,8 +1121,6 @@ static int move_expired_inodes(struct list_head *delaying_queue,
list_move ( & inode - > i_io_list , & tmp ) ;
moved + + ;
spin_lock ( & inode - > i_lock ) ;
if ( flags & EXPIRE_DIRTY_ATIME )
inode - > i_state | = I_DIRTY_TIME_EXPIRED ;
inode - > i_state | = I_SYNC_QUEUED ;
spin_unlock ( & inode - > i_lock ) ;
if ( sb_is_blkdev_sb ( inode - > i_sb ) )
@ -1170,11 +1168,11 @@ static void queue_io(struct bdi_writeback *wb, struct wb_writeback_work *work,
assert_spin_locked ( & wb - > list_lock ) ;
list_splice_init ( & wb - > b_more_io , & wb - > b_io ) ;
moved = move_expired_inodes ( & wb - > b_dirty , & wb - > b_io , 0 , dirtied_before ) ;
moved = move_expired_inodes ( & wb - > b_dirty , & wb - > b_io , dirtied_before ) ;
if ( ! work - > for_sync )
time_expire_jif = jiffies - dirtytime_expire_interval * HZ ;
moved + = move_expired_inodes ( & wb - > b_dirty_time , & wb - > b_io ,
EXPIRE_DIRTY_ATIME , time_expire_jif ) ;
time_expire_jif ) ;
if ( moved )
wb_io_lists_populated ( wb ) ;
trace_writeback_queue_io ( wb , work , dirtied_before , moved ) ;
@ -1350,18 +1348,14 @@ __writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
spin_lock ( & inode - > i_lock ) ;
dirty = inode - > i_state & I_DIRTY ;
if ( inode - > i_state & I_DIRTY_TIME ) {
if ( ( dirty & ( I_DIRTY_SYNC | I_DIRTY_DATASYNC ) ) | |
wbc - > sync_mode = = WB_SYNC_ALL | |
unlikely ( inode - > i_state & I_DIRTY_TIME_EXPIRED ) | |
unlikely ( time_after ( jiffies ,
( inode - > dirtied_time_when +
dirtytime_expire_interval * HZ ) ) ) ) {
dirty | = I_DIRTY_TIME | I_DIRTY_TIME_EXPIRED ;
trace_writeback_lazytime ( inode ) ;
}
} else
inode - > i_state & = ~ I_DIRTY_TIME_EXPIRED ;
if ( ( inode - > i_state & I_DIRTY_TIME ) & &
( ( dirty & ( I_DIRTY_SYNC | I_DIRTY_DATASYNC ) ) | |
wbc - > sync_mode = = WB_SYNC_ALL | | wbc - > for_sync | |
time_after ( jiffies , inode - > dirtied_time_when +
dirtytime_expire_interval * HZ ) ) ) {
dirty | = I_DIRTY_TIME ;
trace_writeback_lazytime ( inode ) ;
}
inode - > i_state & = ~ dirty ;
/*