The end should be start + length - 1.  Also fix the calculation of the
length when seeking for intersection of notify range and device.

Signed-off-by: Shiyang Ruan <[email protected]>
Reviewed-by: Darrick J. Wong <[email protected]>
---
 fs/xfs/xfs_notify_failure.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/xfs/xfs_notify_failure.c b/fs/xfs/xfs_notify_failure.c
index c4078d0ec108..1e2eddb8f90f 100644
--- a/fs/xfs/xfs_notify_failure.c
+++ b/fs/xfs/xfs_notify_failure.c
@@ -61,7 +61,7 @@ xfs_failure_pgcnt(
        end_notify = notify->startblock + notify->blockcount;
        end_cross = min(end_rec, end_notify);
 
-       return XFS_FSB_TO_B(mp, end_cross - start_cross) >> PAGE_SHIFT;
+       return XFS_FSB_TO_B(mp, end_cross - start_cross + 1) >> PAGE_SHIFT;
 }
 
 static int
@@ -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 = ddev_end - offset + 1;
 
        return xfs_dax_notify_ddev_failure(mp, BTOBB(offset), BTOBB(len),
                        mf_flags);
-- 
2.39.2


Reply via email to