diff options
| -rw-r--r-- | fs/xfs/xfs_da_btree.c | 5 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2.c | 6 | 
2 files changed, 11 insertions, 0 deletions
| diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c index 9e561a9cefca..a11a8390bf6c 100644 --- a/fs/xfs/xfs_da_btree.c +++ b/fs/xfs/xfs_da_btree.c @@ -1566,11 +1566,14 @@ xfs_da_grow_inode(xfs_da_args_t *args, xfs_dablk_t *new_blkno)  	int nmap, error, w, count, c, got, i, mapi;  	xfs_trans_t *tp;  	xfs_mount_t *mp; +	xfs_drfsbno_t	nblks;  	dp = args->dp;  	mp = dp->i_mount;  	w = args->whichfork;  	tp = args->trans; +	nblks = dp->i_d.di_nblocks; +  	/*  	 * For new directories adjust the file offset and block count.  	 */ @@ -1647,6 +1650,8 @@ xfs_da_grow_inode(xfs_da_args_t *args, xfs_dablk_t *new_blkno)  	}  	if (mapp != &map)  		kmem_free(mapp); +	/* account for newly allocated blocks in reserved blocks total */ +	args->total -= dp->i_d.di_nblocks - nblks;  	*new_blkno = (xfs_dablk_t)bno;  	return 0;  } diff --git a/fs/xfs/xfs_dir2.c b/fs/xfs/xfs_dir2.c index 80e0dc51361c..1afb12278b8d 100644 --- a/fs/xfs/xfs_dir2.c +++ b/fs/xfs/xfs_dir2.c @@ -525,11 +525,13 @@ xfs_dir2_grow_inode(  	xfs_mount_t	*mp;  	int		nmap;		/* number of bmap entries */  	xfs_trans_t	*tp; +	xfs_drfsbno_t	nblks;  	xfs_dir2_trace_args_s("grow_inode", args, space);  	dp = args->dp;  	tp = args->trans;  	mp = dp->i_mount; +	nblks = dp->i_d.di_nblocks;  	/*  	 * Set lowest possible block in the space requested.  	 */ @@ -622,7 +624,11 @@ xfs_dir2_grow_inode(  	 */  	if (mapp != &map)  		kmem_free(mapp); + +	/* account for newly allocated blocks in reserved blocks total */ +	args->total -= dp->i_d.di_nblocks - nblks;  	*dbp = xfs_dir2_da_to_db(mp, (xfs_dablk_t)bno); +  	/*  	 * Update file's size if this is the data space and it grew.  	 */ | 
