dentry_cmp(): use lockless_dereference() instead of smp_read_barrier_depends()
lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). Signed-off-by: He Kuang <hekuang@huawei.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
c074cefcc0
commit
ae0a843c74
@ -226,10 +226,9 @@ static inline int dentry_string_cmp(const unsigned char *cs, const unsigned char
|
|||||||
|
|
||||||
static inline int dentry_cmp(const struct dentry *dentry, const unsigned char *ct, unsigned tcount)
|
static inline int dentry_cmp(const struct dentry *dentry, const unsigned char *ct, unsigned tcount)
|
||||||
{
|
{
|
||||||
const unsigned char *cs;
|
|
||||||
/*
|
/*
|
||||||
* Be careful about RCU walk racing with rename:
|
* Be careful about RCU walk racing with rename:
|
||||||
* use ACCESS_ONCE to fetch the name pointer.
|
* use 'lockless_dereference' to fetch the name pointer.
|
||||||
*
|
*
|
||||||
* NOTE! Even if a rename will mean that the length
|
* NOTE! Even if a rename will mean that the length
|
||||||
* was not loaded atomically, we don't care. The
|
* was not loaded atomically, we don't care. The
|
||||||
@ -243,8 +242,8 @@ static inline int dentry_cmp(const struct dentry *dentry, const unsigned char *c
|
|||||||
* early because the data cannot match (there can
|
* early because the data cannot match (there can
|
||||||
* be no NUL in the ct/tcount data)
|
* be no NUL in the ct/tcount data)
|
||||||
*/
|
*/
|
||||||
cs = ACCESS_ONCE(dentry->d_name.name);
|
const unsigned char *cs = lockless_dereference(dentry->d_name.name);
|
||||||
smp_read_barrier_depends();
|
|
||||||
return dentry_string_cmp(cs, ct, tcount);
|
return dentry_string_cmp(cs, ct, tcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user