usbip: don't open-code sockfd_lookup/sockfd_put
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
c7999c3627
commit
964ea96eba
|
@ -86,7 +86,6 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
|
|||
struct stub_device *sdev = dev_get_drvdata(dev);
|
||||
int sockfd = 0;
|
||||
struct socket *socket;
|
||||
ssize_t err = -EINVAL;
|
||||
|
||||
if (!sdev) {
|
||||
dev_err(dev, "sdev is null\n");
|
||||
|
@ -96,6 +95,7 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
|
|||
sscanf(buf, "%d", &sockfd);
|
||||
|
||||
if (sockfd != -1) {
|
||||
int err;
|
||||
dev_info(dev, "stub up\n");
|
||||
|
||||
spin_lock_irq(&sdev->ud.lock);
|
||||
|
@ -105,7 +105,7 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
|
|||
goto err;
|
||||
}
|
||||
|
||||
socket = sockfd_to_socket(sockfd);
|
||||
socket = sockfd_lookup(sockfd, &err);
|
||||
if (!socket)
|
||||
goto err;
|
||||
|
||||
|
@ -138,7 +138,7 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
|
|||
|
||||
err:
|
||||
spin_unlock_irq(&sdev->ud.lock);
|
||||
return err;
|
||||
return -EINVAL;
|
||||
}
|
||||
static DEVICE_ATTR(usbip_sockfd, S_IWUSR, NULL, store_sockfd);
|
||||
|
||||
|
@ -208,7 +208,7 @@ static void stub_shutdown_connection(struct usbip_device *ud)
|
|||
* not touch NULL socket.
|
||||
*/
|
||||
if (ud->tcp_socket) {
|
||||
fput(ud->tcp_socket->file);
|
||||
sockfd_put(ud->tcp_socket);
|
||||
ud->tcp_socket = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -400,31 +400,6 @@ err:
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(usbip_recv);
|
||||
|
||||
struct socket *sockfd_to_socket(unsigned int sockfd)
|
||||
{
|
||||
struct socket *socket;
|
||||
struct file *file;
|
||||
struct inode *inode;
|
||||
|
||||
file = fget(sockfd);
|
||||
if (!file) {
|
||||
pr_err("invalid sockfd\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
inode = file_inode(file);
|
||||
|
||||
if (!inode || !S_ISSOCK(inode->i_mode)) {
|
||||
fput(file);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
socket = SOCKET_I(inode);
|
||||
|
||||
return socket;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sockfd_to_socket);
|
||||
|
||||
/* there may be more cases to tweak the flags. */
|
||||
static unsigned int tweak_transfer_flags(unsigned int flags)
|
||||
{
|
||||
|
|
|
@ -314,7 +314,6 @@ void usbip_dump_urb(struct urb *purb);
|
|||
void usbip_dump_header(struct usbip_header *pdu);
|
||||
|
||||
int usbip_recv(struct socket *sock, void *buf, int size);
|
||||
struct socket *sockfd_to_socket(unsigned int sockfd);
|
||||
|
||||
void usbip_pack_pdu(struct usbip_header *pdu, struct urb *urb, int cmd,
|
||||
int pack);
|
||||
|
|
|
@ -789,7 +789,7 @@ static void vhci_shutdown_connection(struct usbip_device *ud)
|
|||
|
||||
/* active connection is closed */
|
||||
if (vdev->ud.tcp_socket) {
|
||||
fput(vdev->ud.tcp_socket->file);
|
||||
sockfd_put(vdev->ud.tcp_socket);
|
||||
vdev->ud.tcp_socket = NULL;
|
||||
}
|
||||
pr_info("release socket\n");
|
||||
|
@ -836,7 +836,7 @@ static void vhci_device_reset(struct usbip_device *ud)
|
|||
vdev->udev = NULL;
|
||||
|
||||
if (ud->tcp_socket) {
|
||||
fput(ud->tcp_socket->file);
|
||||
sockfd_put(ud->tcp_socket);
|
||||
ud->tcp_socket = NULL;
|
||||
}
|
||||
ud->status = VDEV_ST_NULL;
|
||||
|
|
|
@ -175,6 +175,7 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,
|
|||
struct socket *socket;
|
||||
int sockfd = 0;
|
||||
__u32 rhport = 0, devid = 0, speed = 0;
|
||||
int err;
|
||||
|
||||
/*
|
||||
* @rhport: port number of vhci_hcd
|
||||
|
@ -192,8 +193,7 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,
|
|||
return -EINVAL;
|
||||
|
||||
/* Extract socket from fd. */
|
||||
/* The correct way to clean this up is to fput(socket->file). */
|
||||
socket = sockfd_to_socket(sockfd);
|
||||
socket = sockfd_lookup(sockfd, &err);
|
||||
if (!socket)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -209,7 +209,7 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,
|
|||
spin_unlock(&vdev->ud.lock);
|
||||
spin_unlock(&the_controller->lock);
|
||||
|
||||
fput(socket->file);
|
||||
sockfd_put(socket);
|
||||
|
||||
dev_err(dev, "port %d already used\n", rhport);
|
||||
return -EINVAL;
|
||||
|
|
Loading…
Reference in New Issue