diff options
Diffstat (limited to 'fs/xfs/xfs_buf.c')
| -rw-r--r-- | fs/xfs/xfs_buf.c | 12 | 
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 21c243622a79..0abba171aa89 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -345,6 +345,15 @@ xfs_buf_allocate_memory(  	unsigned short		page_count, i;  	xfs_off_t		start, end;  	int			error; +	xfs_km_flags_t		kmflag_mask = 0; + +	/* +	 * assure zeroed buffer for non-read cases. +	 */ +	if (!(flags & XBF_READ)) { +		kmflag_mask |= KM_ZERO; +		gfp_mask |= __GFP_ZERO; +	}  	/*  	 * for buffers that are contained within a single page, just allocate @@ -354,7 +363,8 @@ xfs_buf_allocate_memory(  	size = BBTOB(bp->b_length);  	if (size < PAGE_SIZE) {  		int align_mask = xfs_buftarg_dma_alignment(bp->b_target); -		bp->b_addr = kmem_alloc_io(size, align_mask, KM_NOFS); +		bp->b_addr = kmem_alloc_io(size, align_mask, +					   KM_NOFS | kmflag_mask);  		if (!bp->b_addr) {  			/* low memory - use alloc_page loop instead */  			goto use_alloc_page;  | 
