179
180 block = kmem_alloc(mp->m_dirblksize, KM_SLEEP);
181 memcpy(block, bp->data, mp->m_dirblksize);
182 logflags = XFS_ILOG_CORE;
183 if ((error = xfs_dir2_shrink_inode(args, mp->m_dirdatablk, bp))) {
184 ASSERT(error != ENOSPC);
185 goto out;
186 }
187
188
189
190
191
192
193 dp->i_df.if_flags &= ~XFS_IFEXTENTS;
194 dp->i_df.if_flags |= XFS_IFINLINE;
195 dp->i_d.di_format = XFS_DINODE_FMT_LOCAL;
196 ASSERT(dp->i_df.if_bytes == 0);
197 xfs_idata_realloc(dp, size, XFS_DATA_FORK);
198 logflags |= XFS_ILOG_DDATA;
199
200
201
202 sfp = (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data;
203 memcpy(sfp, sfhp, xfs_dir2_sf_hdr_size(sfhp->i8count));
204 dp->i_d.di_size = size;
205
206
207
208 btp = xfs_dir2_block_tail_p(mp, block);
209 ptr = (char *)block->u;
210 endptr = (char *)xfs_dir2_block_leaf_p(btp);
211 sfep = xfs_dir2_sf_firstentry(sfp);
212
213
214
215
216 while (ptr < endptr) {
217
218
219