diff options
-rw-r--r-- | fs/fs-writeback.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index f60de54d2042..f0520bcf2094 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c | |||
@@ -513,6 +513,11 @@ out_free: | |||
513 | void wbc_attach_and_unlock_inode(struct writeback_control *wbc, | 513 | void wbc_attach_and_unlock_inode(struct writeback_control *wbc, |
514 | struct inode *inode) | 514 | struct inode *inode) |
515 | { | 515 | { |
516 | if (!inode_cgwb_enabled(inode)) { | ||
517 | spin_unlock(&inode->i_lock); | ||
518 | return; | ||
519 | } | ||
520 | |||
516 | wbc->wb = inode_to_wb(inode); | 521 | wbc->wb = inode_to_wb(inode); |
517 | wbc->inode = inode; | 522 | wbc->inode = inode; |
518 | 523 | ||
@@ -575,11 +580,16 @@ void wbc_detach_inode(struct writeback_control *wbc) | |||
575 | { | 580 | { |
576 | struct bdi_writeback *wb = wbc->wb; | 581 | struct bdi_writeback *wb = wbc->wb; |
577 | struct inode *inode = wbc->inode; | 582 | struct inode *inode = wbc->inode; |
578 | u16 history = inode->i_wb_frn_history; | 583 | unsigned long avg_time, max_bytes, max_time; |
579 | unsigned long avg_time = inode->i_wb_frn_avg_time; | 584 | u16 history; |
580 | unsigned long max_bytes, max_time; | ||
581 | int max_id; | 585 | int max_id; |
582 | 586 | ||
587 | if (!wb) | ||
588 | return; | ||
589 | |||
590 | history = inode->i_wb_frn_history; | ||
591 | avg_time = inode->i_wb_frn_avg_time; | ||
592 | |||
583 | /* pick the winner of this round */ | 593 | /* pick the winner of this round */ |
584 | if (wbc->wb_bytes >= wbc->wb_lcand_bytes && | 594 | if (wbc->wb_bytes >= wbc->wb_lcand_bytes && |
585 | wbc->wb_bytes >= wbc->wb_tcand_bytes) { | 595 | wbc->wb_bytes >= wbc->wb_tcand_bytes) { |