From: NeilBrown <[email protected]> d_alloc() is not useful. d_alloc_name() is a better interface for those cases where it is safe to allocate a dentry without synchronisation with the VFS, and d_alloc_parallel() or d_alloc_noblock() shoudl be used when synchronisation is needed.
Signed-off-by: NeilBrown <[email protected]> --- Documentation/filesystems/porting.rst | 8 ++++++++ fs/dcache.c | 1 - fs/internal.h | 1 + include/linux/dcache.h | 1 - 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Documentation/filesystems/porting.rst b/Documentation/filesystems/porting.rst index 6a507c508ccf..4712403fd98e 100644 --- a/Documentation/filesystems/porting.rst +++ b/Documentation/filesystems/porting.rst @@ -1381,3 +1381,11 @@ longer available. Use start_renaming() or similar. d_alloc_parallel() no longer requires a waitqueue_head. It uses one from an internal table when needed. + +--- + +**mandatory** + +d_alloc() is no longer exported as its use can be racy. Use d_alloc_name() +when object creation is controlled separately from standard filesystem interface, +and d_alloc_parallel() or d_alloc_noblock() when standard interfaces can be used. diff --git a/fs/dcache.c b/fs/dcache.c index 9a6139013367..23f04fa05778 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -1830,7 +1830,6 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name) return dentry; } -EXPORT_SYMBOL(d_alloc); /** * d_duplicate: duplicate a dentry for combined atomic operation diff --git a/fs/internal.h b/fs/internal.h index cbc384a1aa09..9c637e2d18ef 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -223,6 +223,7 @@ bool sync_lazytime(struct inode *inode); /* * dcache.c */ +struct dentry *d_alloc(struct dentry * parent, const struct qstr *name); 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 *); diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 3b12577ddfbb..18242f9598dc 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h @@ -242,7 +242,6 @@ extern void d_drop(struct dentry *dentry); extern void d_delete(struct dentry *); /* 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_parallel(struct dentry *, const struct qstr *); extern struct dentry * d_alloc_noblock(struct dentry *, struct qstr *); -- 2.50.0.107.gf914562f5916.dirty
