GFS2: Move gfs2_rmdiri into ops_inode.c
Move gfs2_rmdiri() into ops_inode.c and make it static. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
9e6e0a128b
commit
2286dbfad1
3 changed files with 53 additions and 54 deletions
|
@ -1046,58 +1046,6 @@ struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name,
|
||||||
return ERR_PTR(error);
|
return ERR_PTR(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* gfs2_rmdiri - Remove a directory
|
|
||||||
* @dip: The parent directory of the directory to be removed
|
|
||||||
* @name: The name of the directory to be removed
|
|
||||||
* @ip: The GFS2 inode of the directory to be removed
|
|
||||||
*
|
|
||||||
* Assumes Glocks on dip and ip are held
|
|
||||||
*
|
|
||||||
* Returns: errno
|
|
||||||
*/
|
|
||||||
|
|
||||||
int gfs2_rmdiri(struct gfs2_inode *dip, const struct qstr *name,
|
|
||||||
struct gfs2_inode *ip)
|
|
||||||
{
|
|
||||||
struct qstr dotname;
|
|
||||||
int error;
|
|
||||||
|
|
||||||
if (ip->i_entries != 2) {
|
|
||||||
if (gfs2_consist_inode(ip))
|
|
||||||
gfs2_dinode_print(ip);
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
error = gfs2_dir_del(dip, name);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
|
|
||||||
error = gfs2_change_nlink(dip, -1);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
|
|
||||||
gfs2_str2qstr(&dotname, ".");
|
|
||||||
error = gfs2_dir_del(ip, &dotname);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
|
|
||||||
gfs2_str2qstr(&dotname, "..");
|
|
||||||
error = gfs2_dir_del(ip, &dotname);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
|
|
||||||
/* It looks odd, but it really should be done twice */
|
|
||||||
error = gfs2_change_nlink(ip, -1);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
|
|
||||||
error = gfs2_change_nlink(ip, -1);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* gfs2_unlink_ok - check to see that a inode is still in a directory
|
* gfs2_unlink_ok - check to see that a inode is still in a directory
|
||||||
|
|
|
@ -96,8 +96,6 @@ extern struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
|
||||||
extern struct inode *gfs2_createi(struct gfs2_holder *ghs,
|
extern struct inode *gfs2_createi(struct gfs2_holder *ghs,
|
||||||
const struct qstr *name,
|
const struct qstr *name,
|
||||||
unsigned int mode, dev_t dev);
|
unsigned int mode, dev_t dev);
|
||||||
extern int gfs2_rmdiri(struct gfs2_inode *dip, const struct qstr *name,
|
|
||||||
struct gfs2_inode *ip);
|
|
||||||
extern int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
|
extern int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
|
||||||
const struct gfs2_inode *ip);
|
const struct gfs2_inode *ip);
|
||||||
extern int gfs2_permission(struct inode *inode, int mask);
|
extern int gfs2_permission(struct inode *inode, int mask);
|
||||||
|
|
|
@ -472,6 +472,59 @@ static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gfs2_rmdiri - Remove a directory
|
||||||
|
* @dip: The parent directory of the directory to be removed
|
||||||
|
* @name: The name of the directory to be removed
|
||||||
|
* @ip: The GFS2 inode of the directory to be removed
|
||||||
|
*
|
||||||
|
* Assumes Glocks on dip and ip are held
|
||||||
|
*
|
||||||
|
* Returns: errno
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int gfs2_rmdiri(struct gfs2_inode *dip, const struct qstr *name,
|
||||||
|
struct gfs2_inode *ip)
|
||||||
|
{
|
||||||
|
struct qstr dotname;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
if (ip->i_entries != 2) {
|
||||||
|
if (gfs2_consist_inode(ip))
|
||||||
|
gfs2_dinode_print(ip);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
error = gfs2_dir_del(dip, name);
|
||||||
|
if (error)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
error = gfs2_change_nlink(dip, -1);
|
||||||
|
if (error)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
gfs2_str2qstr(&dotname, ".");
|
||||||
|
error = gfs2_dir_del(ip, &dotname);
|
||||||
|
if (error)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
gfs2_str2qstr(&dotname, "..");
|
||||||
|
error = gfs2_dir_del(ip, &dotname);
|
||||||
|
if (error)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
/* It looks odd, but it really should be done twice */
|
||||||
|
error = gfs2_change_nlink(ip, -1);
|
||||||
|
if (error)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
error = gfs2_change_nlink(ip, -1);
|
||||||
|
if (error)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gfs2_rmdir - Remove a directory
|
* gfs2_rmdir - Remove a directory
|
||||||
* @dir: The parent directory of the directory to be removed
|
* @dir: The parent directory of the directory to be removed
|
||||||
|
|
Loading…
Reference in a new issue