make lookup_create non-static
PATCH 1/1 make lookup_create non-static
Make lookup_create non-static for use by certain pseudofilesystems (e.g. hwgfs).
Thanks,
Jesse
===== fs/namei.c 1.81 vs edited =====
fs/namei.c +1 -1
@@ -1376,7 +1376,7 @@ }/* SMP-safe */ -static struct dentry *lookup_create (struct nameidata *nd,int is_dir) +struct dentry *lookup_create (struct nameidata *nd,int is_dir) {struct dentry *dentry;
Quoted 3 lines · [email protected] (Jesse Barnes) wrote:
Make
lookup_createnon-static for use by certain pseudofilesystems (e.g. hwgfs).
If one is patching ones kernel with hwgfs, once can include this chunk in that patch, no?
Quoted 7 lines · Andrew Morton
Quoted 3 lines · [email protected] (Jesse Barnes) wrote:
Make
lookup_createnon-static for use by certain pseudofilesystems (e.g. hwgfs).If one is patching ones kernel with hwgfs, once can include this chunk in that patch, no?
You mean copy lookup_create into hwgfs (which is already in the tree, btw)? Yeah, I guess I could do that if you don't want to take this.
Thanks,
Jesse
Quoted 3 lines · [email protected] (Jesse Barnes) wrote:
You mean copy
lookup_createinto hwgfs (which is already in the tree,
btw)? Yeah, I guess I could do that if you don't want to take this.
ah, I thought you were referring to an out-of-tree filesystem.
It would appear that intermezzo has already created a private copy of lookup_create(). Sigh.
If we're going to export this thing to filesystems then it really should be documented a bit. You could bribe me with a patch which does that ;)
Quoted 5 lines · Andrew Morton
Quoted 3 lines · [email protected] (Jesse Barnes) wrote:
You mean copy
lookup_createinto hwgfs (which is already in the tree,
btw)? Yeah, I guess I could do that if you don't want to take this.
Quoted 7 lines
ah, I thought you were referring to an out-of-tree filesystem.
It would appear that intermezzo has already created a private copy of
lookup_create(). Sigh.If we're going to export this thing to filesystems then it really should be documented a bit. You could bribe me with a patch which does that ;)
Ok, how does this look?
Jesse
===== fs/namei.c 1.81 vs edited =====
fs/namei.c +9 -2
@@ -1375,8 +1375,15 @@ goto do_last; } -/* SMP-safe */ -static struct dentry *lookup_create (struct nameidata *nd,int is_dir) +/** +* lookup_create - lookup a dentry, creating it if it doesn't exist +* @nd: nameidata info +* @is_dir: directory flag +* +* Simple function to lookup and return a dentry and create it +* if it doesn't exist. Is SMP-safe. +*/ +struct dentry *lookup_create (struct nameidata *nd,int is_dir) {struct dentry *dentry;
Quoted 2 lines · [email protected] (Jesse Barnes) wrote:
Ok, how does this look?
OK. I grew it a bit:
fs/intermezzo/vfs.c | 22 ---------------------- fs/namei.c | 11 +++++++++-- include/linux/dcache.h | 2 ++ include/linux/fs.h | 0 kernel/ksyms.c | 1 + 5 files changed, 12 insertions(+), 24 deletions(-)
fs/namei.c renamed from fs/namei.c~export-lookup_create +9 -2
@@ -1375,8 +1375,15 @@ do_link: goto do_last; } -/* SMP-safe */ -static struct dentry *lookup_create (struct nameidata *nd,int is_dir) +/** +* lookup_create - lookup a dentry, creating it if it doesn't exist +* @nd: nameidata info +* @is_dir: directory flag +* +* Simple function to lookup and return a dentry and create it +* if it doesn't exist. Is SMP-safe. +*/ +struct dentry *lookup_create (struct nameidata *nd,int is_dir) {struct dentry *dentry;
diff -puN include/linux/fs.h~export-lookup_create include/linux/fs.h
include/linux/dcache.h renamed from include/linux/dcache.h~export-lookup_create +2 -0
@@ -309,6 +309,8 @@ static inline int d_mountpoint(struct de }extern struct vfsmount *lookup_mnt (struct vfsmount *,struct dentry *); +extern struct dentry *lookup_create (struct nameidata *nd,int is_dir); +#endif /* __KERNEL__ */ #endif /* __LINUX_DCACHE_H */
kernel/ksyms.c renamed from kernel/ksyms.c~export-lookup_create +1 -0
@@ -156,6 +156,7 @@ EXPORT_SYMBOL(inode_init_once);EXPORT_SYMBOL (follow_up);EXPORT_SYMBOL (follow_down);EXPORT_SYMBOL (lookup_mnt); +EXPORT_SYMBOL (lookup_create);EXPORT_SYMBOL (path_lookup);EXPORT_SYMBOL (path_walk);EXPORT_SYMBOL (path_release);
fs/intermezzo/vfs.c renamed from fs/intermezzo/vfs.c~export-lookup_create +0 -22
@@ -664,28 +664,6 @@ int presto_do_create(struct presto_file_return error; } -/* from namei.c */ -static struct dentry *lookup_create (struct nameidata *nd,int is_dir) -{ -struct dentry *dentry; - -down (&nd->dentry->d_inode->i_sem); - dentry =ERR_PTR (-EEXIST ); -if (nd->last_type !=LAST_NORM ) - goto fail; - dentry =lookup_hash (&nd->last, nd->dentry); -if (IS_ERR (dentry)) - goto fail; -if (!is_dir && nd->last.name[nd->last.len] && !dentry->d_inode) - goto enoent; -return dentry; -enoent: -dput (dentry); - dentry =ERR_PTR (-ENOENT ); -fail: -return dentry; -} -int lento_create (const char *name,int mode,struct lento_vfs_context *info) {int error;
_
Much better. Thanks.
Jesse
Quoted 93 lines · Andrew Morton
Quoted 2 lines · [email protected] (Jesse Barnes) wrote:
Ok, how does this look?
OK. I grew it a bit:
fs/intermezzo/vfs.c | 22 ---------------------- fs/namei.c | 11 +++++++++-- include/linux/dcache.h | 2 ++ include/linux/fs.h | 0 kernel/ksyms.c | 1 + 5 files changed, 12 insertions(+), 24 deletions(-)diff -puN
fs/namei.c~export-lookup_createfs/namei.cfs/namei.c renamed from fs/namei.c~export-lookup_create +9
-2@@ -1375,8 +1375,15 @@ do_link: goto do_last; } -/* SMP-safe */ -static struct dentry *lookup_create (struct nameidata *nd,int is_dir) +/** +* lookup_create - lookup a dentry, creating it if it doesn't exist +* @nd: nameidata info +* @is_dir: directory flag +* +* Simple function to lookup and return a dentry and create it +* if it doesn't exist. Is SMP-safe. +*/ +struct dentry *lookup_create (struct nameidata *nd,int is_dir) {struct dentry *dentry;diff -puN
include/linux/fs.h~export-lookup_createinclude/linux/fs.hdiff -puNinclude/linux/dcache.h~export-lookup_createinclude/linux/dcache.hinclude/linux/dcache.h renamed from include/linux/dcache.h~export-lookup_create +2
-0@@ -309,6 +309,8 @@ static inline int d_mountpoint(struct de }extern struct vfsmount *lookup_mnt (struct vfsmount *,struct dentry *); +extern struct dentry *lookup_create (struct nameidata *nd,int is_dir); +#endif /* __KERNEL__ */ #endif /* __LINUX_DCACHE_H */ diff -puN
kernel/ksyms.c~export-lookup_createkernel/ksyms.ckernel/ksyms.c renamed from kernel/ksyms.c~export-lookup_create +1
-0@@ -156,6 +156,7 @@ EXPORT_SYMBOL(inode_init_once);EXPORT_SYMBOL (follow_up);EXPORT_SYMBOL (follow_down);EXPORT_SYMBOL (lookup_mnt); +EXPORT_SYMBOL (lookup_create);EXPORT_SYMBOL (path_lookup);EXPORT_SYMBOL (path_walk);EXPORT_SYMBOL (path_release);diff -puN
fs/intermezzo/vfs.c~export-lookup_createfs/intermezzo/vfs.cfs/intermezzo/vfs.c renamed from fs/intermezzo/vfs.c~export-lookup_create +0
-22@@ -664,28 +664,6 @@ int presto_do_create(struct presto_file_return error; } -/* from namei.c */ -static struct dentry *lookup_create (struct nameidata *nd,int is_dir) -{ -struct dentry *dentry; - -down (&nd->dentry->d_inode->i_sem); - dentry =ERR_PTR (-EEXIST ); -if (nd->last_type !=LAST_NORM ) - goto fail; - dentry =lookup_hash (&nd->last, nd->dentry); -if (IS_ERR (dentry)) - goto fail; -if (!is_dir && nd->last.name[nd->last.len] && !dentry->d_inode) - goto enoent; -return dentry; -enoent: -dput (dentry); - dentry =ERR_PTR (-ENOENT ); -fail: -return dentry; -} -int lento_create (const char *name,int mode,struct lento_vfs_context *info) {int error;_