xfs_tosspages() takes a closed interval as an argument, take this into account when rounding down to the last byte of the last complete page. If the request consists of a single partial page, there will be nothing to toss. Signed-off-by: Andrew Dahl <adahl@xxxxxxx> --- Index: xfs/fs/xfs/xfs_fs_subr.c =================================================================== --- xfs.orig/fs/xfs/xfs_fs_subr.c +++ xfs/fs/xfs/xfs_fs_subr.c @@ -32,9 +32,17 @@ xfs_tosspages( xfs_off_t last, int fiopt) { - /* can't toss partial tail pages, so mask them out */ - last &= ~(PAGE_SIZE - 1); - truncate_inode_pages_range(VFS_I(ip)->i_mapping, first, last - 1); + /* + * Can't toss partial tail pages, so mask them out. If the only + * page to toss was a partial tail, there will be nothing left + * to do. + */ + if (last != -1) { + last = ((last + 1) & PAGE_MASK) - 1; + if (last < first) + return; + } + truncate_inode_pages_range(VFS_I(ip)->i_mapping, first, last); } int Index: xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- xfs.orig/fs/xfs/xfs_vnodeops.c +++ xfs/fs/xfs/xfs_vnodeops.c @@ -2172,7 +2172,7 @@ xfs_change_file_space( switch (cmd) { case XFS_IOC_ZERO_RANGE: prealloc_type |= XFS_BMAPI_CONVERT; - xfs_tosspages(ip, startoffset, startoffset + bf->l_len, 0); + xfs_tosspages(ip, startoffset, bf->l_len ? startoffset + llen : -1, 0); /* FALLTHRU */ case XFS_IOC_RESVSP: case XFS_IOC_RESVSP64: _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs