diff options
-rw-r--r-- | fs/gfs2/quota.c | 3 | ||||
-rw-r--r-- | include/linux/gfs2_ondisk.h | 30 |
2 files changed, 32 insertions, 1 deletions
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index 5dfa4656122b..addb51e0f135 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c | |||
@@ -70,6 +70,7 @@ struct gfs2_quota_host { | |||
70 | u64 qu_limit; | 70 | u64 qu_limit; |
71 | u64 qu_warn; | 71 | u64 qu_warn; |
72 | s64 qu_value; | 72 | s64 qu_value; |
73 | u32 qu_ll_next; | ||
73 | }; | 74 | }; |
74 | 75 | ||
75 | struct gfs2_quota_change_host { | 76 | struct gfs2_quota_change_host { |
@@ -580,6 +581,7 @@ static void gfs2_quota_in(struct gfs2_quota_host *qu, const void *buf) | |||
580 | qu->qu_limit = be64_to_cpu(str->qu_limit); | 581 | qu->qu_limit = be64_to_cpu(str->qu_limit); |
581 | qu->qu_warn = be64_to_cpu(str->qu_warn); | 582 | qu->qu_warn = be64_to_cpu(str->qu_warn); |
582 | qu->qu_value = be64_to_cpu(str->qu_value); | 583 | qu->qu_value = be64_to_cpu(str->qu_value); |
584 | qu->qu_ll_next = be32_to_cpu(str->qu_ll_next); | ||
583 | } | 585 | } |
584 | 586 | ||
585 | static void gfs2_quota_out(const struct gfs2_quota_host *qu, void *buf) | 587 | static void gfs2_quota_out(const struct gfs2_quota_host *qu, void *buf) |
@@ -589,6 +591,7 @@ static void gfs2_quota_out(const struct gfs2_quota_host *qu, void *buf) | |||
589 | str->qu_limit = cpu_to_be64(qu->qu_limit); | 591 | str->qu_limit = cpu_to_be64(qu->qu_limit); |
590 | str->qu_warn = cpu_to_be64(qu->qu_warn); | 592 | str->qu_warn = cpu_to_be64(qu->qu_warn); |
591 | str->qu_value = cpu_to_be64(qu->qu_value); | 593 | str->qu_value = cpu_to_be64(qu->qu_value); |
594 | str->qu_ll_next = cpu_to_be32(qu->qu_ll_next); | ||
592 | memset(&str->qu_reserved, 0, sizeof(str->qu_reserved)); | 595 | memset(&str->qu_reserved, 0, sizeof(str->qu_reserved)); |
593 | } | 596 | } |
594 | 597 | ||
diff --git a/include/linux/gfs2_ondisk.h b/include/linux/gfs2_ondisk.h index a44a6a078f0a..c3c19f926e6f 100644 --- a/include/linux/gfs2_ondisk.h +++ b/include/linux/gfs2_ondisk.h | |||
@@ -170,6 +170,33 @@ struct gfs2_rgrp { | |||
170 | }; | 170 | }; |
171 | 171 | ||
172 | /* | 172 | /* |
173 | * quota linked list: user quotas and group quotas form two separate | ||
174 | * singly linked lists. ll_next stores uids or gids of next quotas in the | ||
175 | * linked list. | ||
176 | |||
177 | Given the uid/gid, how to calculate the quota file offsets for the corresponding | ||
178 | gfs2_quota structures on disk: | ||
179 | |||
180 | for user quotas, given uid, | ||
181 | offset = uid * sizeof(struct gfs2_quota); | ||
182 | |||
183 | for group quotas, given gid, | ||
184 | offset = (gid * sizeof(struct gfs2_quota)) + sizeof(struct gfs2_quota); | ||
185 | |||
186 | |||
187 | uid:0 gid:0 uid:12 gid:12 uid:17 gid:17 uid:5142 gid:5142 | ||
188 | +-------+-------+ +-------+-------+ +-------+- - - -+ +- - - -+-------+ | ||
189 | | valid | valid | :: | valid | valid | :: | valid | inval | :: | inval | valid | | ||
190 | +-------+-------+ +-------+-------+ +-------+- - - -+ +- - - -+-------+ | ||
191 | next:12 next:12 next:17 next:5142 next:NULL next:NULL | ||
192 | | | | | |<-- user quota list | | ||
193 | \______|___________/ \______|___________/ group quota list -->| | ||
194 | | | | | ||
195 | \__________________/ \_______________________________________/ | ||
196 | |||
197 | */ | ||
198 | |||
199 | /* | ||
173 | * quota structure | 200 | * quota structure |
174 | */ | 201 | */ |
175 | 202 | ||
@@ -177,7 +204,8 @@ struct gfs2_quota { | |||
177 | __be64 qu_limit; | 204 | __be64 qu_limit; |
178 | __be64 qu_warn; | 205 | __be64 qu_warn; |
179 | __be64 qu_value; | 206 | __be64 qu_value; |
180 | __u8 qu_reserved[64]; | 207 | __be32 qu_ll_next; /* location of next quota in list */ |
208 | __u8 qu_reserved[60]; | ||
181 | }; | 209 | }; |
182 | 210 | ||
183 | /* | 211 | /* |