diff options
Diffstat (limited to 'fs/dcache.c')
| -rw-r--r-- | fs/dcache.c | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/fs/dcache.c b/fs/dcache.c index 80e93956aced..e7a1a99b7464 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
| @@ -1395,6 +1395,10 @@ struct dentry * __d_lookup(struct dentry * parent, struct qstr * name) | |||
| 1395 | if (dentry->d_parent != parent) | 1395 | if (dentry->d_parent != parent) | 
| 1396 | goto next; | 1396 | goto next; | 
| 1397 | 1397 | ||
| 1398 | /* non-existing due to RCU? */ | ||
| 1399 | if (d_unhashed(dentry)) | ||
| 1400 | goto next; | ||
| 1401 | |||
| 1398 | /* | 1402 | /* | 
| 1399 | * It is safe to compare names since d_move() cannot | 1403 | * It is safe to compare names since d_move() cannot | 
| 1400 | * change the qstr (protected by d_lock). | 1404 | * change the qstr (protected by d_lock). | 
| @@ -1410,10 +1414,8 @@ struct dentry * __d_lookup(struct dentry * parent, struct qstr * name) | |||
| 1410 | goto next; | 1414 | goto next; | 
| 1411 | } | 1415 | } | 
| 1412 | 1416 | ||
| 1413 | if (!d_unhashed(dentry)) { | 1417 | atomic_inc(&dentry->d_count); | 
| 1414 | atomic_inc(&dentry->d_count); | 1418 | found = dentry; | 
| 1415 | found = dentry; | ||
| 1416 | } | ||
| 1417 | spin_unlock(&dentry->d_lock); | 1419 | spin_unlock(&dentry->d_lock); | 
| 1418 | break; | 1420 | break; | 
| 1419 | next: | 1421 | next: | 
