|
@@ -298,7 +298,9 @@ static int finish_unfinished(struct super_block *s)
|
|
|
retval = remove_save_link_only(s, &save_link_key, 0);
|
|
|
continue;
|
|
|
}
|
|
|
+ reiserfs_write_unlock(s);
|
|
|
dquot_initialize(inode);
|
|
|
+ reiserfs_write_lock(s);
|
|
|
|
|
|
if (truncate && S_ISDIR(inode->i_mode)) {
|
|
|
/* We got a truncate request for a dir which is impossible.
|
|
@@ -2108,13 +2110,15 @@ static int reiserfs_write_dquot(struct dquot *dquot)
|
|
|
REISERFS_QUOTA_TRANS_BLOCKS(dquot->dq_sb));
|
|
|
if (ret)
|
|
|
goto out;
|
|
|
+ reiserfs_write_unlock(dquot->dq_sb);
|
|
|
ret = dquot_commit(dquot);
|
|
|
+ reiserfs_write_lock(dquot->dq_sb);
|
|
|
err =
|
|
|
journal_end(&th, dquot->dq_sb,
|
|
|
REISERFS_QUOTA_TRANS_BLOCKS(dquot->dq_sb));
|
|
|
if (!ret && err)
|
|
|
ret = err;
|
|
|
- out:
|
|
|
+out:
|
|
|
reiserfs_write_unlock(dquot->dq_sb);
|
|
|
return ret;
|
|
|
}
|
|
@@ -2130,13 +2134,15 @@ static int reiserfs_acquire_dquot(struct dquot *dquot)
|
|
|
REISERFS_QUOTA_INIT_BLOCKS(dquot->dq_sb));
|
|
|
if (ret)
|
|
|
goto out;
|
|
|
+ reiserfs_write_unlock(dquot->dq_sb);
|
|
|
ret = dquot_acquire(dquot);
|
|
|
+ reiserfs_write_lock(dquot->dq_sb);
|
|
|
err =
|
|
|
journal_end(&th, dquot->dq_sb,
|
|
|
REISERFS_QUOTA_INIT_BLOCKS(dquot->dq_sb));
|
|
|
if (!ret && err)
|
|
|
ret = err;
|
|
|
- out:
|
|
|
+out:
|
|
|
reiserfs_write_unlock(dquot->dq_sb);
|
|
|
return ret;
|
|
|
}
|
|
@@ -2150,19 +2156,21 @@ static int reiserfs_release_dquot(struct dquot *dquot)
|
|
|
ret =
|
|
|
journal_begin(&th, dquot->dq_sb,
|
|
|
REISERFS_QUOTA_DEL_BLOCKS(dquot->dq_sb));
|
|
|
+ reiserfs_write_unlock(dquot->dq_sb);
|
|
|
if (ret) {
|
|
|
/* Release dquot anyway to avoid endless cycle in dqput() */
|
|
|
dquot_release(dquot);
|
|
|
goto out;
|
|
|
}
|
|
|
ret = dquot_release(dquot);
|
|
|
+ reiserfs_write_lock(dquot->dq_sb);
|
|
|
err =
|
|
|
journal_end(&th, dquot->dq_sb,
|
|
|
REISERFS_QUOTA_DEL_BLOCKS(dquot->dq_sb));
|
|
|
if (!ret && err)
|
|
|
ret = err;
|
|
|
- out:
|
|
|
reiserfs_write_unlock(dquot->dq_sb);
|
|
|
+out:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -2187,11 +2195,13 @@ static int reiserfs_write_info(struct super_block *sb, int type)
|
|
|
ret = journal_begin(&th, sb, 2);
|
|
|
if (ret)
|
|
|
goto out;
|
|
|
+ reiserfs_write_unlock(sb);
|
|
|
ret = dquot_commit_info(sb, type);
|
|
|
+ reiserfs_write_lock(sb);
|
|
|
err = journal_end(&th, sb, 2);
|
|
|
if (!ret && err)
|
|
|
ret = err;
|
|
|
- out:
|
|
|
+out:
|
|
|
reiserfs_write_unlock(sb);
|
|
|
return ret;
|
|
|
}
|