[GFS2] Quotas non-functional - fix bug
Abhijith Das [Wed, 16 May 2007 22:02:19 +0000 (17:02 -0500)]
This patch fixes an error in the quota code where a 'struct
gfs2_quota_lvb*' was being passed to gfs2_adjust_quota() instead of a
'struct gfs2_quota_data*'. Also moved 'struct gfs2_quota_lvb' from
fs/gfs2/incore.h to include/linux/gfs2_ondisk.h as per Steve's suggestion.

Signed-off-by: Abhijith Das <adas@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>

fs/gfs2/incore.h
fs/gfs2/quota.c
include/linux/gfs2_ondisk.h

index 00c3004..b2079fc 100644 (file)
@@ -275,14 +275,6 @@ enum {
        QDF_LOCKED              = 2,
 };
 
-struct gfs2_quota_lvb {
-        __be32 qb_magic;
-        u32 __pad;
-        __be64 qb_limit;      /* Hard limit of # blocks to alloc */
-        __be64 qb_warn;       /* Warn user when alloc is above this # */
-        __be64 qb_value;       /* Current # blocks allocated */
-};
-
 struct gfs2_quota_data {
        struct list_head qd_list;
        unsigned int qd_count;
index c186857..fcd3ee2 100644 (file)
@@ -627,6 +627,8 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
        err = 0;
        qd->qd_qb.qb_magic = cpu_to_be32(GFS2_MAGIC);
        qd->qd_qb.qb_value = cpu_to_be64(value);
+       ((struct gfs2_quota_lvb*)(qd->qd_gl->gl_lvb))->qb_magic = cpu_to_be32(GFS2_MAGIC);
+       ((struct gfs2_quota_lvb*)(qd->qd_gl->gl_lvb))->qb_value = cpu_to_be64(value);
 unlock:
        unlock_page(page);
        page_cache_release(page);
@@ -709,7 +711,7 @@ static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
                offset = qd2offset(qd);
                error = gfs2_adjust_quota(ip, offset, qd->qd_change_sync,
                                          (struct gfs2_quota_data *)
-                                         qd->qd_gl->gl_lvb);
+                                         qd);
                if (error)
                        goto out_end_trans;
 
index a82ec8c..028f981 100644 (file)
@@ -500,6 +500,14 @@ struct gfs2_quota_change_host {
        __u32 qc_id;
 };
 
+struct gfs2_quota_lvb {
+        __be32 qb_magic;
+        u32 __pad;
+        __be64 qb_limit;      /* Hard limit of # blocks to alloc */
+        __be64 qb_warn;       /* Warn user when alloc is above this # */
+        __be64 qb_value;       /* Current # blocks allocated */
+};
+
 #ifdef __KERNEL__
 /* Translation functions */
 struct gfs2_inode;