summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2019-03-15 22:58:11 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2019-04-09 19:20:46 -0400
commitab1152dd5650d35da6f0f6d3c0cc18f86fdc0725 (patch)
tree9b659d320d460256823f8ccaf05df39500e279a7
parentce285c267a003acbf607f3540ff71287f82e5282 (diff)
downloadlinux-ab1152dd5650d35da6f0f6d3c0cc18f86fdc0725.tar.bz2
unexport d_alloc_pseudo()
No modular uses since introducion of alloc_file_pseudo(), and the only non-modular user not in alloc_file_pseudo() had actually been wrong - should've been d_alloc_anon(). Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--Documentation/filesystems/porting5
-rw-r--r--fs/dcache.c4
-rw-r--r--fs/internal.h1
-rw-r--r--include/linux/dcache.h1
4 files changed, 9 insertions, 2 deletions
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting
index a60fa516d4cb..7ed8188e7047 100644
--- a/Documentation/filesystems/porting
+++ b/Documentation/filesystems/porting
@@ -643,3 +643,8 @@ in your dentry operations instead.
DCACHE_RCUACCESS is gone; having an RCU delay on dentry freeing is the
default. DCACHE_NORCU opts out, and only d_alloc_pseudo() has any
business doing so.
+--
+[mandatory]
+ d_alloc_pseudo() is internal-only; uses outside of alloc_file_pseudo() are
+ very suspect (and won't work in modules). Such uses are very likely to
+ be misspelled d_alloc_anon().
diff --git a/fs/dcache.c b/fs/dcache.c
index c663c602f9ef..6dd58ced8236 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1742,6 +1742,9 @@ struct dentry *d_alloc_cursor(struct dentry * parent)
* never be anyone's children or parents. Unlike all other
* dentries, these will not have RCU delay between dropping the
* last reference and freeing them.
+ *
+ * The only user is alloc_file_pseudo() and that's what should
+ * be considered a public interface. Don't use directly.
*/
struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name)
{
@@ -1750,7 +1753,6 @@ struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name)
dentry->d_flags |= DCACHE_NORCU;
return dentry;
}
-EXPORT_SYMBOL(d_alloc_pseudo);
struct dentry *d_alloc_name(struct dentry *parent, const char *name)
{
diff --git a/fs/internal.h b/fs/internal.h
index 2e7362837a6e..8102032432cf 100644
--- a/fs/internal.h
+++ b/fs/internal.h
@@ -155,6 +155,7 @@ extern struct dentry *__d_alloc(struct super_block *, const struct qstr *);
extern int d_set_mounted(struct dentry *dentry);
extern long prune_dcache_sb(struct super_block *sb, struct shrink_control *sc);
extern struct dentry *d_alloc_cursor(struct dentry *);
+extern struct dentry * d_alloc_pseudo(struct super_block *, const struct qstr *);
/*
* read_write.c
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index 6e1e8e6602c6..2f044e232e1b 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -235,7 +235,6 @@ extern void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op
/* allocate/de-allocate */
extern struct dentry * d_alloc(struct dentry *, const struct qstr *);
extern struct dentry * d_alloc_anon(struct super_block *);
-extern struct dentry * d_alloc_pseudo(struct super_block *, const struct qstr *);
extern struct dentry * d_alloc_parallel(struct dentry *, const struct qstr *,
wait_queue_head_t *);
extern struct dentry * d_splice_alias(struct inode *, struct dentry *);