Commit 5f2c4179 authored by Al Viro's avatar Al Viro

switch ->put_link() from dentry to inode

only one instance looks at that argument at all; that sole
exception wants inode rather than dentry.
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent bda0be7a
...@@ -51,7 +51,7 @@ prototypes: ...@@ -51,7 +51,7 @@ prototypes:
struct inode *, struct dentry *, unsigned int); struct inode *, struct dentry *, unsigned int);
int (*readlink) (struct dentry *, char __user *,int); int (*readlink) (struct dentry *, char __user *,int);
const char *(*follow_link) (struct dentry *, void **); const char *(*follow_link) (struct dentry *, void **);
void (*put_link) (struct dentry *, void *); void (*put_link) (struct inode *, void *);
void (*truncate) (struct inode *); void (*truncate) (struct inode *);
int (*permission) (struct inode *, int, unsigned int); int (*permission) (struct inode *, int, unsigned int);
int (*get_acl)(struct inode *, int); int (*get_acl)(struct inode *, int);
......
...@@ -351,7 +351,7 @@ struct inode_operations { ...@@ -351,7 +351,7 @@ struct inode_operations {
struct inode *, struct dentry *, unsigned int); struct inode *, struct dentry *, unsigned int);
int (*readlink) (struct dentry *, char __user *,int); int (*readlink) (struct dentry *, char __user *,int);
const char *(*follow_link) (struct dentry *, void **); const char *(*follow_link) (struct dentry *, void **);
void (*put_link) (struct dentry *, void *); void (*put_link) (struct inode *, void *);
int (*permission) (struct inode *, int); int (*permission) (struct inode *, int);
int (*get_acl)(struct inode *, int); int (*get_acl)(struct inode *, int);
int (*setattr) (struct dentry *, struct iattr *); int (*setattr) (struct dentry *, struct iattr *);
......
...@@ -141,7 +141,7 @@ static const char *ll_follow_link(struct dentry *dentry, void **cookie) ...@@ -141,7 +141,7 @@ static const char *ll_follow_link(struct dentry *dentry, void **cookie)
return symname; return symname;
} }
static void ll_put_link(struct dentry *dentry, void *cookie) static void ll_put_link(struct inode *unused, void *cookie)
{ {
ptlrpc_req_finished(cookie); ptlrpc_req_finished(cookie);
} }
......
...@@ -296,7 +296,7 @@ static const char *configfs_follow_link(struct dentry *dentry, void **cookie) ...@@ -296,7 +296,7 @@ static const char *configfs_follow_link(struct dentry *dentry, void **cookie)
return ERR_PTR(error); return ERR_PTR(error);
} }
static void configfs_put_link(struct dentry *dentry, void *cookie) static void configfs_put_link(struct inode *unused, void *cookie)
{ {
free_page((unsigned long)cookie); free_page((unsigned long)cookie);
} }
......
...@@ -301,7 +301,7 @@ static const char *f2fs_follow_link(struct dentry *dentry, void **cookie) ...@@ -301,7 +301,7 @@ static const char *f2fs_follow_link(struct dentry *dentry, void **cookie)
const char *link = page_follow_link_light(dentry, cookie); const char *link = page_follow_link_light(dentry, cookie);
if (!IS_ERR(link) && !*link) { if (!IS_ERR(link) && !*link) {
/* this is broken symlink case */ /* this is broken symlink case */
page_put_link(dentry, *cookie); page_put_link(NULL, *cookie);
link = ERR_PTR(-ENOENT); link = ERR_PTR(-ENOENT);
} }
return link; return link;
......
...@@ -1395,7 +1395,7 @@ static const char *fuse_follow_link(struct dentry *dentry, void **cookie) ...@@ -1395,7 +1395,7 @@ static const char *fuse_follow_link(struct dentry *dentry, void **cookie)
return link; return link;
} }
static void fuse_put_link(struct dentry *dentry, void *cookie) static void fuse_put_link(struct inode *unused, void *cookie)
{ {
free_page((unsigned long) cookie); free_page((unsigned long) cookie);
} }
......
...@@ -915,7 +915,7 @@ static const char *hostfs_follow_link(struct dentry *dentry, void **cookie) ...@@ -915,7 +915,7 @@ static const char *hostfs_follow_link(struct dentry *dentry, void **cookie)
return *cookie = link; return *cookie = link;
} }
static void hostfs_put_link(struct dentry *dentry, void *cookie) static void hostfs_put_link(struct inode *unused, void *cookie)
{ {
__putname(cookie); __putname(cookie);
} }
......
...@@ -649,12 +649,12 @@ static const char *hppfs_follow_link(struct dentry *dentry, void **cookie) ...@@ -649,12 +649,12 @@ static const char *hppfs_follow_link(struct dentry *dentry, void **cookie)
return d_inode(proc_dentry)->i_op->follow_link(proc_dentry, cookie); return d_inode(proc_dentry)->i_op->follow_link(proc_dentry, cookie);
} }
static void hppfs_put_link(struct dentry *dentry, void *cookie) static void hppfs_put_link(struct inode *inode, void *cookie)
{ {
struct dentry *proc_dentry = HPPFS_I(d_inode(dentry))->proc_dentry; struct inode *proc_inode = d_inode(HPPFS_I(inode)->proc_dentry);
if (d_inode(proc_dentry)->i_op->put_link) if (proc_inode->i_op->put_link)
d_inode(proc_dentry)->i_op->put_link(proc_dentry, cookie); proc_inode->i_op->put_link(proc_inode, cookie);
} }
static const struct inode_operations hppfs_dir_iops = { static const struct inode_operations hppfs_dir_iops = {
......
...@@ -126,7 +126,7 @@ static const char *kernfs_iop_follow_link(struct dentry *dentry, void **cookie) ...@@ -126,7 +126,7 @@ static const char *kernfs_iop_follow_link(struct dentry *dentry, void **cookie)
return *cookie = (char *)page; return *cookie = (char *)page;
} }
static void kernfs_iop_put_link(struct dentry *dentry, void *cookie) static void kernfs_iop_put_link(struct inode *unused, void *cookie)
{ {
free_page((unsigned long)cookie); free_page((unsigned long)cookie);
} }
......
...@@ -1024,7 +1024,7 @@ int noop_fsync(struct file *file, loff_t start, loff_t end, int datasync) ...@@ -1024,7 +1024,7 @@ int noop_fsync(struct file *file, loff_t start, loff_t end, int datasync)
} }
EXPORT_SYMBOL(noop_fsync); EXPORT_SYMBOL(noop_fsync);
void kfree_put_link(struct dentry *dentry, void *cookie) void kfree_put_link(struct inode *unused, void *cookie)
{ {
kfree(cookie); kfree(cookie);
} }
......
...@@ -749,7 +749,7 @@ static inline void put_link(struct nameidata *nd) ...@@ -749,7 +749,7 @@ static inline void put_link(struct nameidata *nd)
struct saved *last = nd->stack + --nd->depth; struct saved *last = nd->stack + --nd->depth;
struct inode *inode = last->inode; struct inode *inode = last->inode;
if (last->cookie && inode->i_op->put_link) if (last->cookie && inode->i_op->put_link)
inode->i_op->put_link(last->link.dentry, last->cookie); inode->i_op->put_link(inode, last->cookie);
path_put(&last->link); path_put(&last->link);
} }
...@@ -4444,17 +4444,18 @@ EXPORT_SYMBOL(readlink_copy); ...@@ -4444,17 +4444,18 @@ EXPORT_SYMBOL(readlink_copy);
int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen) int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{ {
void *cookie; void *cookie;
const char *link = dentry->d_inode->i_link; struct inode *inode = d_inode(dentry);
const char *link = inode->i_link;
int res; int res;
if (!link) { if (!link) {
link = dentry->d_inode->i_op->follow_link(dentry, &cookie); link = inode->i_op->follow_link(dentry, &cookie);
if (IS_ERR(link)) if (IS_ERR(link))
return PTR_ERR(link); return PTR_ERR(link);
} }
res = readlink_copy(buffer, buflen, link); res = readlink_copy(buffer, buflen, link);
if (dentry->d_inode->i_op->put_link) if (inode->i_op->put_link)
dentry->d_inode->i_op->put_link(dentry, cookie); inode->i_op->put_link(inode, cookie);
return res; return res;
} }
EXPORT_SYMBOL(generic_readlink); EXPORT_SYMBOL(generic_readlink);
...@@ -4496,7 +4497,7 @@ const char *page_follow_link_light(struct dentry *dentry, void **cookie) ...@@ -4496,7 +4497,7 @@ const char *page_follow_link_light(struct dentry *dentry, void **cookie)
} }
EXPORT_SYMBOL(page_follow_link_light); EXPORT_SYMBOL(page_follow_link_light);
void page_put_link(struct dentry *dentry, void *cookie) void page_put_link(struct inode *unused, void *cookie)
{ {
struct page *page = cookie; struct page *page = cookie;
kunmap(page); kunmap(page);
......
...@@ -174,7 +174,7 @@ static const char *ovl_follow_link(struct dentry *dentry, void **cookie) ...@@ -174,7 +174,7 @@ static const char *ovl_follow_link(struct dentry *dentry, void **cookie)
return ret; return ret;
} }
static void ovl_put_link(struct dentry *dentry, void *c) static void ovl_put_link(struct inode *unused, void *c)
{ {
struct inode *realinode; struct inode *realinode;
struct ovl_link_data *data = c; struct ovl_link_data *data = c;
...@@ -183,7 +183,7 @@ static void ovl_put_link(struct dentry *dentry, void *c) ...@@ -183,7 +183,7 @@ static void ovl_put_link(struct dentry *dentry, void *c)
return; return;
realinode = data->realdentry->d_inode; realinode = data->realdentry->d_inode;
realinode->i_op->put_link(data->realdentry, data->cookie); realinode->i_op->put_link(realinode, data->cookie);
kfree(data); kfree(data);
} }
......
...@@ -402,7 +402,7 @@ static const char *proc_follow_link(struct dentry *dentry, void **cookie) ...@@ -402,7 +402,7 @@ static const char *proc_follow_link(struct dentry *dentry, void **cookie)
return pde->data; return pde->data;
} }
static void proc_put_link(struct dentry *dentry, void *p) static void proc_put_link(struct inode *unused, void *p)
{ {
unuse_pde(p); unuse_pde(p);
} }
......
...@@ -1613,7 +1613,7 @@ struct inode_operations { ...@@ -1613,7 +1613,7 @@ struct inode_operations {
struct posix_acl * (*get_acl)(struct inode *, int); struct posix_acl * (*get_acl)(struct inode *, int);
int (*readlink) (struct dentry *, char __user *,int); int (*readlink) (struct dentry *, char __user *,int);
void (*put_link) (struct dentry *, void *); void (*put_link) (struct inode *, void *);
int (*create) (struct inode *,struct dentry *, umode_t, bool); int (*create) (struct inode *,struct dentry *, umode_t, bool);
int (*link) (struct dentry *,struct inode *,struct dentry *); int (*link) (struct dentry *,struct inode *,struct dentry *);
...@@ -2706,12 +2706,12 @@ extern const struct file_operations generic_ro_fops; ...@@ -2706,12 +2706,12 @@ extern const struct file_operations generic_ro_fops;
extern int readlink_copy(char __user *, int, const char *); extern int readlink_copy(char __user *, int, const char *);
extern int page_readlink(struct dentry *, char __user *, int); extern int page_readlink(struct dentry *, char __user *, int);
extern const char *page_follow_link_light(struct dentry *, void **); extern const char *page_follow_link_light(struct dentry *, void **);
extern void page_put_link(struct dentry *, void *); extern void page_put_link(struct inode *, void *);
extern int __page_symlink(struct inode *inode, const char *symname, int len, extern int __page_symlink(struct inode *inode, const char *symname, int len,
int nofs); int nofs);
extern int page_symlink(struct inode *inode, const char *symname, int len); extern int page_symlink(struct inode *inode, const char *symname, int len);
extern const struct inode_operations page_symlink_inode_operations; extern const struct inode_operations page_symlink_inode_operations;
extern void kfree_put_link(struct dentry *, void *); extern void kfree_put_link(struct inode *, void *);
extern int generic_readlink(struct dentry *, char __user *, int); extern int generic_readlink(struct dentry *, char __user *, int);
extern void generic_fillattr(struct inode *, struct kstat *); extern void generic_fillattr(struct inode *, struct kstat *);
int vfs_getattr_nosec(struct path *path, struct kstat *stat); int vfs_getattr_nosec(struct path *path, struct kstat *stat);
......
...@@ -2486,7 +2486,7 @@ static const char *shmem_follow_link(struct dentry *dentry, void **cookie) ...@@ -2486,7 +2486,7 @@ static const char *shmem_follow_link(struct dentry *dentry, void **cookie)
return kmap(page); return kmap(page);
} }
static void shmem_put_link(struct dentry *dentry, void *cookie) static void shmem_put_link(struct inode *unused, void *cookie)
{ {
struct page *page = cookie; struct page *page = cookie;
kunmap(page); kunmap(page);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment