diff options
| author | sandeen@sandeen.net <sandeen@sandeen.net> | 2008-11-25 21:20:11 -0600 | 
|---|---|---|
| committer | Lachlan McIlroy <lachlan@redback.melbourne.sgi.com> | 2008-12-02 17:15:36 +1100 | 
| commit | 2ee4fa5cb716eba104a4ef8efe159e1007a2aef6 (patch) | |
| tree | 943c9966c8daa913dff42216bcdc1cc4c1c835da /fs/xfs/xfs_itable.c | |
| parent | 471d59103167c84f17b9bcfee22ed10b44ff206e (diff) | |
| download | olio-linux-3.10-2ee4fa5cb716eba104a4ef8efe159e1007a2aef6.tar.xz olio-linux-3.10-2ee4fa5cb716eba104a4ef8efe159e1007a2aef6.zip  | |
[XFS] Make the bulkstat_one compat ioctl handling more sane
Currently the compat formatter was handled by passing
in "private_data" for the xfs_bulkstat_one formatter,
which was really just another formatter... IMHO this
got confusing.
Instead, just make a new xfs_bulkstat_one_compat
formatter for xfs_bulkstat, and call it via a wrapper.
Also, don't translate the ioctl nrs into their native
counterparts, that just clouds the issue; we're in a
compat handler anyway, just switch on the 32-bit cmds.
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_itable.c')
| -rw-r--r-- | fs/xfs/xfs_itable.c | 24 | 
1 files changed, 20 insertions, 4 deletions
diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c index d4c0de86012..7bd49b87160 100644 --- a/fs/xfs/xfs_itable.c +++ b/fs/xfs/xfs_itable.c @@ -202,13 +202,13 @@ xfs_bulkstat_one_fmt(   * Return stat information for one inode.   * Return 0 if ok, else errno.   */ -int		       		/* error status */ -xfs_bulkstat_one( +int		   	    		/* error status */ +xfs_bulkstat_one_int(  	xfs_mount_t	*mp,		/* mount point for filesystem */  	xfs_ino_t	ino,		/* inode number to get data for */  	void		__user *buffer,	/* buffer to place output in */  	int		ubsize,		/* size of buffer */ -	void		*private_data,	/* my private data */ +	bulkstat_one_fmt_pf formatter,	/* formatter, copy to user */  	xfs_daddr_t	bno,		/* starting bno of inode cluster */  	int		*ubused,	/* bytes used by me */  	void		*dibuff,	/* on-disk inode buffer */ @@ -217,7 +217,6 @@ xfs_bulkstat_one(  	xfs_bstat_t	*buf;		/* return buffer */  	int		error = 0;	/* error value */  	xfs_dinode_t	*dip;		/* dinode inode pointer */ -	bulkstat_one_fmt_pf formatter = private_data ? : xfs_bulkstat_one_fmt;  	dip = (xfs_dinode_t *)dibuff;  	*stat = BULKSTAT_RV_NOTHING; @@ -255,6 +254,23 @@ xfs_bulkstat_one(  	return error;  } +int +xfs_bulkstat_one( +	xfs_mount_t	*mp,		/* mount point for filesystem */ +	xfs_ino_t	ino,		/* inode number to get data for */ +	void		__user *buffer,	/* buffer to place output in */ +	int		ubsize,		/* size of buffer */ +	void		*private_data,	/* my private data */ +	xfs_daddr_t	bno,		/* starting bno of inode cluster */ +	int		*ubused,	/* bytes used by me */ +	void		*dibuff,	/* on-disk inode buffer */ +	int		*stat)		/* BULKSTAT_RV_... */ +{ +	return xfs_bulkstat_one_int(mp, ino, buffer, ubsize, +				    xfs_bulkstat_one_fmt, bno, +				    ubused, dibuff, stat); +} +  /*   * Test to see whether we can use the ondisk inode directly, based   * on the given bulkstat flags, filling in dipp accordingly.  |