Message ID | 1675522718-88-2-git-send-email-ruansy.fnst@fujitsu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm, pmem, xfs: Introduce MF_MEM_REMOVE for unbind | expand |
On Sat, Feb 04, 2023 at 02:58:36PM +0000, Shiyang Ruan wrote: > @@ -222,8 +222,8 @@ xfs_dax_notify_failure( > len -= ddev_start - offset; > offset = 0; > } > - if (offset + len > ddev_end) > - len -= ddev_end - offset; > + if (offset + len - 1 > ddev_end) > + len -= offset + len - 1 - ddev_end; This _looks_ wrong. Are you sure it shouldn't be: len = ddev_end - offset + 1;
在 2023/2/5 19:42, Matthew Wilcox 写道: > On Sat, Feb 04, 2023 at 02:58:36PM +0000, Shiyang Ruan wrote: >> @@ -222,8 +222,8 @@ xfs_dax_notify_failure( >> len -= ddev_start - offset; >> offset = 0; >> } >> - if (offset + len > ddev_end) >> - len -= ddev_end - offset; >> + if (offset + len - 1 > ddev_end) >> + len -= offset + len - 1 - ddev_end; > > This _looks_ wrong. Are you sure it shouldn't be: > > len = ddev_end - offset + 1; > It is to make sure the range won't beyond the end of device. But actually, both of us are rgiht. Mine: len -= offset + len - 1 - ddev_end; => len = len - (offset + len - 1 - ddev_end); => len = len - offset - len + 1 + ddev_end; => len = ddev_end - offset + 1; --> Yours I forgot to simplify it. Will fix. -- Thanks, Ruan.
diff --git a/fs/xfs/xfs_notify_failure.c b/fs/xfs/xfs_notify_failure.c index c4078d0ec108..3830f908e215 100644 --- a/fs/xfs/xfs_notify_failure.c +++ b/fs/xfs/xfs_notify_failure.c @@ -114,7 +114,7 @@ xfs_dax_notify_ddev_failure( int error = 0; xfs_fsblock_t fsbno = XFS_DADDR_TO_FSB(mp, daddr); xfs_agnumber_t agno = XFS_FSB_TO_AGNO(mp, fsbno); - xfs_fsblock_t end_fsbno = XFS_DADDR_TO_FSB(mp, daddr + bblen); + xfs_fsblock_t end_fsbno = XFS_DADDR_TO_FSB(mp, daddr + bblen - 1); xfs_agnumber_t end_agno = XFS_FSB_TO_AGNO(mp, end_fsbno); error = xfs_trans_alloc_empty(mp, &tp); @@ -210,7 +210,7 @@ xfs_dax_notify_failure( ddev_end = ddev_start + bdev_nr_bytes(mp->m_ddev_targp->bt_bdev) - 1; /* Ignore the range out of filesystem area */ - if (offset + len < ddev_start) + if (offset + len - 1 < ddev_start) return -ENXIO; if (offset > ddev_end) return -ENXIO; @@ -222,8 +222,8 @@ xfs_dax_notify_failure( len -= ddev_start - offset; offset = 0; } - if (offset + len > ddev_end) - len -= ddev_end - offset; + if (offset + len - 1 > ddev_end) + len -= offset + len - 1 - ddev_end; return xfs_dax_notify_ddev_failure(mp, BTOBB(offset), BTOBB(len), mf_flags);