diff options
Diffstat (limited to 'fs/fs-writeback.c')
-rw-r--r-- | fs/fs-writeback.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 5f2721b1e4be..76fc4d594acb 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c | |||
@@ -381,10 +381,10 @@ static void queue_io(struct bdi_writeback *wb, unsigned long *older_than_this) | |||
381 | move_expired_inodes(&wb->b_dirty, &wb->b_io, older_than_this); | 381 | move_expired_inodes(&wb->b_dirty, &wb->b_io, older_than_this); |
382 | } | 382 | } |
383 | 383 | ||
384 | static int write_inode(struct inode *inode, int sync) | 384 | static int write_inode(struct inode *inode, struct writeback_control *wbc) |
385 | { | 385 | { |
386 | if (inode->i_sb->s_op->write_inode && !is_bad_inode(inode)) | 386 | if (inode->i_sb->s_op->write_inode && !is_bad_inode(inode)) |
387 | return inode->i_sb->s_op->write_inode(inode, sync); | 387 | return inode->i_sb->s_op->write_inode(inode, wbc); |
388 | return 0; | 388 | return 0; |
389 | } | 389 | } |
390 | 390 | ||
@@ -421,7 +421,6 @@ static int | |||
421 | writeback_single_inode(struct inode *inode, struct writeback_control *wbc) | 421 | writeback_single_inode(struct inode *inode, struct writeback_control *wbc) |
422 | { | 422 | { |
423 | struct address_space *mapping = inode->i_mapping; | 423 | struct address_space *mapping = inode->i_mapping; |
424 | int wait = wbc->sync_mode == WB_SYNC_ALL; | ||
425 | unsigned dirty; | 424 | unsigned dirty; |
426 | int ret; | 425 | int ret; |
427 | 426 | ||
@@ -439,7 +438,7 @@ writeback_single_inode(struct inode *inode, struct writeback_control *wbc) | |||
439 | * We'll have another go at writing back this inode when we | 438 | * We'll have another go at writing back this inode when we |
440 | * completed a full scan of b_io. | 439 | * completed a full scan of b_io. |
441 | */ | 440 | */ |
442 | if (!wait) { | 441 | if (wbc->sync_mode != WB_SYNC_ALL) { |
443 | requeue_io(inode); | 442 | requeue_io(inode); |
444 | return 0; | 443 | return 0; |
445 | } | 444 | } |
@@ -466,7 +465,7 @@ writeback_single_inode(struct inode *inode, struct writeback_control *wbc) | |||
466 | * This is important for filesystems that modify metadata on data | 465 | * This is important for filesystems that modify metadata on data |
467 | * I/O completion. | 466 | * I/O completion. |
468 | */ | 467 | */ |
469 | if (wait) { | 468 | if (wbc->sync_mode == WB_SYNC_ALL) { |
470 | int err = filemap_fdatawait(mapping); | 469 | int err = filemap_fdatawait(mapping); |
471 | if (ret == 0) | 470 | if (ret == 0) |
472 | ret = err; | 471 | ret = err; |
@@ -474,7 +473,7 @@ writeback_single_inode(struct inode *inode, struct writeback_control *wbc) | |||
474 | 473 | ||
475 | /* Don't write the inode if only I_DIRTY_PAGES was set */ | 474 | /* Don't write the inode if only I_DIRTY_PAGES was set */ |
476 | if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) { | 475 | if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) { |
477 | int err = write_inode(inode, wait); | 476 | int err = write_inode(inode, wbc); |
478 | if (ret == 0) | 477 | if (ret == 0) |
479 | ret = err; | 478 | ret = err; |
480 | } | 479 | } |