GFS2: Move gfs2_readlinki into ops_inode.c
Move gfs2_readlinki into ops_inode.c and make it static Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
2286dbfad1
commit
536baf02f6
3 changed files with 56 additions and 58 deletions
|
@ -1085,63 +1085,7 @@ int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static int __gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr)
|
||||||
* gfs2_readlinki - return the contents of a symlink
|
|
||||||
* @ip: the symlink's inode
|
|
||||||
* @buf: a pointer to the buffer to be filled
|
|
||||||
* @len: a pointer to the length of @buf
|
|
||||||
*
|
|
||||||
* If @buf is too small, a piece of memory is kmalloc()ed and needs
|
|
||||||
* to be freed by the caller.
|
|
||||||
*
|
|
||||||
* Returns: errno
|
|
||||||
*/
|
|
||||||
|
|
||||||
int gfs2_readlinki(struct gfs2_inode *ip, char **buf, unsigned int *len)
|
|
||||||
{
|
|
||||||
struct gfs2_holder i_gh;
|
|
||||||
struct buffer_head *dibh;
|
|
||||||
unsigned int x;
|
|
||||||
int error;
|
|
||||||
|
|
||||||
gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &i_gh);
|
|
||||||
error = gfs2_glock_nq(&i_gh);
|
|
||||||
if (error) {
|
|
||||||
gfs2_holder_uninit(&i_gh);
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ip->i_disksize) {
|
|
||||||
gfs2_consist_inode(ip);
|
|
||||||
error = -EIO;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
error = gfs2_meta_inode_buffer(ip, &dibh);
|
|
||||||
if (error)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
x = ip->i_disksize + 1;
|
|
||||||
if (x > *len) {
|
|
||||||
*buf = kmalloc(x, GFP_NOFS);
|
|
||||||
if (!*buf) {
|
|
||||||
error = -ENOMEM;
|
|
||||||
goto out_brelse;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(*buf, dibh->b_data + sizeof(struct gfs2_dinode), x);
|
|
||||||
*len = x;
|
|
||||||
|
|
||||||
out_brelse:
|
|
||||||
brelse(dibh);
|
|
||||||
out:
|
|
||||||
gfs2_glock_dq_uninit(&i_gh);
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
__gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr)
|
|
||||||
{
|
{
|
||||||
struct buffer_head *dibh;
|
struct buffer_head *dibh;
|
||||||
int error;
|
int error;
|
||||||
|
|
|
@ -99,7 +99,6 @@ extern struct inode *gfs2_createi(struct gfs2_holder *ghs,
|
||||||
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);
|
||||||
extern int gfs2_readlinki(struct gfs2_inode *ip, char **buf, unsigned int *len);
|
|
||||||
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);
|
||||||
extern void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf);
|
extern void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf);
|
||||||
|
|
|
@ -937,6 +937,61 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gfs2_readlinki - return the contents of a symlink
|
||||||
|
* @ip: the symlink's inode
|
||||||
|
* @buf: a pointer to the buffer to be filled
|
||||||
|
* @len: a pointer to the length of @buf
|
||||||
|
*
|
||||||
|
* If @buf is too small, a piece of memory is kmalloc()ed and needs
|
||||||
|
* to be freed by the caller.
|
||||||
|
*
|
||||||
|
* Returns: errno
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int gfs2_readlinki(struct gfs2_inode *ip, char **buf, unsigned int *len)
|
||||||
|
{
|
||||||
|
struct gfs2_holder i_gh;
|
||||||
|
struct buffer_head *dibh;
|
||||||
|
unsigned int x;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &i_gh);
|
||||||
|
error = gfs2_glock_nq(&i_gh);
|
||||||
|
if (error) {
|
||||||
|
gfs2_holder_uninit(&i_gh);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ip->i_disksize) {
|
||||||
|
gfs2_consist_inode(ip);
|
||||||
|
error = -EIO;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
error = gfs2_meta_inode_buffer(ip, &dibh);
|
||||||
|
if (error)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
x = ip->i_disksize + 1;
|
||||||
|
if (x > *len) {
|
||||||
|
*buf = kmalloc(x, GFP_NOFS);
|
||||||
|
if (!*buf) {
|
||||||
|
error = -ENOMEM;
|
||||||
|
goto out_brelse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(*buf, dibh->b_data + sizeof(struct gfs2_dinode), x);
|
||||||
|
*len = x;
|
||||||
|
|
||||||
|
out_brelse:
|
||||||
|
brelse(dibh);
|
||||||
|
out:
|
||||||
|
gfs2_glock_dq_uninit(&i_gh);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gfs2_readlink - Read the value of a symlink
|
* gfs2_readlink - Read the value of a symlink
|
||||||
* @dentry: the symlink
|
* @dentry: the symlink
|
||||||
|
|
Loading…
Reference in a new issue