mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	[XFS] Factor out code for whether inode has attributes or not.
SGI-PV: 983394 SGI-Modid: xfs-linux-melb:xfs-kern:31323a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Tim Shimmin <tes@sgi.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
		
							parent
							
								
									ae23a5e87d
								
							
						
					
					
						commit
						caf8aabdbc
					
				
					 1 changed files with 23 additions and 28 deletions
				
			
		|  | @ -111,6 +111,17 @@ xfs_attr_name_to_xname( | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| STATIC int | ||||
| xfs_inode_hasattr( | ||||
| 	struct xfs_inode	*ip) | ||||
| { | ||||
| 	if (!XFS_IFORK_Q(ip) || | ||||
| 	    (ip->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && | ||||
| 	     ip->i_d.di_anextents == 0)) | ||||
| 		return 0; | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| /*========================================================================
 | ||||
|  * Overall external interface routines. | ||||
|  *========================================================================*/ | ||||
|  | @ -122,10 +133,8 @@ xfs_attr_fetch(xfs_inode_t *ip, struct xfs_name *name, | |||
| 	xfs_da_args_t   args; | ||||
| 	int             error; | ||||
| 
 | ||||
| 	if ((XFS_IFORK_Q(ip) == 0) || | ||||
| 	    (ip->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && | ||||
| 	     ip->i_d.di_anextents == 0)) | ||||
| 		return(ENOATTR); | ||||
| 	if (!xfs_inode_hasattr(ip)) | ||||
| 		return ENOATTR; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Fill in the arg structure for this request. | ||||
|  | @ -143,11 +152,7 @@ xfs_attr_fetch(xfs_inode_t *ip, struct xfs_name *name, | |||
| 	/*
 | ||||
| 	 * Decide on what work routines to call based on the inode size. | ||||
| 	 */ | ||||
| 	if (XFS_IFORK_Q(ip) == 0 || | ||||
| 	    (ip->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && | ||||
| 	     ip->i_d.di_anextents == 0)) { | ||||
| 		error = XFS_ERROR(ENOATTR); | ||||
| 	} else if (ip->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) { | ||||
| 	if (ip->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) { | ||||
| 		error = xfs_attr_shortform_getvalue(&args); | ||||
| 	} else if (xfs_bmap_one_block(ip, XFS_ATTR_FORK)) { | ||||
| 		error = xfs_attr_leaf_get(&args); | ||||
|  | @ -523,9 +528,7 @@ xfs_attr_remove_int(xfs_inode_t *dp, struct xfs_name *name, int flags) | |||
| 	/*
 | ||||
| 	 * Decide on what work routines to call based on the inode size. | ||||
| 	 */ | ||||
| 	if (XFS_IFORK_Q(dp) == 0 || | ||||
| 	    (dp->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && | ||||
| 	     dp->i_d.di_anextents == 0)) { | ||||
| 	if (!xfs_inode_hasattr(dp)) { | ||||
| 		error = XFS_ERROR(ENOATTR); | ||||
| 		goto out; | ||||
| 	} | ||||
|  | @ -595,11 +598,9 @@ xfs_attr_remove( | |||
| 		return error; | ||||
| 
 | ||||
| 	xfs_ilock(dp, XFS_ILOCK_SHARED); | ||||
| 	if (XFS_IFORK_Q(dp) == 0 || | ||||
| 		   (dp->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && | ||||
| 		    dp->i_d.di_anextents == 0)) { | ||||
| 	if (!xfs_inode_hasattr(dp)) { | ||||
| 		xfs_iunlock(dp, XFS_ILOCK_SHARED); | ||||
| 		return(XFS_ERROR(ENOATTR)); | ||||
| 		return XFS_ERROR(ENOATTR); | ||||
| 	} | ||||
| 	xfs_iunlock(dp, XFS_ILOCK_SHARED); | ||||
| 
 | ||||
|  | @ -615,9 +616,7 @@ xfs_attr_list_int(xfs_attr_list_context_t *context) | |||
| 	/*
 | ||||
| 	 * Decide on what work routines to call based on the inode size. | ||||
| 	 */ | ||||
| 	if (XFS_IFORK_Q(dp) == 0 || | ||||
| 	    (dp->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && | ||||
| 	     dp->i_d.di_anextents == 0)) { | ||||
| 	if (!xfs_inode_hasattr(dp)) { | ||||
| 		error = 0; | ||||
| 	} else if (dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) { | ||||
| 		error = xfs_attr_shortform_list(context); | ||||
|  | @ -810,12 +809,10 @@ xfs_attr_inactive(xfs_inode_t *dp) | |||
| 	ASSERT(! XFS_NOT_DQATTACHED(mp, dp)); | ||||
| 
 | ||||
| 	xfs_ilock(dp, XFS_ILOCK_SHARED); | ||||
| 	if ((XFS_IFORK_Q(dp) == 0) || | ||||
| 	    (dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) || | ||||
| 	    (dp->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && | ||||
| 	     dp->i_d.di_anextents == 0)) { | ||||
| 	if (!xfs_inode_hasattr(dp) || | ||||
| 	    dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) { | ||||
| 		xfs_iunlock(dp, XFS_ILOCK_SHARED); | ||||
| 		return(0); | ||||
| 		return 0; | ||||
| 	} | ||||
| 	xfs_iunlock(dp, XFS_ILOCK_SHARED); | ||||
| 
 | ||||
|  | @ -848,10 +845,8 @@ xfs_attr_inactive(xfs_inode_t *dp) | |||
| 	/*
 | ||||
| 	 * Decide on what work routines to call based on the inode size. | ||||
| 	 */ | ||||
| 	if ((XFS_IFORK_Q(dp) == 0) || | ||||
| 	    (dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) || | ||||
| 	    (dp->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && | ||||
| 	     dp->i_d.di_anextents == 0)) { | ||||
| 	if (!xfs_inode_hasattr(dp) || | ||||
| 	    dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) { | ||||
| 		error = 0; | ||||
| 		goto out; | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christoph Hellwig
						Christoph Hellwig