diff mbox

ext4: let getattr report the right blocks in delalloc+bigalloc.

Message ID 1328025496-3521-1-git-send-email-tm@tao.ma
State Accepted, archived
Headers show

Commit Message

Tao Ma Jan. 31, 2012, 3:58 p.m. UTC
From: Tao Ma <boyu.mt@taobao.com>

In delayed allocation, i_reserved_data_blocks now indicates
clusters, not blocks. So report it in the right number.

This can be easily exposed by the following command:
echo foo > blah; du -hc blah; sync; du -hc blah

Cc: "Theodore Ts'o" <tytso@mit.edu>
Reported-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Tao Ma <boyu.mt@taobao.com>
---
 fs/ext4/inode.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

Comments

Eric Sandeen May 31, 2012, 5:08 p.m. UTC | #1
On 1/31/12 9:58 AM, Tao Ma wrote:
> From: Tao Ma <boyu.mt@taobao.com>
> 
> In delayed allocation, i_reserved_data_blocks now indicates
> clusters, not blocks. So report it in the right number.
> 
> This can be easily exposed by the following command:
> echo foo > blah; du -hc blah; sync; du -hc blah
> 
> Cc: "Theodore Ts'o" <tytso@mit.edu>
> Reported-by: Eric Sandeen <sandeen@redhat.com>
> Signed-off-by: Tao Ma <boyu.mt@taobao.com>

Reviewed-by: Eric Sandeen <sandeen2redhat.com>

It'd be great to get this one merged.

Thanks,
-Eric

> ---
>  fs/ext4/inode.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
> 
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index feaa82f..a5eb8c6 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -4200,7 +4200,8 @@ int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry,
>  	 * will return the blocks that include the delayed allocation
>  	 * blocks for this file.
>  	 */
> -	delalloc_blocks = EXT4_I(inode)->i_reserved_data_blocks;
> +	delalloc_blocks = EXT4_C2B(EXT4_SB(inode->i_sb),
> +				EXT4_I(inode)->i_reserved_data_blocks);
>  
>  	stat->blocks += (delalloc_blocks << inode->i_sb->s_blocksize_bits)>>9;
>  	return 0;

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Theodore Ts'o June 1, 2012, 12:43 a.m. UTC | #2
On Thu, May 31, 2012 at 12:08:50PM -0500, Eric Sandeen wrote:
> On 1/31/12 9:58 AM, Tao Ma wrote:
> > From: Tao Ma <boyu.mt@taobao.com>
> > 
> > In delayed allocation, i_reserved_data_blocks now indicates
> > clusters, not blocks. So report it in the right number.
> > 
> > This can be easily exposed by the following command:
> > echo foo > blah; du -hc blah; sync; du -hc blah
> > 
> > Cc: "Theodore Ts'o" <tytso@mit.edu>
> > Reported-by: Eric Sandeen <sandeen@redhat.com>
> > Signed-off-by: Tao Ma <boyu.mt@taobao.com>
> 
> Reviewed-by: Eric Sandeen <sandeen2redhat.com>
> 
> It'd be great to get this one merged.

I'll merge this, but delalloc and bigalloc is still pretty badly
busted.  But this will make stat return something that is closer to
being correct...

						- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Eric Sandeen June 1, 2012, 3:52 a.m. UTC | #3
On 5/31/12 7:43 PM, Ted Ts'o wrote:
> On Thu, May 31, 2012 at 12:08:50PM -0500, Eric Sandeen wrote:
>> On 1/31/12 9:58 AM, Tao Ma wrote:
>>> From: Tao Ma <boyu.mt@taobao.com>
>>>
>>> In delayed allocation, i_reserved_data_blocks now indicates
>>> clusters, not blocks. So report it in the right number.
>>>
>>> This can be easily exposed by the following command:
>>> echo foo > blah; du -hc blah; sync; du -hc blah
>>>
>>> Cc: "Theodore Ts'o" <tytso@mit.edu>
>>> Reported-by: Eric Sandeen <sandeen@redhat.com>
>>> Signed-off-by: Tao Ma <boyu.mt@taobao.com>
>>
>> Reviewed-by: Eric Sandeen <sandeen2redhat.com>
>>
>> It'd be great to get this one merged.
> 
> I'll merge this, but delalloc and bigalloc is still pretty badly
> busted.  But this will make stat return something that is closer to
> being correct...

Hm what else is busted?  Is there a testcase written?

How much else do you know of that's busted with bigalloc?  :)

(Is this bustedness the reason for not yet having it in the man page?)

-Eric
 
> 						- Ted

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index feaa82f..a5eb8c6 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4200,7 +4200,8 @@  int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry,
 	 * will return the blocks that include the delayed allocation
 	 * blocks for this file.
 	 */
-	delalloc_blocks = EXT4_I(inode)->i_reserved_data_blocks;
+	delalloc_blocks = EXT4_C2B(EXT4_SB(inode->i_sb),
+				EXT4_I(inode)->i_reserved_data_blocks);
 
 	stat->blocks += (delalloc_blocks << inode->i_sb->s_blocksize_bits)>>9;
 	return 0;