diff options
Diffstat (limited to 'fs/smbfs/proc.c')
| -rw-r--r-- | fs/smbfs/proc.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/fs/smbfs/proc.c b/fs/smbfs/proc.c index 71c29b6670b4..3dcf638d4d3a 100644 --- a/fs/smbfs/proc.c +++ b/fs/smbfs/proc.c | |||
| @@ -332,16 +332,15 @@ static int smb_build_path(struct smb_sb_info *server, unsigned char *buf, | |||
| 332 | * and store it in reversed order [see reverse_string()] | 332 | * and store it in reversed order [see reverse_string()] |
| 333 | */ | 333 | */ |
| 334 | dget(entry); | 334 | dget(entry); |
| 335 | spin_lock(&entry->d_lock); | ||
| 336 | while (!IS_ROOT(entry)) { | 335 | while (!IS_ROOT(entry)) { |
| 337 | struct dentry *parent; | 336 | struct dentry *parent; |
| 338 | 337 | ||
| 339 | if (maxlen < (3<<unicode)) { | 338 | if (maxlen < (3<<unicode)) { |
| 340 | spin_unlock(&entry->d_lock); | ||
| 341 | dput(entry); | 339 | dput(entry); |
| 342 | return -ENAMETOOLONG; | 340 | return -ENAMETOOLONG; |
| 343 | } | 341 | } |
| 344 | 342 | ||
| 343 | spin_lock(&entry->d_lock); | ||
| 345 | len = server->ops->convert(path, maxlen-2, | 344 | len = server->ops->convert(path, maxlen-2, |
| 346 | entry->d_name.name, entry->d_name.len, | 345 | entry->d_name.name, entry->d_name.len, |
| 347 | server->local_nls, server->remote_nls); | 346 | server->local_nls, server->remote_nls); |
| @@ -359,15 +358,12 @@ static int smb_build_path(struct smb_sb_info *server, unsigned char *buf, | |||
| 359 | } | 358 | } |
| 360 | *path++ = '\\'; | 359 | *path++ = '\\'; |
| 361 | maxlen -= len+1; | 360 | maxlen -= len+1; |
| 362 | |||
| 363 | parent = entry->d_parent; | ||
| 364 | dget(parent); | ||
| 365 | spin_unlock(&entry->d_lock); | 361 | spin_unlock(&entry->d_lock); |
| 362 | |||
| 363 | parent = dget_parent(entry); | ||
| 366 | dput(entry); | 364 | dput(entry); |
| 367 | entry = parent; | 365 | entry = parent; |
| 368 | spin_lock(&entry->d_lock); | ||
| 369 | } | 366 | } |
| 370 | spin_unlock(&entry->d_lock); | ||
| 371 | dput(entry); | 367 | dput(entry); |
| 372 | reverse_string(buf, path-buf); | 368 | reverse_string(buf, path-buf); |
| 373 | 369 | ||
