]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.suse/quota-Implement-function-for-scanning-active-dquots.patch
Imported linux-2.6.27.39 suse/xen patches.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.suse / quota-Implement-function-for-scanning-active-dquots.patch
diff --git a/src/patches/suse-2.6.27.31/patches.suse/quota-Implement-function-for-scanning-active-dquots.patch b/src/patches/suse-2.6.27.31/patches.suse/quota-Implement-function-for-scanning-active-dquots.patch
deleted file mode 100644 (file)
index 4ae143a..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-From: Jan Kara <jack@suse.cz>
-References: fate#302681
-Subject: [PATCH 17/28] quota: Implement function for scanning active dquots
-Patch-mainline: 2.6.29?
-
-OCFS2 needs to scan all active dquots once in a while and sync quota
-information among cluster nodes. Provide a helper function for it so
-that it does not have to reimplement internally a list which VFS
-already has. Moreover this function is probably going to be useful
-for other clustered filesystems if they decide to use VFS quotas.
-
-Signed-off-by: Jan Kara <jack@suse.cz>
----
- fs/dquot.c               |   36 ++++++++++++++++++++++++++++++++++++
- include/linux/quotaops.h |    3 +++
- 2 files changed, 39 insertions(+), 0 deletions(-)
-
-diff --git a/fs/dquot.c b/fs/dquot.c
-index 9fb1d71..6a17416 100644
---- a/fs/dquot.c
-+++ b/fs/dquot.c
-@@ -476,6 +476,41 @@ restart:
-       spin_unlock(&dq_list_lock);
- }
-+/* Call callback for every active dquot on given filesystem */
-+int dquot_scan_active(struct super_block *sb,
-+                    int (*fn)(struct dquot *dquot, unsigned long priv),
-+                    unsigned long priv)
-+{
-+      struct dquot *dquot, *old_dquot = NULL;
-+      int ret = 0;
-+
-+      mutex_lock(&sb_dqopt(sb)->dqonoff_mutex);
-+      spin_lock(&dq_list_lock);
-+      list_for_each_entry(dquot, &inuse_list, dq_inuse) {
-+              if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
-+                      continue;
-+              if (dquot->dq_sb != sb)
-+                      continue;
-+              /* Now we have active dquot so we can just increase use count */
-+              atomic_inc(&dquot->dq_count);
-+              dqstats.lookups++;
-+              spin_unlock(&dq_list_lock);
-+              dqput(old_dquot);
-+              old_dquot = dquot;
-+              ret = fn(dquot, priv);
-+              if (ret < 0)
-+                      goto out;
-+              spin_lock(&dq_list_lock);
-+              /* We are safe to continue now because our dquot could not
-+               * be moved out of the inuse list while we hold the reference */
-+      }
-+      spin_unlock(&dq_list_lock);
-+out:
-+      dqput(old_dquot);
-+      mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
-+      return ret;
-+}
-+
- int vfs_quota_sync(struct super_block *sb, int type)
- {
-       struct list_head *dirty;
-@@ -2316,6 +2351,7 @@ EXPORT_SYMBOL(vfs_quota_on_path);
- EXPORT_SYMBOL(vfs_quota_on_mount);
- EXPORT_SYMBOL(vfs_quota_disable);
- EXPORT_SYMBOL(vfs_quota_off);
-+EXPORT_SYMBOL(dquot_scan_active);
- EXPORT_SYMBOL(vfs_quota_sync);
- EXPORT_SYMBOL(vfs_get_dqinfo);
- EXPORT_SYMBOL(vfs_set_dqinfo);
-diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h
-index 1f990f2..f2147eb 100644
---- a/include/linux/quotaops.h
-+++ b/include/linux/quotaops.h
-@@ -31,6 +31,9 @@ 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);
- int dquot_alloc_space(struct inode *inode, qsize_t number, int prealloc);
- int dquot_alloc_inode(const struct inode *inode, qsize_t number);
--- 
-1.5.2.4
-