Annotation of /trunk/kernel-alx/patches-4.14/0101-4.14.2-all-fixes.patch
Parent Directory | Revision Log
Revision 3238 -
(hide annotations)
(download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 7 months ago) by niro
File size: 19682 byte(s)
Fri Nov 9 12:14:58 2018 UTC (5 years, 7 months ago) by niro
File size: 19682 byte(s)
-added up to patches-4.14.79
1 | niro | 3238 | diff --git a/Makefile b/Makefile |
2 | index 01f9df1af256..75d89dc2b94a 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,7 +1,7 @@ | ||
6 | # SPDX-License-Identifier: GPL-2.0 | ||
7 | VERSION = 4 | ||
8 | PATCHLEVEL = 14 | ||
9 | -SUBLEVEL = 1 | ||
10 | +SUBLEVEL = 2 | ||
11 | EXTRAVERSION = | ||
12 | NAME = Petit Gorille | ||
13 | |||
14 | diff --git a/block/bio.c b/block/bio.c | ||
15 | index 101c2a9b5481..33fa6b4af312 100644 | ||
16 | --- a/block/bio.c | ||
17 | +++ b/block/bio.c | ||
18 | @@ -597,6 +597,7 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src) | ||
19 | * so we don't set nor calculate new physical/hw segment counts here | ||
20 | */ | ||
21 | bio->bi_disk = bio_src->bi_disk; | ||
22 | + bio->bi_partno = bio_src->bi_partno; | ||
23 | bio_set_flag(bio, BIO_CLONED); | ||
24 | bio->bi_opf = bio_src->bi_opf; | ||
25 | bio->bi_write_hint = bio_src->bi_write_hint; | ||
26 | diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c | ||
27 | index 810b138f5897..c82d9fd2f05a 100644 | ||
28 | --- a/drivers/char/ipmi/ipmi_msghandler.c | ||
29 | +++ b/drivers/char/ipmi/ipmi_msghandler.c | ||
30 | @@ -4030,7 +4030,8 @@ smi_from_recv_msg(ipmi_smi_t intf, struct ipmi_recv_msg *recv_msg, | ||
31 | } | ||
32 | |||
33 | static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent, | ||
34 | - struct list_head *timeouts, long timeout_period, | ||
35 | + struct list_head *timeouts, | ||
36 | + unsigned long timeout_period, | ||
37 | int slot, unsigned long *flags, | ||
38 | unsigned int *waiting_msgs) | ||
39 | { | ||
40 | @@ -4043,8 +4044,8 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent, | ||
41 | if (!ent->inuse) | ||
42 | return; | ||
43 | |||
44 | - ent->timeout -= timeout_period; | ||
45 | - if (ent->timeout > 0) { | ||
46 | + if (timeout_period < ent->timeout) { | ||
47 | + ent->timeout -= timeout_period; | ||
48 | (*waiting_msgs)++; | ||
49 | return; | ||
50 | } | ||
51 | @@ -4110,7 +4111,8 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent, | ||
52 | } | ||
53 | } | ||
54 | |||
55 | -static unsigned int ipmi_timeout_handler(ipmi_smi_t intf, long timeout_period) | ||
56 | +static unsigned int ipmi_timeout_handler(ipmi_smi_t intf, | ||
57 | + unsigned long timeout_period) | ||
58 | { | ||
59 | struct list_head timeouts; | ||
60 | struct ipmi_recv_msg *msg, *msg2; | ||
61 | diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c | ||
62 | index 36f47e8d06a3..bc3984ffe867 100644 | ||
63 | --- a/drivers/char/ipmi/ipmi_si_intf.c | ||
64 | +++ b/drivers/char/ipmi/ipmi_si_intf.c | ||
65 | @@ -3424,7 +3424,7 @@ static inline void wait_for_timer_and_thread(struct smi_info *smi_info) | ||
66 | del_timer_sync(&smi_info->si_timer); | ||
67 | } | ||
68 | |||
69 | -static int is_new_interface(struct smi_info *info) | ||
70 | +static struct smi_info *find_dup_si(struct smi_info *info) | ||
71 | { | ||
72 | struct smi_info *e; | ||
73 | |||
74 | @@ -3439,24 +3439,36 @@ static int is_new_interface(struct smi_info *info) | ||
75 | */ | ||
76 | if (info->slave_addr && !e->slave_addr) | ||
77 | e->slave_addr = info->slave_addr; | ||
78 | - return 0; | ||
79 | + return e; | ||
80 | } | ||
81 | } | ||
82 | |||
83 | - return 1; | ||
84 | + return NULL; | ||
85 | } | ||
86 | |||
87 | static int add_smi(struct smi_info *new_smi) | ||
88 | { | ||
89 | int rv = 0; | ||
90 | + struct smi_info *dup; | ||
91 | |||
92 | mutex_lock(&smi_infos_lock); | ||
93 | - if (!is_new_interface(new_smi)) { | ||
94 | - pr_info(PFX "%s-specified %s state machine: duplicate\n", | ||
95 | - ipmi_addr_src_to_str(new_smi->addr_source), | ||
96 | - si_to_str[new_smi->si_type]); | ||
97 | - rv = -EBUSY; | ||
98 | - goto out_err; | ||
99 | + dup = find_dup_si(new_smi); | ||
100 | + if (dup) { | ||
101 | + if (new_smi->addr_source == SI_ACPI && | ||
102 | + dup->addr_source == SI_SMBIOS) { | ||
103 | + /* We prefer ACPI over SMBIOS. */ | ||
104 | + dev_info(dup->dev, | ||
105 | + "Removing SMBIOS-specified %s state machine in favor of ACPI\n", | ||
106 | + si_to_str[new_smi->si_type]); | ||
107 | + cleanup_one_si(dup); | ||
108 | + } else { | ||
109 | + dev_info(new_smi->dev, | ||
110 | + "%s-specified %s state machine: duplicate\n", | ||
111 | + ipmi_addr_src_to_str(new_smi->addr_source), | ||
112 | + si_to_str[new_smi->si_type]); | ||
113 | + rv = -EBUSY; | ||
114 | + goto out_err; | ||
115 | + } | ||
116 | } | ||
117 | |||
118 | pr_info(PFX "Adding %s-specified %s state machine\n", | ||
119 | @@ -3865,7 +3877,8 @@ static void cleanup_one_si(struct smi_info *to_clean) | ||
120 | poll(to_clean); | ||
121 | schedule_timeout_uninterruptible(1); | ||
122 | } | ||
123 | - disable_si_irq(to_clean, false); | ||
124 | + if (to_clean->handlers) | ||
125 | + disable_si_irq(to_clean, false); | ||
126 | while (to_clean->curr_msg || (to_clean->si_state != SI_NORMAL)) { | ||
127 | poll(to_clean); | ||
128 | schedule_timeout_uninterruptible(1); | ||
129 | diff --git a/drivers/char/tpm/tpm-dev-common.c b/drivers/char/tpm/tpm-dev-common.c | ||
130 | index 610638a80383..461bf0b8a094 100644 | ||
131 | --- a/drivers/char/tpm/tpm-dev-common.c | ||
132 | +++ b/drivers/char/tpm/tpm-dev-common.c | ||
133 | @@ -110,6 +110,12 @@ ssize_t tpm_common_write(struct file *file, const char __user *buf, | ||
134 | return -EFAULT; | ||
135 | } | ||
136 | |||
137 | + if (in_size < 6 || | ||
138 | + in_size < be32_to_cpu(*((__be32 *) (priv->data_buffer + 2)))) { | ||
139 | + mutex_unlock(&priv->buffer_mutex); | ||
140 | + return -EINVAL; | ||
141 | + } | ||
142 | + | ||
143 | /* atomic tpm command send and result receive. We only hold the ops | ||
144 | * lock during this period so that the tpm can be unregistered even if | ||
145 | * the char dev is held open. | ||
146 | diff --git a/drivers/net/ethernet/fealnx.c b/drivers/net/ethernet/fealnx.c | ||
147 | index e92859dab7ae..e191c4ebeaf4 100644 | ||
148 | --- a/drivers/net/ethernet/fealnx.c | ||
149 | +++ b/drivers/net/ethernet/fealnx.c | ||
150 | @@ -257,8 +257,8 @@ enum rx_desc_status_bits { | ||
151 | RXFSD = 0x00000800, /* first descriptor */ | ||
152 | RXLSD = 0x00000400, /* last descriptor */ | ||
153 | ErrorSummary = 0x80, /* error summary */ | ||
154 | - RUNT = 0x40, /* runt packet received */ | ||
155 | - LONG = 0x20, /* long packet received */ | ||
156 | + RUNTPKT = 0x40, /* runt packet received */ | ||
157 | + LONGPKT = 0x20, /* long packet received */ | ||
158 | FAE = 0x10, /* frame align error */ | ||
159 | CRC = 0x08, /* crc error */ | ||
160 | RXER = 0x04, /* receive error */ | ||
161 | @@ -1632,7 +1632,7 @@ static int netdev_rx(struct net_device *dev) | ||
162 | dev->name, rx_status); | ||
163 | |||
164 | dev->stats.rx_errors++; /* end of a packet. */ | ||
165 | - if (rx_status & (LONG | RUNT)) | ||
166 | + if (rx_status & (LONGPKT | RUNTPKT)) | ||
167 | dev->stats.rx_length_errors++; | ||
168 | if (rx_status & RXER) | ||
169 | dev->stats.rx_frame_errors++; | ||
170 | diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c | ||
171 | index 47cab1bde065..9e1b74590682 100644 | ||
172 | --- a/drivers/net/usb/cdc_ncm.c | ||
173 | +++ b/drivers/net/usb/cdc_ncm.c | ||
174 | @@ -771,7 +771,7 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_ | ||
175 | int err; | ||
176 | u8 iface_no; | ||
177 | struct usb_cdc_parsed_header hdr; | ||
178 | - u16 curr_ntb_format; | ||
179 | + __le16 curr_ntb_format; | ||
180 | |||
181 | ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); | ||
182 | if (!ctx) | ||
183 | @@ -889,7 +889,7 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_ | ||
184 | goto error2; | ||
185 | } | ||
186 | |||
187 | - if (curr_ntb_format == USB_CDC_NCM_NTB32_FORMAT) { | ||
188 | + if (curr_ntb_format == cpu_to_le16(USB_CDC_NCM_NTB32_FORMAT)) { | ||
189 | dev_info(&intf->dev, "resetting NTB format to 16-bit"); | ||
190 | err = usbnet_write_cmd(dev, USB_CDC_SET_NTB_FORMAT, | ||
191 | USB_TYPE_CLASS | USB_DIR_OUT | ||
192 | diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c | ||
193 | index d7c49cf1d5e9..a2f4e52fadb5 100644 | ||
194 | --- a/drivers/net/vxlan.c | ||
195 | +++ b/drivers/net/vxlan.c | ||
196 | @@ -1623,26 +1623,19 @@ static struct sk_buff *vxlan_na_create(struct sk_buff *request, | ||
197 | static int neigh_reduce(struct net_device *dev, struct sk_buff *skb, __be32 vni) | ||
198 | { | ||
199 | struct vxlan_dev *vxlan = netdev_priv(dev); | ||
200 | - struct nd_msg *msg; | ||
201 | - const struct ipv6hdr *iphdr; | ||
202 | const struct in6_addr *daddr; | ||
203 | - struct neighbour *n; | ||
204 | + const struct ipv6hdr *iphdr; | ||
205 | struct inet6_dev *in6_dev; | ||
206 | + struct neighbour *n; | ||
207 | + struct nd_msg *msg; | ||
208 | |||
209 | in6_dev = __in6_dev_get(dev); | ||
210 | if (!in6_dev) | ||
211 | goto out; | ||
212 | |||
213 | - if (!pskb_may_pull(skb, sizeof(struct ipv6hdr) + sizeof(struct nd_msg))) | ||
214 | - goto out; | ||
215 | - | ||
216 | iphdr = ipv6_hdr(skb); | ||
217 | daddr = &iphdr->daddr; | ||
218 | - | ||
219 | msg = (struct nd_msg *)(iphdr + 1); | ||
220 | - if (msg->icmph.icmp6_code != 0 || | ||
221 | - msg->icmph.icmp6_type != NDISC_NEIGHBOUR_SOLICITATION) | ||
222 | - goto out; | ||
223 | |||
224 | if (ipv6_addr_loopback(daddr) || | ||
225 | ipv6_addr_is_multicast(&msg->target)) | ||
226 | @@ -2240,11 +2233,11 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, | ||
227 | static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev) | ||
228 | { | ||
229 | struct vxlan_dev *vxlan = netdev_priv(dev); | ||
230 | + struct vxlan_rdst *rdst, *fdst = NULL; | ||
231 | const struct ip_tunnel_info *info; | ||
232 | - struct ethhdr *eth; | ||
233 | bool did_rsc = false; | ||
234 | - struct vxlan_rdst *rdst, *fdst = NULL; | ||
235 | struct vxlan_fdb *f; | ||
236 | + struct ethhdr *eth; | ||
237 | __be32 vni = 0; | ||
238 | |||
239 | info = skb_tunnel_info(skb); | ||
240 | @@ -2269,12 +2262,14 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev) | ||
241 | if (ntohs(eth->h_proto) == ETH_P_ARP) | ||
242 | return arp_reduce(dev, skb, vni); | ||
243 | #if IS_ENABLED(CONFIG_IPV6) | ||
244 | - else if (ntohs(eth->h_proto) == ETH_P_IPV6) { | ||
245 | - struct ipv6hdr *hdr, _hdr; | ||
246 | - if ((hdr = skb_header_pointer(skb, | ||
247 | - skb_network_offset(skb), | ||
248 | - sizeof(_hdr), &_hdr)) && | ||
249 | - hdr->nexthdr == IPPROTO_ICMPV6) | ||
250 | + else if (ntohs(eth->h_proto) == ETH_P_IPV6 && | ||
251 | + pskb_may_pull(skb, sizeof(struct ipv6hdr) + | ||
252 | + sizeof(struct nd_msg)) && | ||
253 | + ipv6_hdr(skb)->nexthdr == IPPROTO_ICMPV6) { | ||
254 | + struct nd_msg *m = (struct nd_msg *)(ipv6_hdr(skb) + 1); | ||
255 | + | ||
256 | + if (m->icmph.icmp6_code == 0 && | ||
257 | + m->icmph.icmp6_type == NDISC_NEIGHBOUR_SOLICITATION) | ||
258 | return neigh_reduce(dev, skb, vni); | ||
259 | } | ||
260 | #endif | ||
261 | diff --git a/drivers/tty/serial/8250/8250_fintek.c b/drivers/tty/serial/8250/8250_fintek.c | ||
262 | index e500f7dd2470..4bd376c08b59 100644 | ||
263 | --- a/drivers/tty/serial/8250/8250_fintek.c | ||
264 | +++ b/drivers/tty/serial/8250/8250_fintek.c | ||
265 | @@ -118,6 +118,9 @@ static int fintek_8250_enter_key(u16 base_port, u8 key) | ||
266 | if (!request_muxed_region(base_port, 2, "8250_fintek")) | ||
267 | return -EBUSY; | ||
268 | |||
269 | + /* Force to deactive all SuperIO in this base_port */ | ||
270 | + outb(EXIT_KEY, base_port + ADDR_PORT); | ||
271 | + | ||
272 | outb(key, base_port + ADDR_PORT); | ||
273 | outb(key, base_port + ADDR_PORT); | ||
274 | return 0; | ||
275 | diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c | ||
276 | index 7754053deeda..26a22b100df1 100644 | ||
277 | --- a/drivers/tty/serial/omap-serial.c | ||
278 | +++ b/drivers/tty/serial/omap-serial.c | ||
279 | @@ -693,7 +693,7 @@ static void serial_omap_set_mctrl(struct uart_port *port, unsigned int mctrl) | ||
280 | if ((mctrl & TIOCM_RTS) && (port->status & UPSTAT_AUTORTS)) | ||
281 | up->efr |= UART_EFR_RTS; | ||
282 | else | ||
283 | - up->efr &= UART_EFR_RTS; | ||
284 | + up->efr &= ~UART_EFR_RTS; | ||
285 | serial_out(up, UART_EFR, up->efr); | ||
286 | serial_out(up, UART_LCR, lcr); | ||
287 | |||
288 | diff --git a/fs/coda/upcall.c b/fs/coda/upcall.c | ||
289 | index a37f003530d7..1175a1722411 100644 | ||
290 | --- a/fs/coda/upcall.c | ||
291 | +++ b/fs/coda/upcall.c | ||
292 | @@ -447,8 +447,7 @@ int venus_fsync(struct super_block *sb, struct CodaFid *fid) | ||
293 | UPARG(CODA_FSYNC); | ||
294 | |||
295 | inp->coda_fsync.VFid = *fid; | ||
296 | - error = coda_upcall(coda_vcp(sb), sizeof(union inputArgs), | ||
297 | - &outsize, inp); | ||
298 | + error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); | ||
299 | |||
300 | CODA_FREE(inp, insize); | ||
301 | return error; | ||
302 | diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c | ||
303 | index 74407c6dd592..ec8f75813beb 100644 | ||
304 | --- a/fs/ocfs2/dlm/dlmrecovery.c | ||
305 | +++ b/fs/ocfs2/dlm/dlmrecovery.c | ||
306 | @@ -2419,6 +2419,7 @@ static void dlm_do_local_recovery_cleanup(struct dlm_ctxt *dlm, u8 dead_node) | ||
307 | dlm_lockres_put(res); | ||
308 | continue; | ||
309 | } | ||
310 | + dlm_move_lockres_to_recovery_list(dlm, res); | ||
311 | } else if (res->owner == dlm->node_num) { | ||
312 | dlm_free_dead_locks(dlm, res, dead_node); | ||
313 | __dlm_lockres_calc_usage(dlm, res); | ||
314 | diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c | ||
315 | index 6e41fc8fabbe..dc455d45a66a 100644 | ||
316 | --- a/fs/ocfs2/file.c | ||
317 | +++ b/fs/ocfs2/file.c | ||
318 | @@ -1161,6 +1161,13 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr) | ||
319 | } | ||
320 | size_change = S_ISREG(inode->i_mode) && attr->ia_valid & ATTR_SIZE; | ||
321 | if (size_change) { | ||
322 | + /* | ||
323 | + * Here we should wait dio to finish before inode lock | ||
324 | + * to avoid a deadlock between ocfs2_setattr() and | ||
325 | + * ocfs2_dio_end_io_write() | ||
326 | + */ | ||
327 | + inode_dio_wait(inode); | ||
328 | + | ||
329 | status = ocfs2_rw_lock(inode, 1); | ||
330 | if (status < 0) { | ||
331 | mlog_errno(status); | ||
332 | @@ -1200,8 +1207,6 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr) | ||
333 | if (status) | ||
334 | goto bail_unlock; | ||
335 | |||
336 | - inode_dio_wait(inode); | ||
337 | - | ||
338 | if (i_size_read(inode) >= attr->ia_size) { | ||
339 | if (ocfs2_should_order_data(inode)) { | ||
340 | status = ocfs2_begin_ordered_truncate(inode, | ||
341 | diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h | ||
342 | index c9c4a81b9767..18b06983131a 100644 | ||
343 | --- a/include/linux/mmzone.h | ||
344 | +++ b/include/linux/mmzone.h | ||
345 | @@ -700,7 +700,8 @@ typedef struct pglist_data { | ||
346 | * is the first PFN that needs to be initialised. | ||
347 | */ | ||
348 | unsigned long first_deferred_pfn; | ||
349 | - unsigned long static_init_size; | ||
350 | + /* Number of non-deferred pages */ | ||
351 | + unsigned long static_init_pgcnt; | ||
352 | #endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */ | ||
353 | |||
354 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | ||
355 | diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h | ||
356 | index e012b9be777e..fed95fa941e6 100644 | ||
357 | --- a/kernel/rcu/tree_plugin.h | ||
358 | +++ b/kernel/rcu/tree_plugin.h | ||
359 | @@ -1507,7 +1507,7 @@ static void rcu_prepare_for_idle(void) | ||
360 | rdtp->last_accelerate = jiffies; | ||
361 | for_each_rcu_flavor(rsp) { | ||
362 | rdp = this_cpu_ptr(rsp->rda); | ||
363 | - if (rcu_segcblist_pend_cbs(&rdp->cblist)) | ||
364 | + if (!rcu_segcblist_pend_cbs(&rdp->cblist)) | ||
365 | continue; | ||
366 | rnp = rdp->mynode; | ||
367 | raw_spin_lock_rcu_node(rnp); /* irqs already disabled. */ | ||
368 | diff --git a/mm/page_alloc.c b/mm/page_alloc.c | ||
369 | index 77e4d3c5c57b..82a6270c9743 100644 | ||
370 | --- a/mm/page_alloc.c | ||
371 | +++ b/mm/page_alloc.c | ||
372 | @@ -290,28 +290,37 @@ EXPORT_SYMBOL(nr_online_nodes); | ||
373 | int page_group_by_mobility_disabled __read_mostly; | ||
374 | |||
375 | #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT | ||
376 | + | ||
377 | +/* | ||
378 | + * Determine how many pages need to be initialized durig early boot | ||
379 | + * (non-deferred initialization). | ||
380 | + * The value of first_deferred_pfn will be set later, once non-deferred pages | ||
381 | + * are initialized, but for now set it ULONG_MAX. | ||
382 | + */ | ||
383 | static inline void reset_deferred_meminit(pg_data_t *pgdat) | ||
384 | { | ||
385 | - unsigned long max_initialise; | ||
386 | - unsigned long reserved_lowmem; | ||
387 | + phys_addr_t start_addr, end_addr; | ||
388 | + unsigned long max_pgcnt; | ||
389 | + unsigned long reserved; | ||
390 | |||
391 | /* | ||
392 | * Initialise at least 2G of a node but also take into account that | ||
393 | * two large system hashes that can take up 1GB for 0.25TB/node. | ||
394 | */ | ||
395 | - max_initialise = max(2UL << (30 - PAGE_SHIFT), | ||
396 | - (pgdat->node_spanned_pages >> 8)); | ||
397 | + max_pgcnt = max(2UL << (30 - PAGE_SHIFT), | ||
398 | + (pgdat->node_spanned_pages >> 8)); | ||
399 | |||
400 | /* | ||
401 | * Compensate the all the memblock reservations (e.g. crash kernel) | ||
402 | * from the initial estimation to make sure we will initialize enough | ||
403 | * memory to boot. | ||
404 | */ | ||
405 | - reserved_lowmem = memblock_reserved_memory_within(pgdat->node_start_pfn, | ||
406 | - pgdat->node_start_pfn + max_initialise); | ||
407 | - max_initialise += reserved_lowmem; | ||
408 | + start_addr = PFN_PHYS(pgdat->node_start_pfn); | ||
409 | + end_addr = PFN_PHYS(pgdat->node_start_pfn + max_pgcnt); | ||
410 | + reserved = memblock_reserved_memory_within(start_addr, end_addr); | ||
411 | + max_pgcnt += PHYS_PFN(reserved); | ||
412 | |||
413 | - pgdat->static_init_size = min(max_initialise, pgdat->node_spanned_pages); | ||
414 | + pgdat->static_init_pgcnt = min(max_pgcnt, pgdat->node_spanned_pages); | ||
415 | pgdat->first_deferred_pfn = ULONG_MAX; | ||
416 | } | ||
417 | |||
418 | @@ -338,7 +347,7 @@ static inline bool update_defer_init(pg_data_t *pgdat, | ||
419 | if (zone_end < pgdat_end_pfn(pgdat)) | ||
420 | return true; | ||
421 | (*nr_initialised)++; | ||
422 | - if ((*nr_initialised > pgdat->static_init_size) && | ||
423 | + if ((*nr_initialised > pgdat->static_init_pgcnt) && | ||
424 | (pfn & (PAGES_PER_SECTION - 1)) == 0) { | ||
425 | pgdat->first_deferred_pfn = pfn; | ||
426 | return false; | ||
427 | diff --git a/mm/page_ext.c b/mm/page_ext.c | ||
428 | index 4f0367d472c4..2c16216c29b6 100644 | ||
429 | --- a/mm/page_ext.c | ||
430 | +++ b/mm/page_ext.c | ||
431 | @@ -125,7 +125,6 @@ struct page_ext *lookup_page_ext(struct page *page) | ||
432 | struct page_ext *base; | ||
433 | |||
434 | base = NODE_DATA(page_to_nid(page))->node_page_ext; | ||
435 | -#if defined(CONFIG_DEBUG_VM) | ||
436 | /* | ||
437 | * The sanity checks the page allocator does upon freeing a | ||
438 | * page can reach here before the page_ext arrays are | ||
439 | @@ -134,7 +133,6 @@ struct page_ext *lookup_page_ext(struct page *page) | ||
440 | */ | ||
441 | if (unlikely(!base)) | ||
442 | return NULL; | ||
443 | -#endif | ||
444 | index = pfn - round_down(node_start_pfn(page_to_nid(page)), | ||
445 | MAX_ORDER_NR_PAGES); | ||
446 | return get_entry(base, index); | ||
447 | @@ -199,7 +197,6 @@ struct page_ext *lookup_page_ext(struct page *page) | ||
448 | { | ||
449 | unsigned long pfn = page_to_pfn(page); | ||
450 | struct mem_section *section = __pfn_to_section(pfn); | ||
451 | -#if defined(CONFIG_DEBUG_VM) | ||
452 | /* | ||
453 | * The sanity checks the page allocator does upon freeing a | ||
454 | * page can reach here before the page_ext arrays are | ||
455 | @@ -208,7 +205,6 @@ struct page_ext *lookup_page_ext(struct page *page) | ||
456 | */ | ||
457 | if (!section->page_ext) | ||
458 | return NULL; | ||
459 | -#endif | ||
460 | return get_entry(section->page_ext, pfn); | ||
461 | } | ||
462 | |||
463 | diff --git a/mm/pagewalk.c b/mm/pagewalk.c | ||
464 | index 8bd4afa83cb8..23a3e415ac2c 100644 | ||
465 | --- a/mm/pagewalk.c | ||
466 | +++ b/mm/pagewalk.c | ||
467 | @@ -188,8 +188,12 @@ static int walk_hugetlb_range(unsigned long addr, unsigned long end, | ||
468 | do { | ||
469 | next = hugetlb_entry_end(h, addr, end); | ||
470 | pte = huge_pte_offset(walk->mm, addr & hmask, sz); | ||
471 | - if (pte && walk->hugetlb_entry) | ||
472 | + | ||
473 | + if (pte) | ||
474 | err = walk->hugetlb_entry(pte, hmask, addr, next, walk); | ||
475 | + else if (walk->pte_hole) | ||
476 | + err = walk->pte_hole(addr, next, walk); | ||
477 | + | ||
478 | if (err) | ||
479 | break; | ||
480 | } while (addr = next, addr != end); | ||
481 | diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c | ||
482 | index b93148e8e9fb..15c99dfa3d72 100644 | ||
483 | --- a/net/netlink/af_netlink.c | ||
484 | +++ b/net/netlink/af_netlink.c | ||
485 | @@ -2136,7 +2136,7 @@ static int netlink_dump(struct sock *sk) | ||
486 | struct sk_buff *skb = NULL; | ||
487 | struct nlmsghdr *nlh; | ||
488 | struct module *module; | ||
489 | - int len, err = -ENOBUFS; | ||
490 | + int err = -ENOBUFS; | ||
491 | int alloc_min_size; | ||
492 | int alloc_size; | ||
493 | |||
494 | @@ -2183,9 +2183,11 @@ static int netlink_dump(struct sock *sk) | ||
495 | skb_reserve(skb, skb_tailroom(skb) - alloc_size); | ||
496 | netlink_skb_set_owner_r(skb, sk); | ||
497 | |||
498 | - len = cb->dump(skb, cb); | ||
499 | + if (nlk->dump_done_errno > 0) | ||
500 | + nlk->dump_done_errno = cb->dump(skb, cb); | ||
501 | |||
502 | - if (len > 0) { | ||
503 | + if (nlk->dump_done_errno > 0 || | ||
504 | + skb_tailroom(skb) < nlmsg_total_size(sizeof(nlk->dump_done_errno))) { | ||
505 | mutex_unlock(nlk->cb_mutex); | ||
506 | |||
507 | if (sk_filter(sk, skb)) | ||
508 | @@ -2195,13 +2197,15 @@ static int netlink_dump(struct sock *sk) | ||
509 | return 0; | ||
510 | } | ||
511 | |||
512 | - nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE, sizeof(len), NLM_F_MULTI); | ||
513 | - if (!nlh) | ||
514 | + nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE, | ||
515 | + sizeof(nlk->dump_done_errno), NLM_F_MULTI); | ||
516 | + if (WARN_ON(!nlh)) | ||
517 | goto errout_skb; | ||
518 | |||
519 | nl_dump_check_consistent(cb, nlh); | ||
520 | |||
521 | - memcpy(nlmsg_data(nlh), &len, sizeof(len)); | ||
522 | + memcpy(nlmsg_data(nlh), &nlk->dump_done_errno, | ||
523 | + sizeof(nlk->dump_done_errno)); | ||
524 | |||
525 | if (sk_filter(sk, skb)) | ||
526 | kfree_skb(skb); | ||
527 | @@ -2273,6 +2277,7 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb, | ||
528 | } | ||
529 | |||
530 | nlk->cb_running = true; | ||
531 | + nlk->dump_done_errno = INT_MAX; | ||
532 | |||
533 | mutex_unlock(nlk->cb_mutex); | ||
534 | |||
535 | diff --git a/net/netlink/af_netlink.h b/net/netlink/af_netlink.h | ||
536 | index 028188597eaa..962de7b3c023 100644 | ||
537 | --- a/net/netlink/af_netlink.h | ||
538 | +++ b/net/netlink/af_netlink.h | ||
539 | @@ -34,6 +34,7 @@ struct netlink_sock { | ||
540 | wait_queue_head_t wait; | ||
541 | bool bound; | ||
542 | bool cb_running; | ||
543 | + int dump_done_errno; | ||
544 | struct netlink_callback cb; | ||
545 | struct mutex *cb_mutex; | ||
546 | struct mutex cb_def_mutex; | ||
547 | diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c | ||
548 | index a6dfa86c0201..3b18085e3b10 100644 | ||
549 | --- a/net/sctp/ipv6.c | ||
550 | +++ b/net/sctp/ipv6.c | ||
551 | @@ -807,9 +807,10 @@ static void sctp_inet6_skb_msgname(struct sk_buff *skb, char *msgname, | ||
552 | addr->v6.sin6_flowinfo = 0; | ||
553 | addr->v6.sin6_port = sh->source; | ||
554 | addr->v6.sin6_addr = ipv6_hdr(skb)->saddr; | ||
555 | - if (ipv6_addr_type(&addr->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL) { | ||
556 | + if (ipv6_addr_type(&addr->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL) | ||
557 | addr->v6.sin6_scope_id = sctp_v6_skb_iif(skb); | ||
558 | - } | ||
559 | + else | ||
560 | + addr->v6.sin6_scope_id = 0; | ||
561 | } | ||
562 | |||
563 | *addr_len = sctp_v6_addr_to_user(sctp_sk(skb->sk), addr); | ||
564 | diff --git a/security/integrity/ima/ima_appraise.c b/security/integrity/ima/ima_appraise.c | ||
565 | index 809ba70fbbbf..7d769b948de8 100644 | ||
566 | --- a/security/integrity/ima/ima_appraise.c | ||
567 | +++ b/security/integrity/ima/ima_appraise.c | ||
568 | @@ -320,6 +320,9 @@ void ima_update_xattr(struct integrity_iint_cache *iint, struct file *file) | ||
569 | if (iint->flags & IMA_DIGSIG) | ||
570 | return; | ||
571 | |||
572 | + if (iint->ima_file_status != INTEGRITY_PASS) | ||
573 | + return; | ||
574 | + | ||
575 | rc = ima_collect_measurement(iint, file, NULL, 0, ima_hash_algo); | ||
576 | if (rc < 0) | ||
577 | return; |