|
@@ -450,16 +450,17 @@ EXPORT_SYMBOL(sockfd_lookup);
|
|
|
|
|
|
static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed)
|
|
|
{
|
|
|
- struct file *file;
|
|
|
+ struct fd f = fdget(fd);
|
|
|
struct socket *sock;
|
|
|
|
|
|
*err = -EBADF;
|
|
|
- file = fget_light(fd, fput_needed);
|
|
|
- if (file) {
|
|
|
- sock = sock_from_file(file, err);
|
|
|
- if (sock)
|
|
|
+ if (f.file) {
|
|
|
+ sock = sock_from_file(f.file, err);
|
|
|
+ if (likely(sock)) {
|
|
|
+ *fput_needed = f.flags;
|
|
|
return sock;
|
|
|
- fput_light(file, *fput_needed);
|
|
|
+ }
|
|
|
+ fdput(f);
|
|
|
}
|
|
|
return NULL;
|
|
|
}
|