summaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/quota_global.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2009-07-22 13:17:15 +0200
committerJoel Becker <joel.becker@oracle.com>2009-07-23 19:58:59 +0200
commitb57ac2c43e66cb4aa76c9d2d0e9e0e04f19cc5a6 (patch)
treee377a53fe3aab4034c6f24fd439eb4f3bed51745 /fs/ocfs2/quota_global.c
parentocfs2: Use ocfs2_rec_clusters in ocfs2_adjust_adjacent_records. (diff)
downloadlinux-b57ac2c43e66cb4aa76c9d2d0e9e0e04f19cc5a6.tar.xz
linux-b57ac2c43e66cb4aa76c9d2d0e9e0e04f19cc5a6.zip
ocfs2: Make global quota files blocksize aligned
Change i_size of global quota files so that it always remains aligned to block size. This is mainly because the end of quota block may contain checksum (if checksumming is enabled) and it's a bit awkward for it to be "outside" of quota file (and it makes life harder for ocfs2-tools). Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Diffstat (limited to 'fs/ocfs2/quota_global.c')
-rw-r--r--fs/ocfs2/quota_global.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
index edfa60cd155c..a66cb82fd6e6 100644
--- a/fs/ocfs2/quota_global.c
+++ b/fs/ocfs2/quota_global.c
@@ -211,14 +211,17 @@ ssize_t ocfs2_quota_write(struct super_block *sb, int type,
mutex_lock_nested(&gqinode->i_mutex, I_MUTEX_QUOTA);
if (gqinode->i_size < off + len) {
+ loff_t rounded_end =
+ ocfs2_align_bytes_to_blocks(sb, off + len);
+
down_write(&OCFS2_I(gqinode)->ip_alloc_sem);
- err = ocfs2_extend_no_holes(gqinode, off + len, off);
+ err = ocfs2_extend_no_holes(gqinode, rounded_end, off);
up_write(&OCFS2_I(gqinode)->ip_alloc_sem);
if (err < 0)
goto out;
err = ocfs2_simple_size_update(gqinode,
oinfo->dqi_gqi_bh,
- off + len);
+ rounded_end);
if (err < 0)
goto out;
new = 1;