xfs: don't try to use the filestream allocator for metadata allocations
xfs_bmap_btalloc_nullfb has two entirely different control flows when using the filestream allocator vs the regular one, but it get the conditionals wrong and ends up mixing the two for metadata allocations. Fix this by adding a missing userdata check and slight refactoring. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
c9eaa447e7
commit
8b90a33f47
|
@ -3566,33 +3566,31 @@ xfs_bmap_btalloc_nullfb(
|
|||
} else
|
||||
notinit = 1;
|
||||
|
||||
if (xfs_inode_is_filestream(ap->ip)) {
|
||||
if (xfs_inode_is_filestream(ap->ip) && ap->userdata) {
|
||||
if (*blen >= args->maxlen)
|
||||
break;
|
||||
|
||||
if (ap->userdata) {
|
||||
/*
|
||||
* If startag is an invalid AG, we've
|
||||
* come here once before and
|
||||
* xfs_filestream_new_ag picked the
|
||||
* best currently available.
|
||||
*
|
||||
* Don't continue looping, since we
|
||||
* could loop forever.
|
||||
*/
|
||||
if (startag == NULLAGNUMBER)
|
||||
break;
|
||||
/*
|
||||
* If startag is an invalid AG, we've
|
||||
* come here once before and
|
||||
* xfs_filestream_new_ag picked the
|
||||
* best currently available.
|
||||
*
|
||||
* Don't continue looping, since we
|
||||
* could loop forever.
|
||||
*/
|
||||
if (startag == NULLAGNUMBER)
|
||||
break;
|
||||
|
||||
error = xfs_filestream_new_ag(ap, &ag);
|
||||
xfs_perag_put(pag);
|
||||
if (error)
|
||||
return error;
|
||||
error = xfs_filestream_new_ag(ap, &ag);
|
||||
xfs_perag_put(pag);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/* loop again to set 'blen'*/
|
||||
startag = NULLAGNUMBER;
|
||||
pag = xfs_perag_get(mp, ag);
|
||||
continue;
|
||||
}
|
||||
/* loop again to set 'blen'*/
|
||||
startag = NULLAGNUMBER;
|
||||
pag = xfs_perag_get(mp, ag);
|
||||
continue;
|
||||
}
|
||||
if (++ag == mp->m_sb.sb_agcount)
|
||||
ag = 0;
|
||||
|
|
Loading…
Reference in New Issue