Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 556b8b16 authored by Barry Naujok's avatar Barry Naujok Committed by Lachlan McIlroy
Browse files

[XFS] remove bhv_vname_t and xfs_rename code



SGI-PV: 976035
SGI-Modid: xfs-linux-melb:xfs-kern:30804a

Signed-off-by: default avatarBarry Naujok <bnaujok@sgi.com>
Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
parent 7c9ef85c
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include "xfs_trans.h"
#include "xfs_sb.h"
#include "xfs_ag.h"
#include "xfs_dir2.h"
#include "xfs_dmapi.h"
#include "xfs_mount.h"
#include "xfs_export.h"
@@ -30,8 +31,6 @@
#include "xfs_inode.h"
#include "xfs_vfsops.h"

static struct dentry dotdot = { .d_name.name = "..", .d_name.len = 2, };

/*
 * Note that we only accept fileids which are long enough rather than allow
 * the parent generation number to default to zero.  XFS considers zero a
@@ -216,7 +215,7 @@ xfs_fs_get_parent(
	struct xfs_inode	*cip;
	struct dentry		*parent;

	error = xfs_lookup(XFS_I(child->d_inode), &dotdot, &cip);
	error = xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip);
	if (unlikely(error))
		return ERR_PTR(-error);

+41 −14
Original line number Diff line number Diff line
@@ -239,6 +239,15 @@ xfs_init_security(
	return error;
}

static void
xfs_dentry_to_name(
	struct xfs_name	*namep,
	struct dentry	*dentry)
{
	namep->name = dentry->d_name.name;
	namep->len = dentry->d_name.len;
}

STATIC void
xfs_cleanup_inode(
	struct inode	*dir,
@@ -246,20 +255,19 @@ xfs_cleanup_inode(
	struct dentry	*dentry,
	int		mode)
{
	struct dentry   teardown = {};
	struct xfs_name	teardown;

	/* Oh, the horror.
	 * If we can't add the ACL or we fail in
	 * xfs_init_security we must back out.
	 * ENOSPC can hit here, among other things.
	 */
	teardown.d_inode = inode;
	teardown.d_name = dentry->d_name;
	xfs_dentry_to_name(&teardown, dentry);

	if (S_ISDIR(mode))
		xfs_rmdir(XFS_I(dir), &teardown);
		xfs_rmdir(XFS_I(dir), &teardown, XFS_I(inode));
	else
		xfs_remove(XFS_I(dir), &teardown);
		xfs_remove(XFS_I(dir), &teardown, XFS_I(inode));
	iput(inode);
}

@@ -273,6 +281,7 @@ xfs_vn_mknod(
	struct inode	*inode;
	struct xfs_inode *ip = NULL;
	xfs_acl_t	*default_acl = NULL;
	struct xfs_name	name;
	attrexists_t	test_default_acl = _ACL_DEFAULT_EXISTS;
	int		error;

@@ -293,6 +302,8 @@ xfs_vn_mknod(
		}
	}

	xfs_dentry_to_name(&name, dentry);

	if (IS_POSIXACL(dir) && !default_acl)
		mode &= ~current->fs->umask;

