From 0bdb080c70495ea4efbed7661b4fe6100bd5adde Mon Sep 17 00:00:00 2001 From: Dominik Sliwa Date: Thu, 21 Feb 2019 10:23:08 +0100 Subject: Revert "backports: Remove unused parts" This reverts commit ab3fd3b9a801a9faa2619e2e65207e736f859a6d. --- patches/0047-write_iter/bluetooth.patch | 83 +++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 patches/0047-write_iter/bluetooth.patch (limited to 'patches/0047-write_iter/bluetooth.patch') diff --git a/patches/0047-write_iter/bluetooth.patch b/patches/0047-write_iter/bluetooth.patch new file mode 100644 index 00000000..093b526c --- /dev/null +++ b/patches/0047-write_iter/bluetooth.patch @@ -0,0 +1,83 @@ +--- a/drivers/bluetooth/hci_vhci.c ++++ b/drivers/bluetooth/hci_vhci.c +@@ -151,6 +151,7 @@ static int vhci_create_device(struct vhc + return 0; + } + ++#if LINUX_VERSION_IS_GEQ(3,18,0) + static inline ssize_t vhci_get_user(struct vhci_data *data, + struct iov_iter *from) + { +@@ -158,6 +159,17 @@ static inline ssize_t vhci_get_user(stru + struct sk_buff *skb; + __u8 pkt_type, opcode; + int ret; ++#else ++static inline ssize_t vhci_get_user(struct vhci_data *data, ++ const struct iovec *iov, ++ unsigned long count) ++{ ++ size_t len = iov_length(iov, count); ++ struct sk_buff *skb; ++ __u8 pkt_type, opcode; ++ unsigned long i; ++ int ret; ++#endif + + if (len < 2 || len > HCI_MAX_FRAME_SIZE) + return -EINVAL; +@@ -166,10 +178,20 @@ static inline ssize_t vhci_get_user(stru + if (!skb) + return -ENOMEM; + ++#if LINUX_VERSION_IS_GEQ(3,18,0) + if (copy_from_iter(skb_put(skb, len), len, from) != len) { + kfree_skb(skb); + return -EFAULT; + } ++#else ++ for (i = 0; i < count; i++) { ++ if (copy_from_user(skb_put(skb, iov[i].iov_len), ++ iov[i].iov_base, iov[i].iov_len)) { ++ kfree_skb(skb); ++ return -EFAULT; ++ } ++ } ++#endif + + pkt_type = *((__u8 *) skb->data); + skb_pull(skb, 1); +@@ -281,12 +303,21 @@ static ssize_t vhci_read(struct file *fi + return ret; + } + ++#if LINUX_VERSION_IS_GEQ(3,18,0) + static ssize_t vhci_write(struct kiocb *iocb, struct iov_iter *from) ++#else ++static ssize_t vhci_write(struct kiocb *iocb, const struct iovec *iov, ++ unsigned long count, loff_t pos) ++#endif + { + struct file *file = iocb->ki_filp; + struct vhci_data *data = file->private_data; + ++#if LINUX_VERSION_IS_GEQ(3,18,0) + return vhci_get_user(data, from); ++#else ++ return vhci_get_user(data, iov, count); ++#endif + } + + static unsigned int vhci_poll(struct file *file, poll_table *wait) +@@ -351,7 +382,11 @@ static int vhci_release(struct inode *in + static const struct file_operations vhci_fops = { + .owner = THIS_MODULE, + .read = vhci_read, ++#if LINUX_VERSION_IS_GEQ(3,18,0) + .write_iter = vhci_write, ++#else ++ .aio_write = vhci_write, ++#endif + .poll = vhci_poll, + .open = vhci_open, + .release = vhci_release, -- cgit v1.2.3