diff options
author | Abhijith Das <adas@redhat.com> | 2007-05-31 18:52:02 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2007-07-09 03:23:01 -0400 |
commit | 1990e917651d58a3c5155d0491431c09e29e385b (patch) | |
tree | 6e53188136db71ed9abe8982b457ab2d66f1792a /fs/gfs2/quota.c | |
parent | 0b7cac0fb0e541a7f54d0ba55b31d829ce3dd899 (diff) |
[GFS2] Quotas non-functional - fix another bug
This patch fixes a bug where gfs2 was writing update quota usage
information to the wrong location in the quota file.
Signed-off-by: Abhijith Das <adas@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/quota.c')
-rw-r--r-- | fs/gfs2/quota.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index fcd3ee2c5b96..8a58815dea08 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c | |||
@@ -573,12 +573,13 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc, | |||
573 | struct inode *inode = &ip->i_inode; | 573 | struct inode *inode = &ip->i_inode; |
574 | struct address_space *mapping = inode->i_mapping; | 574 | struct address_space *mapping = inode->i_mapping; |
575 | unsigned long index = loc >> PAGE_CACHE_SHIFT; | 575 | unsigned long index = loc >> PAGE_CACHE_SHIFT; |
576 | unsigned offset = loc & (PAGE_CACHE_SHIFT - 1); | 576 | unsigned offset = loc & (PAGE_CACHE_SIZE - 1); |
577 | unsigned blocksize, iblock, pos; | 577 | unsigned blocksize, iblock, pos; |
578 | struct buffer_head *bh; | 578 | struct buffer_head *bh; |
579 | struct page *page; | 579 | struct page *page; |
580 | void *kaddr; | 580 | void *kaddr; |
581 | __be64 *ptr; | 581 | char *ptr; |
582 | struct gfs2_quota_host qp; | ||
582 | s64 value; | 583 | s64 value; |
583 | int err = -EIO; | 584 | int err = -EIO; |
584 | 585 | ||
@@ -620,8 +621,10 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc, | |||
620 | 621 | ||
621 | kaddr = kmap_atomic(page, KM_USER0); | 622 | kaddr = kmap_atomic(page, KM_USER0); |
622 | ptr = kaddr + offset; | 623 | ptr = kaddr + offset; |
623 | value = (s64)be64_to_cpu(*ptr) + change; | 624 | gfs2_quota_in(&qp, ptr); |
624 | *ptr = cpu_to_be64(value); | 625 | qp.qu_value += change; |
626 | value = qp.qu_value; | ||
627 | gfs2_quota_out(&qp, ptr); | ||
625 | flush_dcache_page(page); | 628 | flush_dcache_page(page); |
626 | kunmap_atomic(kaddr, KM_USER0); | 629 | kunmap_atomic(kaddr, KM_USER0); |
627 | err = 0; | 630 | err = 0; |