From: Linus Torvalds Date: Tue, 26 Jul 2011 18:34:40 +0000 (-0700) Subject: Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux... X-Git-Tag: v3.1-rc1~224 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2ac232f37fa0e8551856a575fe299c47b65b4d66;p=profile%2Fivi%2Fkernel-x86-ivi.git Merge branch 'for_linus' of git://git./linux/kernel/git/jack/linux-fs-2.6 * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6: jbd: change the field "b_cow_tid" of struct journal_head from type unsigned to tid_t ext3.txt: update the links in the section "useful links" to the latest ones ext3: Fix data corruption in inodes with journalled data ext2: check xattr name_len before acquiring xattr_sem in ext2_xattr_get ext3: Fix compilation with -DDX_DEBUG quota: Remove unused declaration jbd: Use WRITE_SYNC in journal checkpoint. jbd: Fix oops in journal_remove_journal_head() ext3: Return -EINVAL when start is beyond the end of fs in ext3_trim_fs() ext3/ioctl.c: silence sparse warnings about different address spaces ext3/ext4 Documentation: remove bh/nobh since it has been deprecated ext3: Improve truncate error handling ext3: use proper little-endian bitops ext2: include fs.h into ext2_fs.h ext3: Fix oops in ext3_try_to_allocate_with_rsv() jbd: fix a bug of leaking jh->b_jcount jbd: remove dependency on __GFP_NOFAIL ext3: Convert ext3 to new truncate calling convention jbd: Add fixed tracepoints ext3: Add fixed tracepoints Resolve conflicts in fs/ext3/fsync.c due to fsync locking push-down and new fixed tracepoints. --- 2ac232f37fa0e8551856a575fe299c47b65b4d66 diff --cc fs/ext3/fsync.c index 0bcf63a,06a4394..d494c55 --- a/fs/ext3/fsync.c +++ b/fs/ext3/fsync.c @@@ -51,21 -52,13 +52,23 @@@ int ext3_sync_file(struct file *file, l int ret, needs_barrier = 0; tid_t commit_tid; - J_ASSERT(ext3_journal_current_handle() == NULL); - + trace_ext3_sync_file_enter(file, datasync); + if (inode->i_sb->s_flags & MS_RDONLY) return 0; + ret = filemap_write_and_wait_range(inode->i_mapping, start, end); + if (ret) - return ret; ++ goto out; + + /* + * Taking the mutex here just to keep consistent with how fsync was + * called previously, however it looks like we don't need to take + * i_mutex at all. + */ + mutex_lock(&inode->i_mutex); + + J_ASSERT(ext3_journal_current_handle() == NULL); /* * data=writeback,ordered: @@@ -82,8 -75,8 +85,9 @@@ * safe in-journal, which is all fsync() needs to ensure. */ if (ext3_should_journal_data(inode)) { + mutex_unlock(&inode->i_mutex); - return ext3_force_commit(inode->i_sb); + ret = ext3_force_commit(inode->i_sb); + goto out; } if (datasync) @@@ -104,6 -97,8 +108,9 @@@ */ if (needs_barrier) blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); + + mutex_unlock(&inode->i_mutex); + out: + trace_ext3_sync_file_exit(inode, ret); return ret; }