skb_splice_bits(): get rid of callback
[cascardo/linux.git] / net / kcm / kcmsock.c
index cb39e05..8a720ba 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/socket.h>
 #include <linux/uaccess.h>
 #include <linux/workqueue.h>
+#include <linux/syscalls.h>
 #include <net/kcm.h>
 #include <net/netns/generic.h>
 #include <net/sock.h>
@@ -1461,19 +1462,6 @@ out:
        return copied ? : err;
 }
 
-static ssize_t kcm_sock_splice(struct sock *sk,
-                              struct pipe_inode_info *pipe,
-                              struct splice_pipe_desc *spd)
-{
-       int ret;
-
-       release_sock(sk);
-       ret = splice_to_pipe(pipe, spd);
-       lock_sock(sk);
-
-       return ret;
-}
-
 static ssize_t kcm_splice_read(struct socket *sock, loff_t *ppos,
                               struct pipe_inode_info *pipe, size_t len,
                               unsigned int flags)
@@ -1503,8 +1491,7 @@ static ssize_t kcm_splice_read(struct socket *sock, loff_t *ppos,
        if (len > rxm->full_len)
                len = rxm->full_len;
 
-       copied = skb_splice_bits(skb, sk, rxm->offset, pipe, len, flags,
-                                kcm_sock_splice);
+       copied = skb_splice_bits(skb, sk, rxm->offset, pipe, len, flags);
        if (copied < 0) {
                err = copied;
                goto err_out;
@@ -2029,7 +2016,7 @@ static int kcm_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
                        if (copy_to_user((void __user *)arg, &info,
                                         sizeof(info))) {
                                err = -EFAULT;
-                               sock_release(newsock);
+                               sys_close(info.fd);
                        }
                }