diff options
Diffstat (limited to 'fs/cifs/dir.c')
-rw-r--r-- | fs/cifs/dir.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index 6cdf23fd70e..8ca70b102b9 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c | |||
@@ -376,7 +376,7 @@ out: | |||
376 | return rc; | 376 | return rc; |
377 | } | 377 | } |
378 | 378 | ||
379 | struct file * | 379 | int |
380 | cifs_atomic_open(struct inode *inode, struct dentry *direntry, | 380 | cifs_atomic_open(struct inode *inode, struct dentry *direntry, |
381 | struct opendata *od, unsigned oflags, umode_t mode, | 381 | struct opendata *od, unsigned oflags, umode_t mode, |
382 | int *opened) | 382 | int *opened) |
@@ -403,15 +403,15 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, | |||
403 | if (!(oflags & O_CREAT)) { | 403 | if (!(oflags & O_CREAT)) { |
404 | struct dentry *res = cifs_lookup(inode, direntry, NULL); | 404 | struct dentry *res = cifs_lookup(inode, direntry, NULL); |
405 | if (IS_ERR(res)) | 405 | if (IS_ERR(res)) |
406 | return ERR_CAST(res); | 406 | return PTR_ERR(res); |
407 | 407 | ||
408 | finish_no_open(od, res); | 408 | finish_no_open(od, res); |
409 | return NULL; | 409 | return 1; |
410 | } | 410 | } |
411 | 411 | ||
412 | rc = check_name(direntry); | 412 | rc = check_name(direntry); |
413 | if (rc) | 413 | if (rc) |
414 | return ERR_PTR(rc); | 414 | return rc; |
415 | 415 | ||
416 | xid = GetXid(); | 416 | xid = GetXid(); |
417 | 417 | ||
@@ -428,13 +428,12 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, | |||
428 | rc = cifs_do_create(inode, direntry, xid, tlink, oflags, mode, | 428 | rc = cifs_do_create(inode, direntry, xid, tlink, oflags, mode, |
429 | &oplock, &fileHandle, opened); | 429 | &oplock, &fileHandle, opened); |
430 | 430 | ||
431 | if (rc) { | 431 | if (rc) |
432 | filp = ERR_PTR(rc); | ||
433 | goto out; | 432 | goto out; |
434 | } | ||
435 | 433 | ||
436 | filp = finish_open(od, direntry, generic_file_open, opened); | 434 | filp = finish_open(od, direntry, generic_file_open, opened); |
437 | if (IS_ERR(filp)) { | 435 | if (IS_ERR(filp)) { |
436 | rc = PTR_ERR(filp); | ||
438 | CIFSSMBClose(xid, tcon, fileHandle); | 437 | CIFSSMBClose(xid, tcon, fileHandle); |
439 | goto out; | 438 | goto out; |
440 | } | 439 | } |
@@ -443,14 +442,14 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, | |||
443 | if (pfile_info == NULL) { | 442 | if (pfile_info == NULL) { |
444 | CIFSSMBClose(xid, tcon, fileHandle); | 443 | CIFSSMBClose(xid, tcon, fileHandle); |
445 | fput(filp); | 444 | fput(filp); |
446 | filp = ERR_PTR(-ENOMEM); | 445 | rc = -ENOMEM; |
447 | } | 446 | } |
448 | 447 | ||
449 | out: | 448 | out: |
450 | cifs_put_tlink(tlink); | 449 | cifs_put_tlink(tlink); |
451 | free_xid: | 450 | free_xid: |
452 | FreeXid(xid); | 451 | FreeXid(xid); |
453 | return filp; | 452 | return rc; |
454 | } | 453 | } |
455 | 454 | ||
456 | int cifs_create(struct inode *inode, struct dentry *direntry, umode_t mode, | 455 | int cifs_create(struct inode *inode, struct dentry *direntry, umode_t mode, |