Message ID | 1607777297-22269-1-git-send-email-lennychen@tencent.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | xfs: clean code for setting bma length in xfs_bmapi_write | expand |
On Sat, Dec 12, 2020 at 08:48:17PM +0800, chenlei0x@gmail.com wrote: > From: Lei Chen <lennychen@tencent.com> > > xfs_bmapi_write may need alloc blocks when it encounters a hole > or delay extent. When setting bma.length, it does not need comparing > MAXEXTLEN and the length that the caller wants, because > xfs_bmapi_allocate will handle every thing properly for bma.length. > > Signed-off-by: Lei Chen <lennychen@tencent.com> > --- > fs/xfs/libxfs/xfs_bmap.c | 13 +------------ > 1 file changed, 1 insertion(+), 12 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > index dcf56bc..e1b6ac6 100644 > --- a/fs/xfs/libxfs/xfs_bmap.c > +++ b/fs/xfs/libxfs/xfs_bmap.c > @@ -4417,18 +4417,7 @@ struct xfs_iread_state { > bma.wasdel = wasdelay; > bma.offset = bno; > bma.flags = flags; > - > - /* > - * There's a 32/64 bit type mismatch between the > - * allocation length request (which can be 64 bits in > - * length) and the bma length request, which is > - * xfs_extlen_t and therefore 32 bits. Hence we have to > - * check for 32-bit overflows and handle them here. > - */ > - if (len > (xfs_filblks_t)MAXEXTLEN) > - bma.length = MAXEXTLEN; > - else > - bma.length = len; > + bma.length = len; After refering to the definition of struct xfs_bmalloca, so I think bma.length is still a xfs_extlen_t ===> uint32_t, so I'm afraid the commit a99ebf43f49f ("xfs: fix allocation length overflow in xfs_bmapi_write()") and the reason for adding this is still valid for now? Thanks, Gao Xiang
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index dcf56bc..e1b6ac6 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -4417,18 +4417,7 @@ struct xfs_iread_state { bma.wasdel = wasdelay; bma.offset = bno; bma.flags = flags; - - /* - * There's a 32/64 bit type mismatch between the - * allocation length request (which can be 64 bits in - * length) and the bma length request, which is - * xfs_extlen_t and therefore 32 bits. Hence we have to - * check for 32-bit overflows and handle them here. - */ - if (len > (xfs_filblks_t)MAXEXTLEN) - bma.length = MAXEXTLEN; - else - bma.length = len; + bma.length = len; ASSERT(len > 0); ASSERT(bma.length > 0);