mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
jfs: fix a couple races
commit 73aaa22d5f
upstream.
This patch fixes races uncovered by xfstests testcase 068.
One race is the result of jfs_sync() trying to write a sync point to the
journal after it has been frozen (or possibly in the process). Since
freezing sync's the journal, there is no need to write a sync point so
we simply want to return.
The second involves jfs_write_inode() being called on a deleted inode.
It calls jfs_flush_journal which is held up by the jfs_commit thread
doing the final iput on the same deleted inode, which itself is
waiting for the I_SYNC flag to be cleared. jfs_write_inode need not
do anything when i_nlink is zero, which is the easy fix.
Reported-by: Michael L. Semon <mlsemon35@gmail.com>
Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e3f7e71f94
commit
2e6c53ddad
2 changed files with 3 additions and 2 deletions
|
@ -125,7 +125,7 @@ int jfs_write_inode(struct inode *inode, struct writeback_control *wbc)
|
|||
{
|
||||
int wait = wbc->sync_mode == WB_SYNC_ALL;
|
||||
|
||||
if (test_cflag(COMMIT_Nolink, inode))
|
||||
if (inode->i_nlink == 0)
|
||||
return 0;
|
||||
/*
|
||||
* If COMMIT_DIRTY is not set, the inode isn't really dirty.
|
||||
|
|
|
@ -1058,7 +1058,8 @@ static int lmLogSync(struct jfs_log * log, int hard_sync)
|
|||
*/
|
||||
void jfs_syncpt(struct jfs_log *log, int hard_sync)
|
||||
{ LOG_LOCK(log);
|
||||
lmLogSync(log, hard_sync);
|
||||
if (!test_bit(log_QUIESCE, &log->flag))
|
||||
lmLogSync(log, hard_sync);
|
||||
LOG_UNLOCK(log);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue