xfs_dir2_sf_entry_t	*sfep;		/* shortform entry */ 
xfs_dir2_sf_entry_t	*sfep = NULL;	/* shortform entry */ 
xfs_dir2_sf_addname(	xfs_da_args_t		*args)		/* operation arguments */{	int			add_entsize;	/* size of the new entry */	xfs_inode_t		*dp;		/* incore directory inode */	int			error;		/* error return value */	int			incr_isize;	/* total change in size */	int			new_isize;	/* di_size after adding name */	int			objchange;	/* changing to 8-byte inodes */	xfs_dir2_data_aoff_t	offset;		/* offset for new entry */	int			old_isize;	/* di_size before adding name */	int			pick;		/* which algorithm to use */	xfs_dir2_sf_t		*sfp;		/* shortform structure */	xfs_dir2_sf_entry_t	*sfep;		/* shortform entry */	xfs_dir2_trace_args("sf_addname", args);	ASSERT(xfs_dir2_sf_lookup(args) == ENOENT);	dp = args->dp;	ASSERT(dp->i_df.if_flags & XFS_IFINLINE);	/*	 * Make sure the shortform value has some of its header.	 */	if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) {		ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount));		return XFS_ERROR(EIO);	}	ASSERT(dp->i_df.if_bytes == dp->i_d.di_size);	ASSERT(dp->i_df.if_u1.if_data != NULL);	sfp = (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data;	ASSERT(dp->i_d.di_size >= XFS_DIR2_SF_HDR_SIZE(sfp->hdr.i8count));	/*	 * Compute entry (and change in) size.	 */	add_entsize = XFS_DIR2_SF_ENTSIZE_BYNAME(sfp, args->namelen);	incr_isize = add_entsize;	objchange = 0;#if XFS_BIG_INUMS	/*	 * Do we have to change to 8 byte inodes?	 */	if (args->inumber > XFS_DIR2_MAX_SHORT_INUM && sfp->hdr.i8count == 0) {		/*		 * Yes, adjust the entry size and the total size.		 */		add_entsize +=			(uint)sizeof(xfs_dir2_ino8_t) -			(uint)sizeof(xfs_dir2_ino4_t);		incr_isize +=			(sfp->hdr.count + 2) *			((uint)sizeof(xfs_dir2_ino8_t) -			 (uint)sizeof(xfs_dir2_ino4_t));		objchange = 1;	}#endif	old_isize = (int)dp->i_d.di_size;	new_isize = old_isize + incr_isize;	/*	 * Won't fit as shortform any more (due to size),	 * or the pick routine says it won't (due to offset values).	 */	if (new_isize > XFS_IFORK_DSIZE(dp) ||	    (pick =	     xfs_dir2_sf_addname_pick(args, objchange, &sfep, &offset)) == 0) {		/*		 * Just checking or no space reservation, it doesn't fit.		 */		if (args->justcheck || args->total == 0)			return XFS_ERROR(ENOSPC);		/*		 * Convert to block form then add the name.		 */		error = xfs_dir2_sf_to_block(args);		if (error)			return error;		return xfs_dir2_block_addname(args);	}	/*	 * Just checking, it fits.	 */	if (args->justcheck)		return 0;	/*	 * Do it the easy way - just add it at the end.	 */	if (pick == 1)		xfs_dir2_sf_addname_easy(args, sfep, offset, new_isize);	/*	 * Do it the hard way - look for a place to insert the new entry.	 * Convert to 8 byte inode numbers first if necessary.	 */	else {		ASSERT(pick == 2);#if XFS_BIG_INUMS		if (objchange)			xfs_dir2_sf_toino8(args);#endif		xfs_dir2_sf_addname_hard(args, objchange, new_isize);	}	xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/5bde1ba99c8243617277f37897189c799e398baf/xfs_dir2_sf.c/clean/fs/xfs/xfs_dir2_sf.c