diff options
author | Jan Kara <jack@suse.cz> | 2009-01-12 17:23:05 +0100 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2009-01-16 18:02:10 +0100 |
commit | cc33412fb1f11613e20f9dfc2919a77ecd63fbc4 (patch) | |
tree | 657ccb0860127852179efe8c13fc24b5ba624017 /include/linux/quotaops.h | |
parent | 7cb36b6ccdca03bd87e8faca7fd920643dd1aec7 (diff) | |
download | blackbird-op-linux-cc33412fb1f11613e20f9dfc2919a77ecd63fbc4.tar.gz blackbird-op-linux-cc33412fb1f11613e20f9dfc2919a77ecd63fbc4.zip |
quota: Improve locking
We implement dqget() and dqput() that need neither dqonoff_mutex nor dqptr_sem.
Then move dqget() and dqput() calls so that they are not called from under
dqptr_sem. This is important because filesystem callbacks aren't called from
under dqptr_sem which used to cause *lots* of problems with lock ranking
(and with OCFS2 they became close to unsolvable).
The patch also removes two functions which were introduced solely because OCFS2
needed them to cope with the old locking scheme. As time showed, they were not
enough for OCFS2 anyway and it would be unnecessary work to adapt them to the
new locking scheme in which they aren't needed. As a result OCFS2 needs the
following patch to compile properly with quotas. Sorry to any bisecters which
hit this in advance.
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'include/linux/quotaops.h')
-rw-r--r-- | include/linux/quotaops.h | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 21b781a3350f..0b35b3a1be05 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h @@ -24,10 +24,8 @@ void sync_dquots(struct super_block *sb, int type); int dquot_initialize(struct inode *inode, int type); int dquot_drop(struct inode *inode); -int dquot_drop_locked(struct inode *inode); struct dquot *dqget(struct super_block *sb, unsigned int id, int type); void dqput(struct dquot *dquot); -int dquot_is_cached(struct super_block *sb, unsigned int id, int type); int dquot_scan_active(struct super_block *sb, int (*fn)(struct dquot *dquot, unsigned long priv), unsigned long priv); |