diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2017-06-15 00:42:56 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2017-06-15 00:42:56 -0400 |
| commit | 289dec5b895a7ecefb2f49da109e6aed9b0f1754 (patch) | |
| tree | 0be6ed8e4f1607918aa4a44bee6b4ce33843e6cf | |
| parent | 09bf4f5b6e6013f0ad6b090d4a8deebd4e56d878 (diff) | |
ufs: more deadlock prevention on tail unpacking
->s_lock is not needed for ufs_change_blocknr()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | fs/ufs/balloc.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ufs/balloc.c b/fs/ufs/balloc.c index d56d9bc705fe..0315fea1d589 100644 --- a/fs/ufs/balloc.c +++ b/fs/ufs/balloc.c | |||
| @@ -478,6 +478,7 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment, | |||
| 478 | if (result) { | 478 | if (result) { |
| 479 | ufs_clear_frags(inode, result + oldcount, newcount - oldcount, | 479 | ufs_clear_frags(inode, result + oldcount, newcount - oldcount, |
| 480 | locked_page != NULL); | 480 | locked_page != NULL); |
| 481 | mutex_unlock(&UFS_SB(sb)->s_lock); | ||
| 481 | ufs_change_blocknr(inode, fragment - oldcount, oldcount, | 482 | ufs_change_blocknr(inode, fragment - oldcount, oldcount, |
| 482 | uspi->s_sbbase + tmp, | 483 | uspi->s_sbbase + tmp, |
| 483 | uspi->s_sbbase + result, locked_page); | 484 | uspi->s_sbbase + result, locked_page); |
| @@ -487,7 +488,6 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment, | |||
| 487 | UFS_I(inode)->i_lastfrag = max(UFS_I(inode)->i_lastfrag, | 488 | UFS_I(inode)->i_lastfrag = max(UFS_I(inode)->i_lastfrag, |
| 488 | fragment + count); | 489 | fragment + count); |
| 489 | write_sequnlock(&UFS_I(inode)->meta_lock); | 490 | write_sequnlock(&UFS_I(inode)->meta_lock); |
| 490 | mutex_unlock(&UFS_SB(sb)->s_lock); | ||
| 491 | if (newcount < request) | 491 | if (newcount < request) |
| 492 | ufs_free_fragments (inode, result + newcount, request - newcount); | 492 | ufs_free_fragments (inode, result + newcount, request - newcount); |
| 493 | ufs_free_fragments (inode, tmp, oldcount); | 493 | ufs_free_fragments (inode, tmp, oldcount); |
