1 |
commit: 7cce7c035d2ab32c02753cef204c27081bc51a2b |
2 |
Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
3 |
AuthorDate: Wed Jan 16 23:28:38 2019 +0000 |
4 |
Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
5 |
CommitDate: Wed Jan 16 23:28:38 2019 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=7cce7c03 |
7 |
|
8 |
proj/linux-patches: Linux patch 4.9.151 |
9 |
|
10 |
Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> |
11 |
|
12 |
0000_README | 4 + |
13 |
1150_linux-4.9.151.patch | 454 +++++++++++++++++++++++++++++++++++++++++++++++ |
14 |
2 files changed, 458 insertions(+) |
15 |
|
16 |
diff --git a/0000_README b/0000_README |
17 |
index 29c249f..93d0884 100644 |
18 |
--- a/0000_README |
19 |
+++ b/0000_README |
20 |
@@ -643,6 +643,10 @@ Patch: 1149_linux-4.9.150.patch |
21 |
From: http://www.kernel.org |
22 |
Desc: Linux 4.9.150 |
23 |
|
24 |
+Patch: 1150_linux-4.9.151.patch |
25 |
+From: http://www.kernel.org |
26 |
+Desc: Linux 4.9.151 |
27 |
+ |
28 |
Patch: 1500_XATTR_USER_PREFIX.patch |
29 |
From: https://bugs.gentoo.org/show_bug.cgi?id=470644 |
30 |
Desc: Support for namespace user.pax.* on tmpfs. |
31 |
|
32 |
diff --git a/1150_linux-4.9.151.patch b/1150_linux-4.9.151.patch |
33 |
new file mode 100644 |
34 |
index 0000000..c7195cc |
35 |
--- /dev/null |
36 |
+++ b/1150_linux-4.9.151.patch |
37 |
@@ -0,0 +1,454 @@ |
38 |
+diff --git a/Makefile b/Makefile |
39 |
+index 0e7874951ac5..f1aeb98f9ace 100644 |
40 |
+--- a/Makefile |
41 |
++++ b/Makefile |
42 |
+@@ -1,6 +1,6 @@ |
43 |
+ VERSION = 4 |
44 |
+ PATCHLEVEL = 9 |
45 |
+-SUBLEVEL = 150 |
46 |
++SUBLEVEL = 151 |
47 |
+ EXTRAVERSION = |
48 |
+ NAME = Roaring Lionus |
49 |
+ |
50 |
+diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c |
51 |
+index 3a6c9b741b23..4f4c34892086 100644 |
52 |
+--- a/drivers/acpi/power.c |
53 |
++++ b/drivers/acpi/power.c |
54 |
+@@ -131,6 +131,23 @@ void acpi_power_resources_list_free(struct list_head *list) |
55 |
+ } |
56 |
+ } |
57 |
+ |
58 |
++static bool acpi_power_resource_is_dup(union acpi_object *package, |
59 |
++ unsigned int start, unsigned int i) |
60 |
++{ |
61 |
++ acpi_handle rhandle, dup; |
62 |
++ unsigned int j; |
63 |
++ |
64 |
++ /* The caller is expected to check the package element types */ |
65 |
++ rhandle = package->package.elements[i].reference.handle; |
66 |
++ for (j = start; j < i; j++) { |
67 |
++ dup = package->package.elements[j].reference.handle; |
68 |
++ if (dup == rhandle) |
69 |
++ return true; |
70 |
++ } |
71 |
++ |
72 |
++ return false; |
73 |
++} |
74 |
++ |
75 |
+ int acpi_extract_power_resources(union acpi_object *package, unsigned int start, |
76 |
+ struct list_head *list) |
77 |
+ { |
78 |
+@@ -150,6 +167,11 @@ int acpi_extract_power_resources(union acpi_object *package, unsigned int start, |
79 |
+ err = -ENODEV; |
80 |
+ break; |
81 |
+ } |
82 |
++ |
83 |
++ /* Some ACPI tables contain duplicate power resource references */ |
84 |
++ if (acpi_power_resource_is_dup(package, start, i)) |
85 |
++ continue; |
86 |
++ |
87 |
+ err = acpi_add_power_resource(rhandle); |
88 |
+ if (err) |
89 |
+ break; |
90 |
+diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c |
91 |
+index ef3016a467a0..8a93ca4d6840 100644 |
92 |
+--- a/drivers/block/rbd.c |
93 |
++++ b/drivers/block/rbd.c |
94 |
+@@ -6346,7 +6346,6 @@ static ssize_t do_rbd_remove(struct bus_type *bus, |
95 |
+ struct list_head *tmp; |
96 |
+ int dev_id; |
97 |
+ char opt_buf[6]; |
98 |
+- bool already = false; |
99 |
+ bool force = false; |
100 |
+ int ret; |
101 |
+ |
102 |
+@@ -6379,13 +6378,13 @@ static ssize_t do_rbd_remove(struct bus_type *bus, |
103 |
+ spin_lock_irq(&rbd_dev->lock); |
104 |
+ if (rbd_dev->open_count && !force) |
105 |
+ ret = -EBUSY; |
106 |
+- else |
107 |
+- already = test_and_set_bit(RBD_DEV_FLAG_REMOVING, |
108 |
+- &rbd_dev->flags); |
109 |
++ else if (test_and_set_bit(RBD_DEV_FLAG_REMOVING, |
110 |
++ &rbd_dev->flags)) |
111 |
++ ret = -EINPROGRESS; |
112 |
+ spin_unlock_irq(&rbd_dev->lock); |
113 |
+ } |
114 |
+ spin_unlock(&rbd_dev_list_lock); |
115 |
+- if (ret < 0 || already) |
116 |
++ if (ret) |
117 |
+ return ret; |
118 |
+ |
119 |
+ if (force) { |
120 |
+diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c |
121 |
+index 6f638bbc922d..00e8e675cbeb 100644 |
122 |
+--- a/drivers/i2c/i2c-dev.c |
123 |
++++ b/drivers/i2c/i2c-dev.c |
124 |
+@@ -461,9 +461,15 @@ static long i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
125 |
+ return i2cdev_ioctl_smbus(client, arg); |
126 |
+ |
127 |
+ case I2C_RETRIES: |
128 |
++ if (arg > INT_MAX) |
129 |
++ return -EINVAL; |
130 |
++ |
131 |
+ client->adapter->retries = arg; |
132 |
+ break; |
133 |
+ case I2C_TIMEOUT: |
134 |
++ if (arg > INT_MAX) |
135 |
++ return -EINVAL; |
136 |
++ |
137 |
+ /* For historical reasons, user-space sets the timeout |
138 |
+ * value in units of 10 ms. |
139 |
+ */ |
140 |
+diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c |
141 |
+index 6c0bb38c4089..8d4d46f3fd16 100644 |
142 |
+--- a/drivers/usb/class/cdc-acm.c |
143 |
++++ b/drivers/usb/class/cdc-acm.c |
144 |
+@@ -1828,6 +1828,13 @@ static const struct usb_device_id acm_ids[] = { |
145 |
+ .driver_info = IGNORE_DEVICE, |
146 |
+ }, |
147 |
+ |
148 |
++ { USB_DEVICE(0x1bc7, 0x0021), /* Telit 3G ACM only composition */ |
149 |
++ .driver_info = SEND_ZERO_PACKET, |
150 |
++ }, |
151 |
++ { USB_DEVICE(0x1bc7, 0x0023), /* Telit 3G ACM + ECM composition */ |
152 |
++ .driver_info = SEND_ZERO_PACKET, |
153 |
++ }, |
154 |
++ |
155 |
+ /* control interfaces without any protocol set */ |
156 |
+ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, |
157 |
+ USB_CDC_PROTO_NONE) }, |
158 |
+diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c |
159 |
+index cf378b1ed373..733479ddf8a7 100644 |
160 |
+--- a/drivers/usb/core/quirks.c |
161 |
++++ b/drivers/usb/core/quirks.c |
162 |
+@@ -240,7 +240,8 @@ static const struct usb_device_id usb_quirk_list[] = { |
163 |
+ USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL }, |
164 |
+ |
165 |
+ /* Corsair K70 RGB */ |
166 |
+- { USB_DEVICE(0x1b1c, 0x1b13), .driver_info = USB_QUIRK_DELAY_INIT }, |
167 |
++ { USB_DEVICE(0x1b1c, 0x1b13), .driver_info = USB_QUIRK_DELAY_INIT | |
168 |
++ USB_QUIRK_DELAY_CTRL_MSG }, |
169 |
+ |
170 |
+ /* Corsair Strafe */ |
171 |
+ { USB_DEVICE(0x1b1c, 0x1b15), .driver_info = USB_QUIRK_DELAY_INIT | |
172 |
+diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c |
173 |
+index 344ec8631481..13f2c051dbf2 100644 |
174 |
+--- a/drivers/usb/storage/scsiglue.c |
175 |
++++ b/drivers/usb/storage/scsiglue.c |
176 |
+@@ -251,8 +251,12 @@ static int slave_configure(struct scsi_device *sdev) |
177 |
+ if (!(us->fflags & US_FL_NEEDS_CAP16)) |
178 |
+ sdev->try_rc_10_first = 1; |
179 |
+ |
180 |
+- /* assume SPC3 or latter devices support sense size > 18 */ |
181 |
+- if (sdev->scsi_level > SCSI_SPC_2) |
182 |
++ /* |
183 |
++ * assume SPC3 or latter devices support sense size > 18 |
184 |
++ * unless US_FL_BAD_SENSE quirk is specified. |
185 |
++ */ |
186 |
++ if (sdev->scsi_level > SCSI_SPC_2 && |
187 |
++ !(us->fflags & US_FL_BAD_SENSE)) |
188 |
+ us->fflags |= US_FL_SANE_SENSE; |
189 |
+ |
190 |
+ /* |
191 |
+diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h |
192 |
+index 0a86b3f3638e..c802aabcc58c 100644 |
193 |
+--- a/drivers/usb/storage/unusual_devs.h |
194 |
++++ b/drivers/usb/storage/unusual_devs.h |
195 |
+@@ -1284,6 +1284,18 @@ UNUSUAL_DEV( 0x090c, 0x1132, 0x0000, 0xffff, |
196 |
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
197 |
+ US_FL_FIX_CAPACITY ), |
198 |
+ |
199 |
++/* |
200 |
++ * Reported by Icenowy Zheng <icenowy@××××.io> |
201 |
++ * The SMI SM3350 USB-UFS bridge controller will enter a wrong state |
202 |
++ * that do not process read/write command if a long sense is requested, |
203 |
++ * so force to use 18-byte sense. |
204 |
++ */ |
205 |
++UNUSUAL_DEV( 0x090c, 0x3350, 0x0000, 0xffff, |
206 |
++ "SMI", |
207 |
++ "SM3350 UFS-to-USB-Mass-Storage bridge", |
208 |
++ USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
209 |
++ US_FL_BAD_SENSE ), |
210 |
++ |
211 |
+ /* |
212 |
+ * Reported by Paul Hartman <paul.hartman+linux@×××××.com> |
213 |
+ * This card reader returns "Illegal Request, Logical Block Address |
214 |
+diff --git a/fs/cifs/file.c b/fs/cifs/file.c |
215 |
+index 49eeed25f200..a3046b6523c8 100644 |
216 |
+--- a/fs/cifs/file.c |
217 |
++++ b/fs/cifs/file.c |
218 |
+@@ -1118,10 +1118,10 @@ cifs_push_mandatory_locks(struct cifsFileInfo *cfile) |
219 |
+ |
220 |
+ /* |
221 |
+ * Accessing maxBuf is racy with cifs_reconnect - need to store value |
222 |
+- * and check it for zero before using. |
223 |
++ * and check it before using. |
224 |
+ */ |
225 |
+ max_buf = tcon->ses->server->maxBuf; |
226 |
+- if (!max_buf) { |
227 |
++ if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) { |
228 |
+ free_xid(xid); |
229 |
+ return -EINVAL; |
230 |
+ } |
231 |
+@@ -1456,10 +1456,10 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, |
232 |
+ |
233 |
+ /* |
234 |
+ * Accessing maxBuf is racy with cifs_reconnect - need to store value |
235 |
+- * and check it for zero before using. |
236 |
++ * and check it before using. |
237 |
+ */ |
238 |
+ max_buf = tcon->ses->server->maxBuf; |
239 |
+- if (!max_buf) |
240 |
++ if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) |
241 |
+ return -EINVAL; |
242 |
+ |
243 |
+ max_num = (max_buf - sizeof(struct smb_hdr)) / |
244 |
+diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c |
245 |
+index b2aff0c6f22c..b7885dc0d9bb 100644 |
246 |
+--- a/fs/cifs/smb2file.c |
247 |
++++ b/fs/cifs/smb2file.c |
248 |
+@@ -123,10 +123,10 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, |
249 |
+ |
250 |
+ /* |
251 |
+ * Accessing maxBuf is racy with cifs_reconnect - need to store value |
252 |
+- * and check it for zero before using. |
253 |
++ * and check it before using. |
254 |
+ */ |
255 |
+ max_buf = tcon->ses->server->maxBuf; |
256 |
+- if (!max_buf) |
257 |
++ if (max_buf < sizeof(struct smb2_lock_element)) |
258 |
+ return -EINVAL; |
259 |
+ |
260 |
+ max_num = max_buf / sizeof(struct smb2_lock_element); |
261 |
+diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c |
262 |
+index cc26d4138d70..de133eeebc8a 100644 |
263 |
+--- a/fs/cifs/transport.c |
264 |
++++ b/fs/cifs/transport.c |
265 |
+@@ -301,7 +301,7 @@ uncork: |
266 |
+ if (rc < 0 && rc != -EINTR) |
267 |
+ cifs_dbg(VFS, "Error %d sending data on socket to server\n", |
268 |
+ rc); |
269 |
+- else |
270 |
++ else if (rc > 0) |
271 |
+ rc = 0; |
272 |
+ |
273 |
+ return rc; |
274 |
+diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c |
275 |
+index 1008384d5ed5..9a13f86fed62 100644 |
276 |
+--- a/fs/ext4/inline.c |
277 |
++++ b/fs/ext4/inline.c |
278 |
+@@ -1859,12 +1859,12 @@ int ext4_inline_data_fiemap(struct inode *inode, |
279 |
+ physical += (char *)ext4_raw_inode(&iloc) - iloc.bh->b_data; |
280 |
+ physical += offsetof(struct ext4_inode, i_block); |
281 |
+ |
282 |
+- if (physical) |
283 |
+- error = fiemap_fill_next_extent(fieinfo, start, physical, |
284 |
+- inline_len, flags); |
285 |
+ brelse(iloc.bh); |
286 |
+ out: |
287 |
+ up_read(&EXT4_I(inode)->xattr_sem); |
288 |
++ if (physical) |
289 |
++ error = fiemap_fill_next_extent(fieinfo, start, physical, |
290 |
++ inline_len, flags); |
291 |
+ return (error < 0 ? error : 0); |
292 |
+ } |
293 |
+ |
294 |
+diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c |
295 |
+index f62eca8cbde0..4815be26b15f 100644 |
296 |
+--- a/fs/ext4/inode.c |
297 |
++++ b/fs/ext4/inode.c |
298 |
+@@ -2698,7 +2698,8 @@ static int ext4_writepages(struct address_space *mapping, |
299 |
+ * We may need to convert up to one extent per block in |
300 |
+ * the page and we may dirty the inode. |
301 |
+ */ |
302 |
+- rsv_blocks = 1 + (PAGE_SIZE >> inode->i_blkbits); |
303 |
++ rsv_blocks = 1 + ext4_chunk_trans_blocks(inode, |
304 |
++ PAGE_SIZE >> inode->i_blkbits); |
305 |
+ } |
306 |
+ |
307 |
+ /* |
308 |
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c |
309 |
+index 6810234b0b27..a6c7ace9cfd1 100644 |
310 |
+--- a/fs/ext4/super.c |
311 |
++++ b/fs/ext4/super.c |
312 |
+@@ -4679,7 +4679,7 @@ static int ext4_commit_super(struct super_block *sb, int sync) |
313 |
+ ext4_superblock_csum_set(sb); |
314 |
+ if (sync) |
315 |
+ lock_buffer(sbh); |
316 |
+- if (buffer_write_io_error(sbh)) { |
317 |
++ if (buffer_write_io_error(sbh) || !buffer_uptodate(sbh)) { |
318 |
+ /* |
319 |
+ * Oh, dear. A previous attempt to write the |
320 |
+ * superblock failed. This could happen because the |
321 |
+diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h |
322 |
+index 102c84dcc11a..63eed9ac8fd7 100644 |
323 |
+--- a/include/linux/sunrpc/svc.h |
324 |
++++ b/include/linux/sunrpc/svc.h |
325 |
+@@ -291,9 +291,12 @@ struct svc_rqst { |
326 |
+ struct svc_cacherep * rq_cacherep; /* cache info */ |
327 |
+ struct task_struct *rq_task; /* service thread */ |
328 |
+ spinlock_t rq_lock; /* per-request lock */ |
329 |
++ struct net *rq_bc_net; /* pointer to backchannel's |
330 |
++ * net namespace |
331 |
++ */ |
332 |
+ }; |
333 |
+ |
334 |
+-#define SVC_NET(svc_rqst) (svc_rqst->rq_xprt->xpt_net) |
335 |
++#define SVC_NET(rqst) (rqst->rq_xprt ? rqst->rq_xprt->xpt_net : rqst->rq_bc_net) |
336 |
+ |
337 |
+ /* |
338 |
+ * Rigorous type checking on sockaddr type conversions |
339 |
+diff --git a/mm/slab.c b/mm/slab.c |
340 |
+index 263dcda6897b..354a09deecff 100644 |
341 |
+--- a/mm/slab.c |
342 |
++++ b/mm/slab.c |
343 |
+@@ -682,8 +682,10 @@ static struct alien_cache *__alloc_alien_cache(int node, int entries, |
344 |
+ struct alien_cache *alc = NULL; |
345 |
+ |
346 |
+ alc = kmalloc_node(memsize, gfp, node); |
347 |
+- init_arraycache(&alc->ac, entries, batch); |
348 |
+- spin_lock_init(&alc->lock); |
349 |
++ if (alc) { |
350 |
++ init_arraycache(&alc->ac, entries, batch); |
351 |
++ spin_lock_init(&alc->lock); |
352 |
++ } |
353 |
+ return alc; |
354 |
+ } |
355 |
+ |
356 |
+diff --git a/mm/util.c b/mm/util.c |
357 |
+index 8c755d05d4e6..07f467206186 100644 |
358 |
+--- a/mm/util.c |
359 |
++++ b/mm/util.c |
360 |
+@@ -389,7 +389,7 @@ bool page_mapped(struct page *page) |
361 |
+ return true; |
362 |
+ if (PageHuge(page)) |
363 |
+ return false; |
364 |
+- for (i = 0; i < hpage_nr_pages(page); i++) { |
365 |
++ for (i = 0; i < (1 << compound_order(page)); i++) { |
366 |
+ if (atomic_read(&page[i]._mapcount) >= 0) |
367 |
+ return true; |
368 |
+ } |
369 |
+diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c |
370 |
+index 272c34551979..eea18a124e4f 100644 |
371 |
+--- a/net/sunrpc/svc.c |
372 |
++++ b/net/sunrpc/svc.c |
373 |
+@@ -1137,6 +1137,8 @@ void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) |
374 |
+ static __printf(2,3) void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) {} |
375 |
+ #endif |
376 |
+ |
377 |
++extern void svc_tcp_prep_reply_hdr(struct svc_rqst *); |
378 |
++ |
379 |
+ /* |
380 |
+ * Common routine for processing the RPC request. |
381 |
+ */ |
382 |
+@@ -1166,7 +1168,8 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) |
383 |
+ clear_bit(RQ_DROPME, &rqstp->rq_flags); |
384 |
+ |
385 |
+ /* Setup reply header */ |
386 |
+- rqstp->rq_xprt->xpt_ops->xpo_prep_reply_hdr(rqstp); |
387 |
++ if (rqstp->rq_prot == IPPROTO_TCP) |
388 |
++ svc_tcp_prep_reply_hdr(rqstp); |
389 |
+ |
390 |
+ svc_putu32(resv, rqstp->rq_xid); |
391 |
+ |
392 |
+@@ -1312,7 +1315,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) |
393 |
+ return 0; |
394 |
+ |
395 |
+ close: |
396 |
+- if (test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags)) |
397 |
++ if (rqstp->rq_xprt && test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags)) |
398 |
+ svc_close_xprt(rqstp->rq_xprt); |
399 |
+ dprintk("svc: svc_process close\n"); |
400 |
+ return 0; |
401 |
+@@ -1439,10 +1442,10 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req, |
402 |
+ dprintk("svc: %s(%p)\n", __func__, req); |
403 |
+ |
404 |
+ /* Build the svc_rqst used by the common processing routine */ |
405 |
+- rqstp->rq_xprt = serv->sv_bc_xprt; |
406 |
+ rqstp->rq_xid = req->rq_xid; |
407 |
+ rqstp->rq_prot = req->rq_xprt->prot; |
408 |
+ rqstp->rq_server = serv; |
409 |
++ rqstp->rq_bc_net = req->rq_xprt->xprt_net; |
410 |
+ |
411 |
+ rqstp->rq_addrlen = sizeof(req->rq_xprt->addr); |
412 |
+ memcpy(&rqstp->rq_addr, &req->rq_xprt->addr, rqstp->rq_addrlen); |
413 |
+diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c |
414 |
+index 064f20bb845a..42ce3ed21637 100644 |
415 |
+--- a/net/sunrpc/svc_xprt.c |
416 |
++++ b/net/sunrpc/svc_xprt.c |
417 |
+@@ -510,10 +510,11 @@ out: |
418 |
+ */ |
419 |
+ void svc_reserve(struct svc_rqst *rqstp, int space) |
420 |
+ { |
421 |
++ struct svc_xprt *xprt = rqstp->rq_xprt; |
422 |
++ |
423 |
+ space += rqstp->rq_res.head[0].iov_len; |
424 |
+ |
425 |
+- if (space < rqstp->rq_reserved) { |
426 |
+- struct svc_xprt *xprt = rqstp->rq_xprt; |
427 |
++ if (xprt && space < rqstp->rq_reserved) { |
428 |
+ atomic_sub((rqstp->rq_reserved - space), &xprt->xpt_reserved); |
429 |
+ rqstp->rq_reserved = space; |
430 |
+ |
431 |
+diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c |
432 |
+index 33f599cb0936..fd7fbe91955e 100644 |
433 |
+--- a/net/sunrpc/svcsock.c |
434 |
++++ b/net/sunrpc/svcsock.c |
435 |
+@@ -1195,7 +1195,7 @@ static int svc_tcp_sendto(struct svc_rqst *rqstp) |
436 |
+ /* |
437 |
+ * Setup response header. TCP has a 4B record length field. |
438 |
+ */ |
439 |
+-static void svc_tcp_prep_reply_hdr(struct svc_rqst *rqstp) |
440 |
++void svc_tcp_prep_reply_hdr(struct svc_rqst *rqstp) |
441 |
+ { |
442 |
+ struct kvec *resv = &rqstp->rq_res.head[0]; |
443 |
+ |
444 |
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c |
445 |
+index 0fd31cff483e..0fc05ebdf81a 100644 |
446 |
+--- a/sound/pci/hda/patch_realtek.c |
447 |
++++ b/sound/pci/hda/patch_realtek.c |
448 |
+@@ -4841,6 +4841,13 @@ static void alc280_fixup_hp_9480m(struct hda_codec *codec, |
449 |
+ } |
450 |
+ } |
451 |
+ |
452 |
++static void alc_fixup_disable_mic_vref(struct hda_codec *codec, |
453 |
++ const struct hda_fixup *fix, int action) |
454 |
++{ |
455 |
++ if (action == HDA_FIXUP_ACT_PRE_PROBE) |
456 |
++ snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREFHIZ); |
457 |
++} |
458 |
++ |
459 |
+ /* for hda_fixup_thinkpad_acpi() */ |
460 |
+ #include "thinkpad_helper.c" |
461 |
+ |
462 |
+@@ -4947,6 +4954,7 @@ enum { |
463 |
+ ALC293_FIXUP_LENOVO_SPK_NOISE, |
464 |
+ ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY, |
465 |
+ ALC255_FIXUP_DELL_SPK_NOISE, |
466 |
++ ALC225_FIXUP_DISABLE_MIC_VREF, |
467 |
+ ALC225_FIXUP_DELL1_MIC_NO_PRESENCE, |
468 |
+ ALC295_FIXUP_DISABLE_DAC3, |
469 |
+ ALC280_FIXUP_HP_HEADSET_MIC, |
470 |
+@@ -5605,6 +5613,12 @@ static const struct hda_fixup alc269_fixups[] = { |
471 |
+ .chained = true, |
472 |
+ .chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE |
473 |
+ }, |
474 |
++ [ALC225_FIXUP_DISABLE_MIC_VREF] = { |
475 |
++ .type = HDA_FIXUP_FUNC, |
476 |
++ .v.func = alc_fixup_disable_mic_vref, |
477 |
++ .chained = true, |
478 |
++ .chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE |
479 |
++ }, |
480 |
+ [ALC225_FIXUP_DELL1_MIC_NO_PRESENCE] = { |
481 |
+ .type = HDA_FIXUP_VERBS, |
482 |
+ .v.verbs = (const struct hda_verb[]) { |
483 |
+@@ -5614,7 +5628,7 @@ static const struct hda_fixup alc269_fixups[] = { |
484 |
+ {} |
485 |
+ }, |
486 |
+ .chained = true, |
487 |
+- .chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE |
488 |
++ .chain_id = ALC225_FIXUP_DISABLE_MIC_VREF |
489 |
+ }, |
490 |
+ [ALC280_FIXUP_HP_HEADSET_MIC] = { |
491 |
+ .type = HDA_FIXUP_FUNC, |