|
@@ -126,13 +126,12 @@ xfs_dir2_block_sfsize(
|
|
|
/*
|
|
|
* Calculate the new size, see if we should give up yet.
|
|
|
*/
|
|
|
- size = xfs_dir2_sf_hdr_size(i8count) + /* header */
|
|
|
- count + /* namelen */
|
|
|
- count * (uint)sizeof(xfs_dir2_sf_off_t) + /* offset */
|
|
|
- namelen + /* name */
|
|
|
- (i8count ? /* inumber */
|
|
|
- (uint)sizeof(xfs_dir2_ino8_t) * count :
|
|
|
- (uint)sizeof(xfs_dir2_ino4_t) * count);
|
|
|
+ size = xfs_dir2_sf_hdr_size(i8count) + /* header */
|
|
|
+ count * 3 * sizeof(u8) + /* namelen + offset */
|
|
|
+ namelen + /* name */
|
|
|
+ (i8count ? /* inumber */
|
|
|
+ count * XFS_INO64_SIZE :
|
|
|
+ count * XFS_INO32_SIZE);
|
|
|
if (size > XFS_IFORK_DSIZE(dp))
|
|
|
return size; /* size value is a failure */
|
|
|
}
|
|
@@ -319,10 +318,7 @@ xfs_dir2_sf_addname(
|
|
|
/*
|
|
|
* Yes, adjust the inode size. old count + (parent + new)
|
|
|
*/
|
|
|
- incr_isize +=
|
|
|
- (sfp->count + 2) *
|
|
|
- ((uint)sizeof(xfs_dir2_ino8_t) -
|
|
|
- (uint)sizeof(xfs_dir2_ino4_t));
|
|
|
+ incr_isize += (sfp->count + 2) * XFS_INO64_DIFF;
|
|
|
objchange = 1;
|
|
|
}
|
|
|
|
|
@@ -897,11 +893,7 @@ xfs_dir2_sf_replace(
|
|
|
int error; /* error return value */
|
|
|
int newsize; /* new inode size */
|
|
|
|
|
|
- newsize =
|
|
|
- dp->i_df.if_bytes +
|
|
|
- (sfp->count + 1) *
|
|
|
- ((uint)sizeof(xfs_dir2_ino8_t) -
|
|
|
- (uint)sizeof(xfs_dir2_ino4_t));
|
|
|
+ newsize = dp->i_df.if_bytes + (sfp->count + 1) * XFS_INO64_DIFF;
|
|
|
/*
|
|
|
* Won't fit as shortform, convert to block then do replace.
|
|
|
*/
|
|
@@ -1022,10 +1014,7 @@ xfs_dir2_sf_toino4(
|
|
|
/*
|
|
|
* Compute the new inode size.
|
|
|
*/
|
|
|
- newsize =
|
|
|
- oldsize -
|
|
|
- (oldsfp->count + 1) *
|
|
|
- ((uint)sizeof(xfs_dir2_ino8_t) - (uint)sizeof(xfs_dir2_ino4_t));
|
|
|
+ newsize = oldsize - (oldsfp->count + 1) * XFS_INO64_DIFF;
|
|
|
xfs_idata_realloc(dp, -oldsize, XFS_DATA_FORK);
|
|
|
xfs_idata_realloc(dp, newsize, XFS_DATA_FORK);
|
|
|
/*
|
|
@@ -1048,7 +1037,7 @@ xfs_dir2_sf_toino4(
|
|
|
i++, sfep = dp->d_ops->sf_nextentry(sfp, sfep),
|
|
|
oldsfep = dp->d_ops->sf_nextentry(oldsfp, oldsfep)) {
|
|
|
sfep->namelen = oldsfep->namelen;
|
|
|
- sfep->offset = oldsfep->offset;
|
|
|
+ memcpy(sfep->offset, oldsfep->offset, sizeof(sfep->offset));
|
|
|
memcpy(sfep->name, oldsfep->name, sfep->namelen);
|
|
|
dp->d_ops->sf_put_ino(sfp, sfep,
|
|
|
dp->d_ops->sf_get_ino(oldsfp, oldsfep));
|
|
@@ -1098,10 +1087,7 @@ xfs_dir2_sf_toino8(
|
|
|
/*
|
|
|
* Compute the new inode size (nb: entry count + 1 for parent)
|
|
|
*/
|
|
|
- newsize =
|
|
|
- oldsize +
|
|
|
- (oldsfp->count + 1) *
|
|
|
- ((uint)sizeof(xfs_dir2_ino8_t) - (uint)sizeof(xfs_dir2_ino4_t));
|
|
|
+ newsize = oldsize + (oldsfp->count + 1) * XFS_INO64_DIFF;
|
|
|
xfs_idata_realloc(dp, -oldsize, XFS_DATA_FORK);
|
|
|
xfs_idata_realloc(dp, newsize, XFS_DATA_FORK);
|
|
|
/*
|
|
@@ -1124,7 +1110,7 @@ xfs_dir2_sf_toino8(
|
|
|
i++, sfep = dp->d_ops->sf_nextentry(sfp, sfep),
|
|
|
oldsfep = dp->d_ops->sf_nextentry(oldsfp, oldsfep)) {
|
|
|
sfep->namelen = oldsfep->namelen;
|
|
|
- sfep->offset = oldsfep->offset;
|
|
|
+ memcpy(sfep->offset, oldsfep->offset, sizeof(sfep->offset));
|
|
|
memcpy(sfep->name, oldsfep->name, sfep->namelen);
|
|
|
dp->d_ops->sf_put_ino(sfp, sfep,
|
|
|
dp->d_ops->sf_get_ino(oldsfp, oldsfep));
|