diff options
| -rw-r--r-- | fs/xfs/xfs_dir2_block.c | 7 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2_leaf.c | 6 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2_sf.c | 15 |
3 files changed, 15 insertions, 13 deletions
diff --git a/fs/xfs/xfs_dir2_block.c b/fs/xfs/xfs_dir2_block.c index e2fa0a1d8e96..e1f0a06aaf04 100644 --- a/fs/xfs/xfs_dir2_block.c +++ b/fs/xfs/xfs_dir2_block.c | |||
| @@ -517,9 +517,9 @@ xfs_dir2_block_getdents( | |||
| 517 | /* | 517 | /* |
| 518 | * If it didn't fit, set the final offset to here & return. | 518 | * If it didn't fit, set the final offset to here & return. |
| 519 | */ | 519 | */ |
| 520 | if (filldir(dirent, dep->name, dep->namelen, cook, | 520 | if (filldir(dirent, dep->name, dep->namelen, cook & 0x7fffffff, |
| 521 | ino, DT_UNKNOWN)) { | 521 | ino, DT_UNKNOWN)) { |
| 522 | *offset = cook; | 522 | *offset = cook & 0x7fffffff; |
| 523 | xfs_da_brelse(NULL, bp); | 523 | xfs_da_brelse(NULL, bp); |
| 524 | return 0; | 524 | return 0; |
| 525 | } | 525 | } |
| @@ -529,7 +529,8 @@ xfs_dir2_block_getdents( | |||
| 529 | * Reached the end of the block. | 529 | * Reached the end of the block. |
| 530 | * Set the offset to a non-existent block 1 and return. | 530 | * Set the offset to a non-existent block 1 and return. |
| 531 | */ | 531 | */ |
| 532 | *offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0); | 532 | *offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0) & |
| 533 | 0x7fffffff; | ||
| 533 | xfs_da_brelse(NULL, bp); | 534 | xfs_da_brelse(NULL, bp); |
| 534 | return 0; | 535 | return 0; |
| 535 | } | 536 | } |
diff --git a/fs/xfs/xfs_dir2_leaf.c b/fs/xfs/xfs_dir2_leaf.c index 93535992cb60..ef805a374eec 100644 --- a/fs/xfs/xfs_dir2_leaf.c +++ b/fs/xfs/xfs_dir2_leaf.c | |||
| @@ -1092,7 +1092,7 @@ xfs_dir2_leaf_getdents( | |||
| 1092 | * Won't fit. Return to caller. | 1092 | * Won't fit. Return to caller. |
| 1093 | */ | 1093 | */ |
| 1094 | if (filldir(dirent, dep->name, dep->namelen, | 1094 | if (filldir(dirent, dep->name, dep->namelen, |
| 1095 | xfs_dir2_byte_to_dataptr(mp, curoff), | 1095 | xfs_dir2_byte_to_dataptr(mp, curoff) & 0x7fffffff, |
| 1096 | ino, DT_UNKNOWN)) | 1096 | ino, DT_UNKNOWN)) |
| 1097 | break; | 1097 | break; |
| 1098 | 1098 | ||
| @@ -1108,9 +1108,9 @@ xfs_dir2_leaf_getdents( | |||
| 1108 | * All done. Set output offset value to current offset. | 1108 | * All done. Set output offset value to current offset. |
| 1109 | */ | 1109 | */ |
| 1110 | if (curoff > xfs_dir2_dataptr_to_byte(mp, XFS_DIR2_MAX_DATAPTR)) | 1110 | if (curoff > xfs_dir2_dataptr_to_byte(mp, XFS_DIR2_MAX_DATAPTR)) |
| 1111 | *offset = XFS_DIR2_MAX_DATAPTR; | 1111 | *offset = XFS_DIR2_MAX_DATAPTR & 0x7fffffff; |
| 1112 | else | 1112 | else |
| 1113 | *offset = xfs_dir2_byte_to_dataptr(mp, curoff); | 1113 | *offset = xfs_dir2_byte_to_dataptr(mp, curoff) & 0x7fffffff; |
| 1114 | kmem_free(map); | 1114 | kmem_free(map); |
| 1115 | if (bp) | 1115 | if (bp) |
| 1116 | xfs_da_brelse(NULL, bp); | 1116 | xfs_da_brelse(NULL, bp); |
diff --git a/fs/xfs/xfs_dir2_sf.c b/fs/xfs/xfs_dir2_sf.c index b46af0013ec9..a8a8a6efad5b 100644 --- a/fs/xfs/xfs_dir2_sf.c +++ b/fs/xfs/xfs_dir2_sf.c | |||
| @@ -752,8 +752,8 @@ xfs_dir2_sf_getdents( | |||
| 752 | #if XFS_BIG_INUMS | 752 | #if XFS_BIG_INUMS |
| 753 | ino += mp->m_inoadd; | 753 | ino += mp->m_inoadd; |
| 754 | #endif | 754 | #endif |
| 755 | if (filldir(dirent, ".", 1, dot_offset, ino, DT_DIR)) { | 755 | if (filldir(dirent, ".", 1, dot_offset & 0x7fffffff, ino, DT_DIR)) { |
| 756 | *offset = dot_offset; | 756 | *offset = dot_offset & 0x7fffffff; |
| 757 | return 0; | 757 | return 0; |
| 758 | } | 758 | } |
| 759 | } | 759 | } |
| @@ -766,8 +766,8 @@ xfs_dir2_sf_getdents( | |||
| 766 | #if XFS_BIG_INUMS | 766 | #if XFS_BIG_INUMS |
| 767 | ino += mp->m_inoadd; | 767 | ino += mp->m_inoadd; |
| 768 | #endif | 768 | #endif |
| 769 | if (filldir(dirent, "..", 2, dotdot_offset, ino, DT_DIR)) { | 769 | if (filldir(dirent, "..", 2, dotdot_offset & 0x7fffffff, ino, DT_DIR)) { |
| 770 | *offset = dotdot_offset; | 770 | *offset = dotdot_offset & 0x7fffffff; |
| 771 | return 0; | 771 | return 0; |
| 772 | } | 772 | } |
| 773 | } | 773 | } |
| @@ -791,14 +791,15 @@ xfs_dir2_sf_getdents( | |||
| 791 | #endif | 791 | #endif |
| 792 | 792 | ||
| 793 | if (filldir(dirent, sfep->name, sfep->namelen, | 793 | if (filldir(dirent, sfep->name, sfep->namelen, |
| 794 | off, ino, DT_UNKNOWN)) { | 794 | off & 0x7fffffff, ino, DT_UNKNOWN)) { |
| 795 | *offset = off; | 795 | *offset = off & 0x7fffffff; |
| 796 | return 0; | 796 | return 0; |
| 797 | } | 797 | } |
| 798 | sfep = xfs_dir2_sf_nextentry(sfp, sfep); | 798 | sfep = xfs_dir2_sf_nextentry(sfp, sfep); |
| 799 | } | 799 | } |
| 800 | 800 | ||
| 801 | *offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0); | 801 | *offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0) & |
| 802 | 0x7fffffff; | ||
| 802 | return 0; | 803 | return 0; |
| 803 | } | 804 | } |
| 804 | 805 | ||
