From: Waiman Long <hidden> Date: 2013-07-03 20:25:32
Because of the changes made in dcache.h header file, files that
use the d_lock field of the dentry structure need to be changed
accordingly. All the d_lock's spin_lock() and spin_unlock() calls
are replaced by the corresponding d_lock() and d_unlock() calls.
There is no change in logic and everything should just work.
Signed-off-by: Waiman Long <redacted>
---
net/sunrpc/rpc_pipe.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
From: Al Viro <viro@ZenIV.linux.org.uk> Date: 2013-07-04 04:20:34
On Wed, Jul 03, 2013 at 04:25:32PM -0400, Waiman Long wrote:
There is no change in logic and everything should just work.
- spin_lock(&file->f_path.dentry->d_lock);
+ d_lock(file->f_path.dentry);
if (!d_unhashed(file->f_path.dentry))
clnt = RPC_I(inode)->private;
if (clnt != NULL && atomic_inc_not_zero(&clnt->cl_count)) {
- spin_unlock(&file->f_path.dentry->d_lock);
+ d_unlock(file->f_path.dentry);
Could somebody explain WTF is being protected here? It's not ->private -
that gets set (and, more importantly, cleared) without ->d_lock in sight.
Trond, that seems to be your code from about three years ago (introduced
in "SUNRPC: Fix a race in rpc_info_open"). What's going on there?
On Wed, Jul 03, 2013 at 04:25:32PM -0400, Waiman Long wrote:
quoted
There is no change in logic and everything should just work.
quoted
- spin_lock(&file->f_path.dentry->d_lock);
+ d_lock(file->f_path.dentry);
if (!d_unhashed(file->f_path.dentry))
clnt = RPC_I(inode)->private;
if (clnt != NULL && atomic_inc_not_zero(&clnt->cl_count)) {
- spin_unlock(&file->f_path.dentry->d_lock);
+ d_unlock(file->f_path.dentry);
Could somebody explain WTF is being protected here? It's not ->private -
that gets set (and, more importantly, cleared) without ->d_lock in sight.
Trond, that seems to be your code from about three years ago (introduced
in "SUNRPC: Fix a race in rpc_info_open"). What's going on there?
AFAICR we're using the fact that the dentry will remain hashed until
we're in the process of freeing up the rpc_client. By testing that the
dentry is hashed under the dentry->d_lock, we are assured that the
non-NULL 'clnt' is still pointing to a valid rpc_client, and that it is
safe to access clnt->cl_count.
--
Trond Myklebust
Linux NFS client maintainer
NetApp
Trond.Myklebust@netapp.com
www.netapp.com