GFS2: Fix bmap allocation corner-case bug

This patch solves a corner case during allocation which occurs if both
metadata (indirect) and data blocks are required but there is an
obstacle in the filesystem (e.g. a resource group header or another
allocated block) such that when the allocation is requested only
enough blocks for the metadata are returned.

By changing the exit condition of this loop, we ensure that a
minimum of one data block will always be returned.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>

+1 -1
+1 -1
fs/gfs2/bmap.c
··· 541 541 *ptr++ = cpu_to_be64(bn++); 542 542 break; 543 543 } 544 - } while (state != ALLOC_DATA); 544 + } while ((state != ALLOC_DATA) || !dblock); 545 545 546 546 ip->i_height = height; 547 547 gfs2_add_inode_blocks(&ip->i_inode, alloced);