ocfs2: Make global quota files blocksize aligned
authorJan Kara <jack@suse.cz>
Wed, 22 Jul 2009 11:17:15 +0000 (13:17 +0200)
committerJoel Becker <joel.becker@oracle.com>
Thu, 23 Jul 2009 17:58:59 +0000 (10:58 -0700)
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>
fs/ocfs2/quota_global.c

index edfa60cd155c18e9ac67a1fe6ae1476900fed8b7..a66cb82fd6e60af31525ae449b5af56b98cd078c 100644 (file)
@@ -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;