diff options
author | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:49:32 -0500 |
---|---|---|
committer | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:50:21 -0500 |
commit | b7ab39f631f505edc2bbdb86620d5493f995c9da (patch) | |
tree | 62be97ebc7fc69ceb601f23312d335ebb8038ee7 /drivers | |
parent | 2304450783dfde7b0b94ae234edd0dbffa865073 (diff) |
fs: dcache scale dentry refcount
Make d_count non-atomic and protect it with d_lock. This allows us to ensure a
0 refcount dentry remains 0 without dcache_lock. It is also fairly natural when
we start protecting many other dentry members with d_lock.
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_fs.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_fs.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_fs.c b/drivers/infiniband/hw/ipath/ipath_fs.c index 8c8afc716b98..18aee04a8411 100644 --- a/drivers/infiniband/hw/ipath/ipath_fs.c +++ b/drivers/infiniband/hw/ipath/ipath_fs.c | |||
@@ -280,7 +280,7 @@ static int remove_file(struct dentry *parent, char *name) | |||
280 | spin_lock(&dcache_lock); | 280 | spin_lock(&dcache_lock); |
281 | spin_lock(&tmp->d_lock); | 281 | spin_lock(&tmp->d_lock); |
282 | if (!(d_unhashed(tmp) && tmp->d_inode)) { | 282 | if (!(d_unhashed(tmp) && tmp->d_inode)) { |
283 | dget_locked(tmp); | 283 | dget_locked_dlock(tmp); |
284 | __d_drop(tmp); | 284 | __d_drop(tmp); |
285 | spin_unlock(&tmp->d_lock); | 285 | spin_unlock(&tmp->d_lock); |
286 | spin_unlock(&dcache_lock); | 286 | spin_unlock(&dcache_lock); |
diff --git a/drivers/infiniband/hw/qib/qib_fs.c b/drivers/infiniband/hw/qib/qib_fs.c index f99bddc01716..fe4b242f0094 100644 --- a/drivers/infiniband/hw/qib/qib_fs.c +++ b/drivers/infiniband/hw/qib/qib_fs.c | |||
@@ -456,7 +456,7 @@ static int remove_file(struct dentry *parent, char *name) | |||
456 | spin_lock(&dcache_lock); | 456 | spin_lock(&dcache_lock); |
457 | spin_lock(&tmp->d_lock); | 457 | spin_lock(&tmp->d_lock); |
458 | if (!(d_unhashed(tmp) && tmp->d_inode)) { | 458 | if (!(d_unhashed(tmp) && tmp->d_inode)) { |
459 | dget_locked(tmp); | 459 | dget_locked_dlock(tmp); |
460 | __d_drop(tmp); | 460 | __d_drop(tmp); |
461 | spin_unlock(&tmp->d_lock); | 461 | spin_unlock(&tmp->d_lock); |
462 | spin_unlock(&dcache_lock); | 462 | spin_unlock(&dcache_lock); |