diff options
author | Jan Kara <jack@suse.cz> | 2012-11-13 17:05:14 +0100 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2012-12-06 11:20:28 +0000 |
commit | 14c0699231bb44a3d492b6b5ef281e4e956ab015 (patch) | |
tree | da35a278dbffbbedef985123ad868dbc297b98aa /fs/reiserfs/stree.c | |
parent | 9711ee6c9eff253a85ea67e425d74d6ff5790aad (diff) | |
download | kernel_samsung_smdk4412-14c0699231bb44a3d492b6b5ef281e4e956ab015.zip kernel_samsung_smdk4412-14c0699231bb44a3d492b6b5ef281e4e956ab015.tar.gz kernel_samsung_smdk4412-14c0699231bb44a3d492b6b5ef281e4e956ab015.tar.bz2 |
reiserfs: Move quota calls out of write lock
commit 7af11686933726e99af22901d622f9e161404e6b upstream.
Calls into highlevel quota code cannot happen under the write lock. These
calls take dqio_mutex which ranks above write lock. So drop write lock
before calling back into quota code.
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'fs/reiserfs/stree.c')
-rw-r--r-- | fs/reiserfs/stree.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/reiserfs/stree.c b/fs/reiserfs/stree.c index 313d39d..3ae9926 100644 --- a/fs/reiserfs/stree.c +++ b/fs/reiserfs/stree.c @@ -1968,7 +1968,9 @@ int reiserfs_paste_into_item(struct reiserfs_transaction_handle *th, struct tree key2type(&(key->on_disk_key))); #endif + reiserfs_write_unlock(inode->i_sb); retval = dquot_alloc_space_nodirty(inode, pasted_size); + reiserfs_write_lock(inode->i_sb); if (retval) { pathrelse(search_path); return retval; @@ -2061,9 +2063,11 @@ int reiserfs_insert_item(struct reiserfs_transaction_handle *th, "reiserquota insert_item(): allocating %u id=%u type=%c", quota_bytes, inode->i_uid, head2type(ih)); #endif + reiserfs_write_unlock(inode->i_sb); /* We can't dirty inode here. It would be immediately written but * appropriate stat item isn't inserted yet... */ retval = dquot_alloc_space_nodirty(inode, quota_bytes); + reiserfs_write_lock(inode->i_sb); if (retval) { pathrelse(path); return retval; |