mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-30 10:49:28 +00:00
smbfs: use dget_parent
Use dget_parent instead of opencoding it. This simplifies the code, but more importanly prepares for the more complicated locking for a parent dget in the dcache scale patch series. Note that the d_time assignment in smb_renew_times moves out of d_lock, but it's a single atomic 32-bit value, and that's what other sites setting it do already. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
0461ee2616
commit
be9eee2e8b
2 changed files with 8 additions and 18 deletions
|
@ -406,21 +406,15 @@ void
|
||||||
smb_renew_times(struct dentry * dentry)
|
smb_renew_times(struct dentry * dentry)
|
||||||
{
|
{
|
||||||
dget(dentry);
|
dget(dentry);
|
||||||
spin_lock(&dentry->d_lock);
|
dentry->d_time = jiffies;
|
||||||
for (;;) {
|
|
||||||
struct dentry *parent;
|
|
||||||
|
|
||||||
dentry->d_time = jiffies;
|
while (!IS_ROOT(dentry)) {
|
||||||
if (IS_ROOT(dentry))
|
struct dentry *parent = dget_parent(dentry);
|
||||||
break;
|
|
||||||
parent = dentry->d_parent;
|
|
||||||
dget(parent);
|
|
||||||
spin_unlock(&dentry->d_lock);
|
|
||||||
dput(dentry);
|
dput(dentry);
|
||||||
dentry = parent;
|
dentry = parent;
|
||||||
spin_lock(&dentry->d_lock);
|
|
||||||
|
dentry->d_time = jiffies;
|
||||||
}
|
}
|
||||||
spin_unlock(&dentry->d_lock);
|
|
||||||
dput(dentry);
|
dput(dentry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -332,16 +332,15 @@ static int smb_build_path(struct smb_sb_info *server, unsigned char *buf,
|
||||||
* and store it in reversed order [see reverse_string()]
|
* and store it in reversed order [see reverse_string()]
|
||||||
*/
|
*/
|
||||||
dget(entry);
|
dget(entry);
|
||||||
spin_lock(&entry->d_lock);
|
|
||||||
while (!IS_ROOT(entry)) {
|
while (!IS_ROOT(entry)) {
|
||||||
struct dentry *parent;
|
struct dentry *parent;
|
||||||
|
|
||||||
if (maxlen < (3<<unicode)) {
|
if (maxlen < (3<<unicode)) {
|
||||||
spin_unlock(&entry->d_lock);
|
|
||||||
dput(entry);
|
dput(entry);
|
||||||
return -ENAMETOOLONG;
|
return -ENAMETOOLONG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spin_lock(&entry->d_lock);
|
||||||
len = server->ops->convert(path, maxlen-2,
|
len = server->ops->convert(path, maxlen-2,
|
||||||
entry->d_name.name, entry->d_name.len,
|
entry->d_name.name, entry->d_name.len,
|
||||||
server->local_nls, server->remote_nls);
|
server->local_nls, server->remote_nls);
|
||||||
|
@ -359,15 +358,12 @@ static int smb_build_path(struct smb_sb_info *server, unsigned char *buf,
|
||||||
}
|
}
|
||||||
*path++ = '\\';
|
*path++ = '\\';
|
||||||
maxlen -= len+1;
|
maxlen -= len+1;
|
||||||
|
|
||||||
parent = entry->d_parent;
|
|
||||||
dget(parent);
|
|
||||||
spin_unlock(&entry->d_lock);
|
spin_unlock(&entry->d_lock);
|
||||||
|
|
||||||
|
parent = dget_parent(entry);
|
||||||
dput(entry);
|
dput(entry);
|
||||||
entry = parent;
|
entry = parent;
|
||||||
spin_lock(&entry->d_lock);
|
|
||||||
}
|
}
|
||||||
spin_unlock(&entry->d_lock);
|
|
||||||
dput(entry);
|
dput(entry);
|
||||||
reverse_string(buf, path-buf);
|
reverse_string(buf, path-buf);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue