diff options
author | Jie Liu <jeff.liu@oracle.com> | 2013-10-25 02:52:44 -0400 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2013-10-31 17:43:19 -0400 |
commit | bb86d21cba22a045b09d11b71decf5ca7c3d5def (patch) | |
tree | 3de7d5b4537fc3250b01f3ad2e0639ca78167325 /fs/xfs/xfs_inode_fork.c | |
parent | 10e6e65dfcedff63275c3d649d329c044caa8e26 (diff) |
xfs: fix the extent count when allocating an new indirection array entry
At xfs_iext_add(), if extent(s) are being appended to the last page in
the indirection array and the new extent(s) don't fit in the page, the
number of extents(erp->er_extcount) in a new allocated entry should be
the minimum value between count and XFS_LINEAR_EXTS, instead of count.
For now, there is no existing test case can demonstrates a problem with
the er_extcount being set incorrectly here, but it obviously like a bug.
Signed-off-by: Jie Liu <jeff.liu@oracle.com>
Reviewed-by: Ben Myers <bpm@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_inode_fork.c')
-rw-r--r-- | fs/xfs/xfs_inode_fork.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/xfs/xfs_inode_fork.c b/fs/xfs/xfs_inode_fork.c index 22c9837c5d4b..cfee14a83cfe 100644 --- a/fs/xfs/xfs_inode_fork.c +++ b/fs/xfs/xfs_inode_fork.c | |||
@@ -1021,15 +1021,14 @@ xfs_iext_add( | |||
1021 | * the next index needed in the indirection array. | 1021 | * the next index needed in the indirection array. |
1022 | */ | 1022 | */ |
1023 | else { | 1023 | else { |
1024 | int count = ext_diff; | 1024 | uint count = ext_diff; |
1025 | 1025 | ||
1026 | while (count) { | 1026 | while (count) { |
1027 | erp = xfs_iext_irec_new(ifp, erp_idx); | 1027 | erp = xfs_iext_irec_new(ifp, erp_idx); |
1028 | erp->er_extcount = count; | 1028 | erp->er_extcount = min(count, XFS_LINEAR_EXTS); |
1029 | count -= MIN(count, (int)XFS_LINEAR_EXTS); | 1029 | count -= erp->er_extcount; |
1030 | if (count) { | 1030 | if (count) |
1031 | erp_idx++; | 1031 | erp_idx++; |
1032 | } | ||
1033 | } | 1032 | } |
1034 | } | 1033 | } |
1035 | } | 1034 | } |