]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/rpmsg/rpmsg_char.c
Merge tag 'for-linus-5.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml
[linux.git] / drivers / rpmsg / rpmsg_char.c
index 507bfe163883569199e0bac507279c76d6618554..4bbbacdbf3bb7702f185f007b638daf83378d489 100644 (file)
@@ -146,7 +146,6 @@ static int rpmsg_eptdev_release(struct inode *inode, struct file *filp)
 {
        struct rpmsg_eptdev *eptdev = cdev_to_eptdev(inode->i_cdev);
        struct device *dev = &eptdev->dev;
-       struct sk_buff *skb;
 
        /* Close the endpoint, if it's not already destroyed by the parent */
        mutex_lock(&eptdev->ept_lock);
@@ -157,10 +156,7 @@ static int rpmsg_eptdev_release(struct inode *inode, struct file *filp)
        mutex_unlock(&eptdev->ept_lock);
 
        /* Discard all SKBs */
-       while (!skb_queue_empty(&eptdev->queue)) {
-               skb = skb_dequeue(&eptdev->queue);
-               kfree_skb(skb);
-       }
+       skb_queue_purge(&eptdev->queue);
 
        put_device(dev);
 
@@ -227,8 +223,10 @@ static ssize_t rpmsg_eptdev_write_iter(struct kiocb *iocb,
        if (!kbuf)
                return -ENOMEM;
 
-       if (!copy_from_iter_full(kbuf, len, from))
-               return -EFAULT;
+       if (!copy_from_iter_full(kbuf, len, from)) {
+               ret = -EFAULT;
+               goto free_kbuf;
+       }
 
        if (mutex_lock_interruptible(&eptdev->ept_lock)) {
                ret = -ERESTARTSYS;