nfsd4: support putpubfh operation
[safe/jmp/linux-2.6] / fs / ocfs2 / quota.h
index 1f1c863..7365e2e 100644 (file)
@@ -33,12 +33,24 @@ struct ocfs2_dquot {
        s64 dq_originodes;      /* Last globally synced inode usage */
 };
 
+/* Description of one chunk to recover in memory */
+struct ocfs2_recovery_chunk {
+       struct list_head rc_list;       /* List of chunks */
+       int rc_chunk;                   /* Chunk number */
+       unsigned long *rc_bitmap;       /* Bitmap of entries to recover */
+};
+
+struct ocfs2_quota_recovery {
+       struct list_head r_list[MAXQUOTAS];     /* List of chunks to recover */
+};
+
 /* In-memory structure with quota header information */
 struct ocfs2_mem_dqinfo {
        unsigned int dqi_type;          /* Quota type this structure describes */
        unsigned int dqi_chunks;        /* Number of chunks in local quota file */
        unsigned int dqi_blocks;        /* Number of blocks allocated for local quota file */
        unsigned int dqi_syncms;        /* How often should we sync with other nodes */
+       unsigned int dqi_syncjiff;      /* Precomputed dqi_syncms in jiffies */
        struct list_head dqi_chunk;     /* List of chunks */
        struct inode *dqi_gqinode;      /* Global quota file inode */
        struct ocfs2_lock_res dqi_gqlock;       /* Lock protecting quota information structure */
@@ -47,6 +59,11 @@ struct ocfs2_mem_dqinfo {
        struct buffer_head *dqi_lqi_bh; /* Buffer head with local quota file inode */
        struct buffer_head *dqi_ibh;    /* Buffer with information header */
        struct qtree_mem_dqinfo dqi_gi; /* Info about global file */
+       struct delayed_work dqi_sync_work;      /* Work for syncing dquots */
+       struct ocfs2_quota_recovery *dqi_rec;   /* Pointer to recovery
+                                                * information, in case we
+                                                * enable quotas on file
+                                                * needing it */
 };
 
 static inline struct ocfs2_dquot *OCFS2_DQUOT(struct dquot *dquot)
@@ -65,6 +82,12 @@ extern struct kmem_cache *ocfs2_qf_chunk_cachep;
 
 extern struct qtree_fmt_operations ocfs2_global_ops;
 
+struct ocfs2_quota_recovery *ocfs2_begin_quota_recovery(
+                               struct ocfs2_super *osb, int slot_num);
+int ocfs2_finish_quota_recovery(struct ocfs2_super *osb,
+                               struct ocfs2_quota_recovery *rec,
+                               int slot_num);
+void ocfs2_free_quota_recovery(struct ocfs2_quota_recovery *rec);
 ssize_t ocfs2_quota_read(struct super_block *sb, int type, char *data,
                         size_t len, loff_t off);
 ssize_t ocfs2_quota_write(struct super_block *sb, int type,
@@ -84,10 +107,13 @@ static inline int ocfs2_global_release_dquot(struct dquot *dquot)
 
 int ocfs2_lock_global_qf(struct ocfs2_mem_dqinfo *oinfo, int ex);
 void ocfs2_unlock_global_qf(struct ocfs2_mem_dqinfo *oinfo, int ex);
-struct buffer_head *ocfs2_read_quota_block(struct inode *inode,
-                                          int block, int *err);
+int ocfs2_read_quota_block(struct inode *inode, u64 v_block,
+                          struct buffer_head **bh);
 
 extern struct dquot_operations ocfs2_quota_operations;
 extern struct quota_format_type ocfs2_quota_format;
 
+int ocfs2_quota_setup(void);
+void ocfs2_quota_shutdown(void);
+
 #endif /* _OCFS2_QUOTA_H */