Skip to content

Commit

Permalink
Revert "ext4: use ext4_write_inode() when fsyncing w/o a journal"
Browse files Browse the repository at this point in the history
This reverts commit ad211f3.

As Jan Kara pointed out, this change was unsafe since it means we lose
the call to sync_mapping_buffers() in the nojournal case.  The
original point of the commit was avoid taking the inode mutex (since
it causes a lockdep warning in generic/113); but we need the mutex in
order to call sync_mapping_buffers().

The real fix to this problem was discussed here:

https://lore.kernel.org/lkml/20181025150540.259281-4-bvanassche@acm.org

The proposed patch was to fix a syzbot complaint, but the problem can
also demonstrated via "kvm-xfstests -c nojournal generic/113".
Multiple solutions were discused in the e-mail thread, but none have
landed in the kernel as of this writing.  Anyway, commit
ad211f3 is absolutely the wrong way to suppress the lockdep, so
revert it.

Fixes: ad211f3 ("ext4: use ext4_write_inode() when fsyncing w/o a journal")
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reported: Jan Kara <jack@suse.cz>
  • Loading branch information
Theodore Ts'o committed Feb 1, 2019
1 parent 49a5785 commit 8fdd60f
Showing 1 changed file with 4 additions and 9 deletions.
13 changes: 4 additions & 9 deletions fs/ext4/fsync.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,23 +116,18 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
goto out;
}

ret = file_write_and_wait_range(file, start, end);
if (ret)
return ret;

if (!journal) {
struct writeback_control wbc = {
.sync_mode = WB_SYNC_ALL
};

ret = ext4_write_inode(inode, &wbc);
ret = __generic_file_fsync(file, start, end, datasync);
if (!ret)
ret = ext4_sync_parent(inode);
if (test_opt(inode->i_sb, BARRIER))
goto issue_flush;
goto out;
}

ret = file_write_and_wait_range(file, start, end);
if (ret)
return ret;
/*
* data=writeback,ordered:
* The caller's filemap_fdatawrite()/wait will sync the data.
Expand Down

0 comments on commit 8fdd60f

Please sign in to comment.