Loading fs/gfs2/inode.c +1 −57 Original line number Diff line number Diff line Loading @@ -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; Loading fs/gfs2/inode.h +0 −1 Original line number Diff line number Diff line Loading @@ -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); Loading fs/gfs2/ops_inode.c +55 −0 Original line number Diff line number Diff line Loading @@ -937,6 +937,61 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry, 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 Loading
fs/gfs2/inode.c +1 −57 Original line number Diff line number Diff line Loading @@ -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; Loading
fs/gfs2/inode.h +0 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
fs/gfs2/ops_inode.c +55 −0 Original line number Diff line number Diff line Loading @@ -937,6 +937,61 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry, 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