|
@@ -934,7 +934,7 @@ EXPORT_SYMBOL(fd_install);
|
|
|
asmlinkage long sys_open(const char __user * filename, int flags, int mode)
|
|
|
{
|
|
|
char * tmp;
|
|
|
- int fd, error;
|
|
|
+ int fd;
|
|
|
|
|
|
if (force_o_largefile())
|
|
|
flags |= O_LARGEFILE;
|
|
@@ -945,20 +945,16 @@ asmlinkage long sys_open(const char __user * filename, int flags, int mode)
|
|
|
fd = get_unused_fd();
|
|
|
if (fd >= 0) {
|
|
|
struct file *f = filp_open(tmp, flags, mode);
|
|
|
- error = PTR_ERR(f);
|
|
|
- if (IS_ERR(f))
|
|
|
- goto out_error;
|
|
|
- fd_install(fd, f);
|
|
|
+ if (IS_ERR(f)) {
|
|
|
+ put_unused_fd(fd);
|
|
|
+ fd = PTR_ERR(f);
|
|
|
+ } else {
|
|
|
+ fd_install(fd, f);
|
|
|
+ }
|
|
|
}
|
|
|
-out:
|
|
|
putname(tmp);
|
|
|
}
|
|
|
return fd;
|
|
|
-
|
|
|
-out_error:
|
|
|
- put_unused_fd(fd);
|
|
|
- fd = error;
|
|
|
- goto out;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(sys_open);
|
|
|
|