@@ -303,10 +314,10 @@ xfs_vn_mknod(
	case S_IFSOCK:
		rdev = sysv_encode_dev(rdev);
	case S_IFREG:
		error = xfs_create(XFS_I(dir), dentry, mode, rdev, &ip, NULL);
		error = xfs_create(XFS_I(dir), &name, mode, rdev, &ip, NULL);
		break;
	case S_IFDIR:
		error = xfs_mkdir(XFS_I(dir), dentry, mode, &ip, NULL);
		error = xfs_mkdir(XFS_I(dir), &name, mode, &ip, NULL);
		break;
	default:
		error = EINVAL;
@@ -371,12 +382,14 @@ xfs_vn_lookup(
	struct nameidata *nd)
{
	struct xfs_inode *cip;
	struct xfs_name	name;
	int		error;

	if (dentry->d_name.len >= MAXNAMELEN)
		return ERR_PTR(-ENAMETOOLONG);

	error = xfs_lookup(XFS_I(dir), dentry, &cip);
	xfs_dentry_to_name(&name, dentry);
	error = xfs_lookup(XFS_I(dir), &name, &cip);
	if (unlikely(error)) {
		if (unlikely(error != ENOENT))
			return ERR_PTR(-error);
@@ -394,12 +407,14 @@ xfs_vn_link(
	struct dentry	*dentry)
{
	struct inode	*inode;	/* inode of guy being linked to */
	struct xfs_name	name;
	int		error;

	inode = old_dentry->d_inode;
	xfs_dentry_to_name(&name, dentry);

	igrab(inode);
	error = xfs_link(XFS_I(dir), XFS_I(inode), dentry);
	error = xfs_link(XFS_I(dir), XFS_I(inode), &name);
	if (unlikely(error)) {
		iput(inode);
		return -error;
@@ -417,11 +432,13 @@ xfs_vn_unlink(
	struct dentry	*dentry)
{
	struct inode	*inode;
	struct xfs_name	name;
	int		error;

	inode = dentry->d_inode;
	xfs_dentry_to_name(&name, dentry);

	error = xfs_remove(XFS_I(dir), dentry);
	error = xfs_remove(XFS_I(dir), &name, XFS_I(inode));
	if (likely(!error)) {
		xfs_validate_fields(dir);	/* size needs update */
		xfs_validate_fields(inode);
@@ -437,14 +454,15 @@ xfs_vn_symlink(
{
	struct inode	*inode;
	struct xfs_inode *cip = NULL;
	struct xfs_name	name;
	int		error;
	mode_t		mode;

	mode = S_IFLNK |
		(irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO);
	xfs_dentry_to_name(&name, dentry);

	error = xfs_symlink(XFS_I(dir), dentry, (char *)symname, mode,
			    &cip, NULL);
	error = xfs_symlink(XFS_I(dir), &name, symname, mode, &cip, NULL);
	if (unlikely(error))
		goto out;

@@ -471,9 +489,12 @@ xfs_vn_rmdir(
	struct dentry	*dentry)
{
	struct inode	*inode = dentry->d_inode;
	struct xfs_name	name;
	int		error;

	error = xfs_rmdir(XFS_I(dir), dentry);
	xfs_dentry_to_name(&name, dentry);

	error = xfs_rmdir(XFS_I(dir), &name, XFS_I(inode));
	if (likely(!error)) {
		xfs_validate_fields(inode);
		xfs_validate_fields(dir);
@@ -489,9 +510,15 @@ xfs_vn_rename(
	struct dentry	*ndentry)
{
	struct inode	*new_inode = ndentry->d_inode;
	struct xfs_name	oname;
	struct xfs_name	nname;
	int		error;

	error = xfs_rename(XFS_I(odir), odentry, XFS_I(ndir), ndentry);
	xfs_dentry_to_name(&oname, odentry);
	xfs_dentry_to_name(&nname, ndentry);

	error = xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode),
							XFS_I(ndir), &nname);
	if (likely(!error)) {
		if (new_inode)
			xfs_validate_fields(new_inode);
+0 −9
Original line number Diff line number Diff line
@@ -23,8 +23,6 @@ struct bhv_vattr;
struct xfs_iomap;
struct attrlist_cursor_kern;

typedef struct dentry	bhv_vname_t;
typedef __u64		bhv_vnumber_t;
typedef struct inode	bhv_vnode_t;

#define VN_ISLNK(vp)	S_ISLNK((vp)->i_mode)
@@ -210,13 +208,6 @@ static inline bhv_vnode_t *vn_grab(bhv_vnode_t *vp)
	return inode ? vn_from_inode(inode) : NULL;
}

/*
 * Vname handling macros.
 */
#define VNAME(dentry)		((char *) (dentry)->d_name.name)
#define VNAMELEN(dentry)	((dentry)->d_name.len)
#define VNAME_TO_INODE(dentry)	(XFS_I((dentry)->d_inode))

/*
 * Dealing with bad inodes
 */
+28 −34
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#include "xfs_error.h"
#include "xfs_vnodeops.h"

struct xfs_name xfs_name_dotdot = {"..", 2};

void
xfs_dir_mount(
@@ -146,8 +147,7 @@ int
xfs_dir_createname(
	xfs_trans_t		*tp,
	xfs_inode_t		*dp,
	char			*name,
	int			namelen,
	struct xfs_name		*name,
	xfs_ino_t		inum,		/* new entry inode number */
	xfs_fsblock_t		*first,		/* bmap's firstblock */
	xfs_bmap_free_t		*flist,		/* bmap's freeblock list */
@@ -162,9 +162,9 @@ xfs_dir_createname(
		return rval;
	XFS_STATS_INC(xs_dir_create);

	args.name = name;
	args.namelen = namelen;
	args.hashval = xfs_da_hashname(name, namelen);
	args.name = name->name;
	args.namelen = name->len;
	args.hashval = xfs_da_hashname(name->name, name->len);
	args.inumber = inum;
	args.dp = dp;
	args.firstblock = first;
@@ -197,8 +197,7 @@ int
xfs_dir_lookup(
	xfs_trans_t	*tp,
	xfs_inode_t	*dp,
	char		*name,
	int		namelen,
	struct xfs_name	*name,
	xfs_ino_t	*inum)		/* out: inode number */
{
	xfs_da_args_t	args;
@@ -207,18 +206,14 @@ xfs_dir_lookup(

	ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR);
	XFS_STATS_INC(xs_dir_lookup);
	memset(&args, 0, sizeof(xfs_da_args_t));

	args.name = name;
	args.namelen = namelen;
	args.hashval = xfs_da_hashname(name, namelen);
	args.inumber = 0;
	args.name = name->name;
	args.namelen = name->len;
	args.hashval = xfs_da_hashname(name->name, name->len);
	args.dp = dp;
	args.firstblock = NULL;
	args.flist = NULL;
	args.total = 0;
	args.whichfork = XFS_DATA_FORK;
	args.trans = tp;
	args.justcheck = args.addname = 0;
	args.oknoent = 1;

	if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL)
@@ -247,8 +242,7 @@ int
xfs_dir_removename(
	xfs_trans_t	*tp,
	xfs_inode_t	*dp,
	char		*name,
	int		namelen,
	struct xfs_name	*name,
	xfs_ino_t	ino,
	xfs_fsblock_t	*first,		/* bmap's firstblock */
	xfs_bmap_free_t	*flist,		/* bmap's freeblock list */
@@ -261,9 +255,9 @@ xfs_dir_removename(
	ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR);
	XFS_STATS_INC(xs_dir_remove);

	args.name = name;
	args.namelen = namelen;
	args.hashval = xfs_da_hashname(name, namelen);
	args.name = name->name;
	args.namelen = name->len;
	args.hashval = xfs_da_hashname(name->name, name->len);
	args.inumber = ino;
	args.dp = dp;
	args.firstblock = first;
@@ -329,8 +323,7 @@ int
xfs_dir_replace(
	xfs_trans_t	*tp,
	xfs_inode_t	*dp,
	char		*name,		/* name of entry to replace */
	int		namelen,
	struct xfs_name	*name,		/* name of entry to replace */
	xfs_ino_t	inum,		/* new inode number */
	xfs_fsblock_t	*first,		/* bmap's firstblock */
	xfs_bmap_free_t	*flist,		/* bmap's freeblock list */
@@ -345,9 +338,9 @@ xfs_dir_replace(
	if ((rval = xfs_dir_ino_validate(tp->t_mountp, inum)))
		return rval;

	args.name = name;
	args.namelen = namelen;
	args.hashval = xfs_da_hashname(name, namelen);
	args.name = name->name;
	args.namelen = name->len;
	args.hashval = xfs_da_hashname(name->name, name->len);
	args.inumber = inum;
	args.dp = dp;
	args.firstblock = first;
@@ -374,28 +367,29 @@ xfs_dir_replace(

/*
 * See if this entry can be added to the directory without allocating space.
 * First checks that the caller couldn't reserve enough space (resblks = 0).
 */
int
xfs_dir_canenter(
	xfs_trans_t	*tp,
	xfs_inode_t	*dp,
	char		*name,		/* name of entry to add */
	int		namelen)
	struct xfs_name	*name,		/* name of entry to add */
	uint		resblks)
{
	xfs_da_args_t	args;
	int		rval;
	int		v;		/* type-checking value */

	if (resblks)
		return 0;

	ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR);
	memset(&args, 0, sizeof(xfs_da_args_t));

	args.name = name;
	args.namelen = namelen;
	args.hashval = xfs_da_hashname(name, namelen);
	args.inumber = 0;
	args.name = name->name;
	args.namelen = name->len;
	args.hashval = xfs_da_hashname(name->name, name->len);
	args.dp = dp;
	args.firstblock = NULL;
	args.flist = NULL;
	args.total = 0;
	args.whichfork = XFS_DATA_FORK;
	args.trans = tp;
	args.justcheck = args.addname = args.oknoent = 1;
+7 −5
Original line number Diff line number Diff line
@@ -59,6 +59,8 @@ typedef __uint32_t xfs_dir2_db_t;
 */
typedef	xfs_off_t	xfs_dir2_off_t;

extern struct xfs_name	xfs_name_dotdot;

/*
 * Generic directory interface routines
 */
@@ -68,21 +70,21 @@ extern int xfs_dir_isempty(struct xfs_inode *dp);
extern int xfs_dir_init(struct xfs_trans *tp, struct xfs_inode *dp,
				struct xfs_inode *pdp);
extern int xfs_dir_createname(struct xfs_trans *tp, struct xfs_inode *dp,
				char *name, int namelen, xfs_ino_t inum,
				struct xfs_name *name, xfs_ino_t inum,
				xfs_fsblock_t *first,
				struct xfs_bmap_free *flist, xfs_extlen_t tot);
extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp,
				char *name, int namelen, xfs_ino_t *inum);
				struct xfs_name *name, xfs_ino_t *inum);
extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp,
				char *name, int namelen, xfs_ino_t ino,
				struct xfs_name *name, xfs_ino_t ino,
				xfs_fsblock_t *first,
				struct xfs_bmap_free *flist, xfs_extlen_t tot);
extern int xfs_dir_replace(struct xfs_trans *tp, struct xfs_inode *dp,
				char *name, int namelen, xfs_ino_t inum,
				struct xfs_name *name, xfs_ino_t inum,
				xfs_fsblock_t *first,
				struct xfs_bmap_free *flist, xfs_extlen_t tot);
extern int xfs_dir_canenter(struct xfs_trans *tp, struct xfs_inode *dp,
				char *name, int namelen);
				struct xfs_name *name, uint resblks);
extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino);

/*
Loading