|
@@ -381,10 +381,10 @@ static void queue_io(struct bdi_writeback *wb, unsigned long *older_than_this)
|
|
|
move_expired_inodes(&wb->b_dirty, &wb->b_io, older_than_this);
|
|
|
}
|
|
|
|
|
|
-static int write_inode(struct inode *inode, int sync)
|
|
|
+static int write_inode(struct inode *inode, struct writeback_control *wbc)
|
|
|
{
|
|
|
if (inode->i_sb->s_op->write_inode && !is_bad_inode(inode))
|
|
|
- return inode->i_sb->s_op->write_inode(inode, sync);
|
|
|
+ return inode->i_sb->s_op->write_inode(inode, wbc);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -421,7 +421,6 @@ static int
|
|
|
writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
|
|
|
{
|
|
|
struct address_space *mapping = inode->i_mapping;
|
|
|
- int wait = wbc->sync_mode == WB_SYNC_ALL;
|
|
|
unsigned dirty;
|
|
|
int ret;
|
|
|
|
|
@@ -439,7 +438,7 @@ writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
|
|
|
* We'll have another go at writing back this inode when we
|
|
|
* completed a full scan of b_io.
|
|
|
*/
|
|
|
- if (!wait) {
|
|
|
+ if (wbc->sync_mode != WB_SYNC_ALL) {
|
|
|
requeue_io(inode);
|
|
|
return 0;
|
|
|
}
|
|
@@ -466,7 +465,7 @@ writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
|
|
|
* This is important for filesystems that modify metadata on data
|
|
|
* I/O completion.
|
|
|
*/
|
|
|
- if (wait) {
|
|
|
+ if (wbc->sync_mode == WB_SYNC_ALL) {
|
|
|
int err = filemap_fdatawait(mapping);
|
|
|
if (ret == 0)
|
|
|
ret = err;
|
|
@@ -474,7 +473,7 @@ writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
|
|
|
|
|
|
/* Don't write the inode if only I_DIRTY_PAGES was set */
|
|
|
if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
|
|
|
- int err = write_inode(inode, wait);
|
|
|
+ int err = write_inode(inode, wbc);
|
|
|
if (ret == 0)
|
|
|
ret = err;
|
|
|
}
|