Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
[safe/jmp/linux-2.6] / include / linux / quotaops.h
index 0c8f9fe..ca6b9b5 100644 (file)
 #define _LINUX_QUOTAOPS_
 
 #include <linux/smp_lock.h>
-
 #include <linux/fs.h>
 
+static inline struct quota_info *sb_dqopt(struct super_block *sb)
+{
+       return &sb->s_dquot;
+}
+
 #if defined(CONFIG_QUOTA)
 
 /*
@@ -39,6 +43,8 @@ int dquot_mark_dquot_dirty(struct dquot *dquot);
 
 int vfs_quota_on(struct super_block *sb, int type, int format_id,
        char *path, int remount);
+int vfs_quota_on_path(struct super_block *sb, int type, int format_id,
+       struct path *path);
 int vfs_quota_on_mount(struct super_block *sb, char *qf_name,
        int format_id, int type);
 int vfs_quota_off(struct super_block *sb, int type, int remount);
@@ -52,6 +58,41 @@ void vfs_dq_drop(struct inode *inode);
 int vfs_dq_transfer(struct inode *inode, struct iattr *iattr);
 int vfs_dq_quota_on_remount(struct super_block *sb);
 
+static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type)
+{
+       return sb_dqopt(sb)->info + type;
+}
+
+/*
+ * Functions for checking status of quota
+ */
+
+static inline int sb_has_quota_enabled(struct super_block *sb, int type)
+{
+       if (type == USRQUOTA)
+               return sb_dqopt(sb)->flags & DQUOT_USR_ENABLED;
+       return sb_dqopt(sb)->flags & DQUOT_GRP_ENABLED;
+}
+
+static inline int sb_any_quota_enabled(struct super_block *sb)
+{
+       return sb_has_quota_enabled(sb, USRQUOTA) ||
+               sb_has_quota_enabled(sb, GRPQUOTA);
+}
+
+static inline int sb_has_quota_suspended(struct super_block *sb, int type)
+{
+       if (type == USRQUOTA)
+               return sb_dqopt(sb)->flags & DQUOT_USR_SUSPENDED;
+       return sb_dqopt(sb)->flags & DQUOT_GRP_SUSPENDED;
+}
+
+static inline int sb_any_quota_suspended(struct super_block *sb)
+{
+       return sb_has_quota_suspended(sb, USRQUOTA) ||
+               sb_has_quota_suspended(sb, GRPQUOTA);
+}
+
 /*
  * Operations supported for diskquotas.
  */
@@ -159,6 +200,26 @@ static inline int vfs_dq_off(struct super_block *sb, int remount)
 
 #else
 
+static inline int sb_has_quota_enabled(struct super_block *sb, int type)
+{
+       return 0;
+}
+
+static inline int sb_any_quota_enabled(struct super_block *sb)
+{
+       return 0;
+}
+
+static inline int sb_has_quota_suspended(struct super_block *sb, int type)
+{
+       return 0;
+}
+
+static inline int sb_any_quota_suspended(struct super_block *sb)
+{
+       return 0;
+}
+
 /*
  * NO-OP when quota not configured.
  */