mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
GFS2: Move gfs2_unlink_ok into ops_inode.c
Another function which is only called from one ops_inode.c so we move it and make it static. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
536baf02f6
commit
87ec217411
3 changed files with 38 additions and 41 deletions
|
@ -1046,45 +1046,6 @@ fail:
|
||||||
return ERR_PTR(error);
|
return ERR_PTR(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* gfs2_unlink_ok - check to see that a inode is still in a directory
|
|
||||||
* @dip: the directory
|
|
||||||
* @name: the name of the file
|
|
||||||
* @ip: the inode
|
|
||||||
*
|
|
||||||
* Assumes that the lock on (at least) @dip is held.
|
|
||||||
*
|
|
||||||
* Returns: 0 if the parent/child relationship is correct, errno if it isn't
|
|
||||||
*/
|
|
||||||
|
|
||||||
int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
|
|
||||||
const struct gfs2_inode *ip)
|
|
||||||
{
|
|
||||||
int error;
|
|
||||||
|
|
||||||
if (IS_IMMUTABLE(&ip->i_inode) || IS_APPEND(&ip->i_inode))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if ((dip->i_inode.i_mode & S_ISVTX) &&
|
|
||||||
dip->i_inode.i_uid != current_fsuid() &&
|
|
||||||
ip->i_inode.i_uid != current_fsuid() && !capable(CAP_FOWNER))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (IS_APPEND(&dip->i_inode))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
|
|
||||||
error = gfs2_dir_check(&dip->i_inode, name, ip);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr)
|
static int __gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr)
|
||||||
{
|
{
|
||||||
struct buffer_head *dibh;
|
struct buffer_head *dibh;
|
||||||
|
|
|
@ -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_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
|
|
||||||
const struct gfs2_inode *ip);
|
|
||||||
extern int gfs2_permission(struct inode *inode, int mask);
|
extern int gfs2_permission(struct inode *inode, int mask);
|
||||||
extern int gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr);
|
extern int gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr);
|
||||||
extern struct inode *gfs2_lookup_simple(struct inode *dip, const char *name);
|
extern struct inode *gfs2_lookup_simple(struct inode *dip, const char *name);
|
||||||
|
|
|
@ -262,6 +262,44 @@ out_parent:
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* gfs2_unlink_ok - check to see that a inode is still in a directory
|
||||||
|
* @dip: the directory
|
||||||
|
* @name: the name of the file
|
||||||
|
* @ip: the inode
|
||||||
|
*
|
||||||
|
* Assumes that the lock on (at least) @dip is held.
|
||||||
|
*
|
||||||
|
* Returns: 0 if the parent/child relationship is correct, errno if it isn't
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
|
||||||
|
const struct gfs2_inode *ip)
|
||||||
|
{
|
||||||
|
int error;
|
||||||
|
|
||||||
|
if (IS_IMMUTABLE(&ip->i_inode) || IS_APPEND(&ip->i_inode))
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
|
if ((dip->i_inode.i_mode & S_ISVTX) &&
|
||||||
|
dip->i_inode.i_uid != current_fsuid() &&
|
||||||
|
ip->i_inode.i_uid != current_fsuid() && !capable(CAP_FOWNER))
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
|
if (IS_APPEND(&dip->i_inode))
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
|
error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC);
|
||||||
|
if (error)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
error = gfs2_dir_check(&dip->i_inode, name, ip);
|
||||||
|
if (error)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gfs2_unlink - Unlink a file
|
* gfs2_unlink - Unlink a file
|
||||||
* @dir: The inode of the directory containing the file to unlink
|
* @dir: The inode of the directory containing the file to unlink
|
||||||
|
|
Loading…
Reference in a new issue