mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +09:00
ceph: ensure d_name stability in ceph_dentry_hash()
commit 76a495d666 upstream.
Take the d_lock here to ensure that d_name doesn't change.
Cc: stable@vger.kernel.org
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
cc97f988b7
commit
08152ac980
@@ -1454,6 +1454,7 @@ void ceph_dentry_lru_del(struct dentry *dn)
|
||||
unsigned ceph_dentry_hash(struct inode *dir, struct dentry *dn)
|
||||
{
|
||||
struct ceph_inode_info *dci = ceph_inode(dir);
|
||||
unsigned hash;
|
||||
|
||||
switch (dci->i_dir_layout.dl_dir_hash) {
|
||||
case 0: /* for backward compat */
|
||||
@@ -1461,8 +1462,11 @@ unsigned ceph_dentry_hash(struct inode *dir, struct dentry *dn)
|
||||
return dn->d_name.hash;
|
||||
|
||||
default:
|
||||
return ceph_str_hash(dci->i_dir_layout.dl_dir_hash,
|
||||
spin_lock(&dn->d_lock);
|
||||
hash = ceph_str_hash(dci->i_dir_layout.dl_dir_hash,
|
||||
dn->d_name.name, dn->d_name.len);
|
||||
spin_unlock(&dn->d_lock);
|
||||
return hash;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user