|
@@ -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)
|
|
|
{
|
|
|
- const unsigned char *cs;
|
|
|
/*
|
|
|
* 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
|
|
|
* 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
|
|
|
* be no NUL in the ct/tcount data)
|
|
|
*/
|
|
|
- cs = ACCESS_ONCE(dentry->d_name.name);
|
|
|
- smp_read_barrier_depends();
|
|
|
+ const unsigned char *cs = lockless_dereference(dentry->d_name.name);
|
|
|
+
|
|
|
return dentry_string_cmp(cs, ct, tcount);
|
|
|
}
|
|
|
|