]>
Commit | Line | Data |
---|---|---|
6986ddb6 JR |
1 | diff -ur lin_tape-3.0.8.orig/lower.c lin_tape-3.0.8/lower.c |
2 | --- lin_tape-3.0.8.orig/lower.c 2016-03-15 23:39:12.000000000 +0100 | |
3 | +++ lin_tape-3.0.8/lower.c 2016-06-19 13:16:12.828653141 +0200 | |
4 | @@ -471,6 +471,21 @@ | |
5 | } else if (pfo_cmd->source == PFO_SOURCE_SG || | |
6 | pfo_cmd->source == PFO_SOURCE_IOCTL) { | |
7 | if (pfo_cmd->iov_count) { | |
8 | +#if LINUX_VERSION_CODE > KERNEL_VERSION(3,19,0) | |
9 | + struct iovec *iov = NULL; | |
10 | + struct iov_iter i; | |
11 | + err = import_iovec(write, pfo_cmd->buffer, pfo_cmd->iov_count, 0, &iov, &i); | |
12 | + if (err < 0) | |
13 | + return err; | |
14 | + iov_iter_truncate(&i, pfo_cmd->bufflen); | |
15 | + | |
16 | + err = blk_rq_map_user_iov(sdev->request_queue, | |
17 | + rq, | |
18 | + pfo_cmd->mdata, | |
19 | + &i, | |
20 | + GFP_ATOMIC); | |
21 | + kfree(iov); | |
22 | +#else | |
23 | err = blk_rq_map_user_iov(sdev->request_queue, | |
24 | rq, | |
25 | pfo_cmd->mdata, | |
26 | @@ -478,6 +493,7 @@ | |
27 | pfo_cmd->iov_count, | |
28 | pfo_cmd->bufflen, | |
29 | GFP_KERNEL); | |
30 | +#endif | |
31 | } else { | |
32 | err = blk_rq_map_user(sdev->request_queue, | |
33 | rq, | |
34 | diff -ur lin_tape-3.0.8.orig/sgmp.c lin_tape-3.0.8/sgmp.c | |
35 | --- lin_tape-3.0.8.orig/sgmp.c 2016-06-19 13:15:52.000000000 +0200 | |
36 | +++ lin_tape-3.0.8/sgmp.c 2016-06-19 13:16:12.828653141 +0200 | |
c4a7d1f4 JR |
37 | @@ -77,6 +77,7 @@ |
38 | #else | |
39 | #include <linux/smp_lock.h> | |
40 | #endif | |
41 | +#include <linux/uio.h> | |
42 | ||
43 | #include "scsi.h" | |
44 | #include <scsi/scsi_dbg.h> | |
6986ddb6 JR |
45 | @@ -2029,7 +2029,12 @@ |
46 | } | |
47 | ||
48 | if (iov_count) { | |
49 | +#if LINUX_VERSION_CODE > KERNEL_VERSION(3,19,0) | |
50 | + int size = sizeof(struct iovec) * iov_count; | |
51 | + struct iov_iter i; | |
52 | +#else | |
53 | int len, size = sizeof(struct sg_iovec) * iov_count; | |
54 | +#endif | |
55 | struct iovec *iov; | |
56 | #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,32) | |
57 | iov = memdup_user(hp->dxferp, size); | |
58 | @@ -2046,6 +2051,13 @@ | |
59 | } | |
60 | #endif | |
61 | ||
62 | +#if LINUX_VERSION_CODE > KERNEL_VERSION(3,19,0) | |
63 | + iov_iter_init(&i, rw, iov, iov_count, | |
64 | + min_t(size_t, hp->dxfer_len, | |
65 | + iov_length(iov, iov_count))); | |
66 | + | |
67 | + res = blk_rq_map_user_iov(q, rq, md, &i, GFP_ATOMIC); | |
68 | +#else | |
69 | len = iov_length(iov, iov_count); | |
70 | if (hp->dxfer_len < len) { | |
71 | iov_count = iov_shorten(iov, iov_count, hp->dxfer_len); | |
72 | @@ -2055,6 +2067,7 @@ | |
73 | res = blk_rq_map_user_iov(q, rq, md, (struct sg_iovec *)iov, | |
74 | iov_count, | |
75 | len, GFP_ATOMIC); | |
76 | +#endif | |
77 | kfree(iov); | |
78 | } else | |
79 | res = blk_rq_map_user(q, rq, md, hp->dxferp, |