(9/9) symlink patchkit (against -bk current)
PATCH 1/1 (9/9) symlink patchkit (against -bk current)
jffs2 switched; leaks plugged.
fs/jffs2/symlink.c +14 -26
@@ -15,43 +15,31 @@#include <linux/kernel.h> #include <linux/slab.h> #include <linux/fs.h> +#include <linux/namei.h> #include "nodelist.h" -int jffs2_readlink (struct dentry *dentry,char *buffer,int buflen); -int jffs2_follow_link (struct dentry *dentry,struct nameidata *nd); +static int jffs2_follow_link (struct dentry *dentry,struct nameidata *nd); +static void jffs2_put_link (struct dentry *dentry,struct nameidata *nd);struct inode_operations jffs2_symlink_inode_operations = { - .readlink = jffs2_readlink, + .readlink = generic_readlink, .follow_link = jffs2_follow_link, + .put_link = jffs2_put_link, .setattr = jffs2_setattr }; -int jffs2_readlink (struct dentry *dentry,char *buffer,int buflen) -{ -unsigned char *kbuf; -int ret; - - kbuf =jffs2_getlink (JFFS2_SB_INFO (dentry->d_inode->i_sb),JFFS2_INODE_INFO (dentry->d_inode)); -if (IS_ERR (kbuf)) -return PTR_ERR (kbuf); - - ret =vfs_readlink (dentry, buffer, buflen, kbuf); -kfree (kbuf); -return ret; -} - -int jffs2_follow_link (struct dentry *dentry,struct nameidata *nd) +static int jffs2_follow_link (struct dentry *dentry,struct nameidata *nd) {unsigned char *buf; -int ret; - buf =jffs2_getlink (JFFS2_SB_INFO (dentry->d_inode->i_sb),JFFS2_INODE_INFO (dentry->d_inode)); +nd_set_link (nd, buf); +return 0 ; +} -if (IS_ERR (buf)) -return PTR_ERR (buf); - - ret =vfs_follow_link (nd, buf); -kfree (buf); -return ret; +static void jffs2_put_link (struct dentry *dentry,struct nameidata *nd) +{ +char *s =nd_get_link (nd); +if (!IS_ERR (s)) +kfree (s); }