diff options
| author | Evgeniy Polyakov <zbr@ioremap.net> | 2009-03-27 15:04:19 +0300 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-04-17 11:06:28 -0700 | 
| commit | f3b8fa701b4bd8ec6d378896ad005f01e8382381 (patch) | |
| tree | d330e215ee3cf4202624b731af428a8152821ec2 /drivers | |
| parent | 288a9a8955cd28bf6a0f48ec821cf9028e96081b (diff) | |
| download | linux-f3b8fa701b4bd8ec6d378896ad005f01e8382381.tar.bz2 | |
Staging: Pohmelfs: Move parent lock to the place where we really have to send a lookup request to the server.
Signed-off-by: Evgeniy Polyakov <zbr@ioremap.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/staging/pohmelfs/dir.c | 16 | 
1 files changed, 8 insertions, 8 deletions
| diff --git a/drivers/staging/pohmelfs/dir.c b/drivers/staging/pohmelfs/dir.c index 7a41183a32e1..26da75ca1f57 100644 --- a/drivers/staging/pohmelfs/dir.c +++ b/drivers/staging/pohmelfs/dir.c @@ -389,11 +389,11 @@ static int pohmelfs_readdir(struct file *file, void *dirent, filldir_t filldir)  	dprintk("%s: parent: %llu, fpos: %llu, hash: %08lx.\n",  			__func__, pi->ino, (u64)file->f_pos,  			(unsigned long)file->private_data); - +#if 0  	err = pohmelfs_data_lock(pi, 0, ~0, POHMELFS_READ_LOCK);  	if (err)  		return err; - +#endif  	err = pohmelfs_sync_remote_dir(pi);  	if (err)  		return err; @@ -513,10 +513,6 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct  	need_lock = pohmelfs_need_lock(parent, lock_type); -	err = pohmelfs_data_lock(parent, 0, ~0, lock_type); -	if (err) -		goto out; -  	str.hash = jhash(dentry->d_name.name, dentry->d_name.len, 0);  	mutex_lock(&parent->offset_lock); @@ -525,7 +521,7 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct  		ino = n->ino;  	mutex_unlock(&parent->offset_lock); -	dprintk("%s: 1 ino: %lu, inode: %p, name: '%s', hash: %x, parent_state: %lx.\n", +	dprintk("%s: start ino: %lu, inode: %p, name: '%s', hash: %x, parent_state: %lx.\n",  			__func__, ino, inode, str.name, str.hash, parent->state);  	if (ino) { @@ -534,7 +530,7 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct  			goto out;  	} -	dprintk("%s: dir: %p, dir_ino: %llu, name: '%s', len: %u, dir_state: %lx, ino: %lu.\n", +	dprintk("%s: no inode dir: %p, dir_ino: %llu, name: '%s', len: %u, dir_state: %lx, ino: %lu.\n",  			__func__, dir, parent->ino,  			str.name, str.len, parent->state, ino); @@ -543,6 +539,10 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct  			goto out;  	} +	err = pohmelfs_data_lock(parent, 0, ~0, lock_type); +	if (err) +		goto out; +  	err = pohmelfs_lookup_single(parent, &str, ino);  	if (err)  		goto out; |