mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 21:24:08 +08:00
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
@ -1085,63 +1085,7 @@ int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
static int __gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr)
|
||||
{
|
||||
struct buffer_head *dibh;
|
||||
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,
|
||||
const struct gfs2_inode *ip);
|
||||
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 struct inode *gfs2_lookup_simple(struct inode *dip, const char *name);
|
||||
extern void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf);
|
||||
|
@ -937,6 +937,61 @@ out:
|
||||
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
|
||||
* @dentry: the symlink
|
||||
|
Loading…
Reference in New Issue
Block a user