Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.5/0104-4.5.5-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2789 - (hide annotations) (download)
Mon May 23 14:57:37 2016 UTC (8 years ago) by niro
File size: 161366 byte(s)
-linux-4.5.5
1 niro 2789 diff --git a/Makefile b/Makefile
2     index d64eade37241..a23df411d393 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 5
8     -SUBLEVEL = 4
9     +SUBLEVEL = 5
10     EXTRAVERSION =
11     NAME = Blurry Fish Butt
12    
13     diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi
14     index 0827d594b1f0..cd0cd5fd09a3 100644
15     --- a/arch/arm/boot/dts/at91sam9x5.dtsi
16     +++ b/arch/arm/boot/dts/at91sam9x5.dtsi
17     @@ -106,7 +106,7 @@
18    
19     pmc: pmc@fffffc00 {
20     compatible = "atmel,at91sam9x5-pmc", "syscon";
21     - reg = <0xfffffc00 0x100>;
22     + reg = <0xfffffc00 0x200>;
23     interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
24     interrupt-controller;
25     #address-cells = <1>;
26     diff --git a/crypto/ahash.c b/crypto/ahash.c
27     index d19b52324cf5..dac1c24e9c3e 100644
28     --- a/crypto/ahash.c
29     +++ b/crypto/ahash.c
30     @@ -69,8 +69,9 @@ static int hash_walk_new_entry(struct crypto_hash_walk *walk)
31     struct scatterlist *sg;
32    
33     sg = walk->sg;
34     - walk->pg = sg_page(sg);
35     walk->offset = sg->offset;
36     + walk->pg = sg_page(walk->sg) + (walk->offset >> PAGE_SHIFT);
37     + walk->offset = offset_in_page(walk->offset);
38     walk->entrylen = sg->length;
39    
40     if (walk->entrylen > walk->total)
41     diff --git a/crypto/testmgr.c b/crypto/testmgr.c
42     index ae8c57fd8bc7..d4944318ca1f 100644
43     --- a/crypto/testmgr.c
44     +++ b/crypto/testmgr.c
45     @@ -1849,6 +1849,7 @@ static int alg_test_drbg(const struct alg_test_desc *desc, const char *driver,
46     static int do_test_rsa(struct crypto_akcipher *tfm,
47     struct akcipher_testvec *vecs)
48     {
49     + char *xbuf[XBUFSIZE];
50     struct akcipher_request *req;
51     void *outbuf_enc = NULL;
52     void *outbuf_dec = NULL;
53     @@ -1857,9 +1858,12 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
54     int err = -ENOMEM;
55     struct scatterlist src, dst, src_tab[2];
56    
57     + if (testmgr_alloc_buf(xbuf))
58     + return err;
59     +
60     req = akcipher_request_alloc(tfm, GFP_KERNEL);
61     if (!req)
62     - return err;
63     + goto free_xbuf;
64    
65     init_completion(&result.completion);
66    
67     @@ -1877,9 +1881,14 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
68     if (!outbuf_enc)
69     goto free_req;
70    
71     + if (WARN_ON(vecs->m_size > PAGE_SIZE))
72     + goto free_all;
73     +
74     + memcpy(xbuf[0], vecs->m, vecs->m_size);
75     +
76     sg_init_table(src_tab, 2);
77     - sg_set_buf(&src_tab[0], vecs->m, 8);
78     - sg_set_buf(&src_tab[1], vecs->m + 8, vecs->m_size - 8);
79     + sg_set_buf(&src_tab[0], xbuf[0], 8);
80     + sg_set_buf(&src_tab[1], xbuf[0] + 8, vecs->m_size - 8);
81     sg_init_one(&dst, outbuf_enc, out_len_max);
82     akcipher_request_set_crypt(req, src_tab, &dst, vecs->m_size,
83     out_len_max);
84     @@ -1898,7 +1907,7 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
85     goto free_all;
86     }
87     /* verify that encrypted message is equal to expected */
88     - if (memcmp(vecs->c, sg_virt(req->dst), vecs->c_size)) {
89     + if (memcmp(vecs->c, outbuf_enc, vecs->c_size)) {
90     pr_err("alg: rsa: encrypt test failed. Invalid output\n");
91     err = -EINVAL;
92     goto free_all;
93     @@ -1913,7 +1922,13 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
94     err = -ENOMEM;
95     goto free_all;
96     }
97     - sg_init_one(&src, vecs->c, vecs->c_size);
98     +
99     + if (WARN_ON(vecs->c_size > PAGE_SIZE))
100     + goto free_all;
101     +
102     + memcpy(xbuf[0], vecs->c, vecs->c_size);
103     +
104     + sg_init_one(&src, xbuf[0], vecs->c_size);
105     sg_init_one(&dst, outbuf_dec, out_len_max);
106     init_completion(&result.completion);
107     akcipher_request_set_crypt(req, &src, &dst, vecs->c_size, out_len_max);
108     @@ -1940,6 +1955,8 @@ free_all:
109     kfree(outbuf_enc);
110     free_req:
111     akcipher_request_free(req);
112     +free_xbuf:
113     + testmgr_free_buf(xbuf);
114     return err;
115     }
116    
117     diff --git a/drivers/base/regmap/regmap-spmi.c b/drivers/base/regmap/regmap-spmi.c
118     index 7e58f6560399..4a36e415e938 100644
119     --- a/drivers/base/regmap/regmap-spmi.c
120     +++ b/drivers/base/regmap/regmap-spmi.c
121     @@ -142,7 +142,7 @@ static int regmap_spmi_ext_read(void *context,
122     while (val_size) {
123     len = min_t(size_t, val_size, 8);
124    
125     - err = spmi_ext_register_readl(context, addr, val, val_size);
126     + err = spmi_ext_register_readl(context, addr, val, len);
127     if (err)
128     goto err_out;
129    
130     diff --git a/drivers/crypto/qat/qat_common/adf_common_drv.h b/drivers/crypto/qat/qat_common/adf_common_drv.h
131     index 0e82ce3c383e..976b01e58afb 100644
132     --- a/drivers/crypto/qat/qat_common/adf_common_drv.h
133     +++ b/drivers/crypto/qat/qat_common/adf_common_drv.h
134     @@ -236,6 +236,8 @@ void adf_enable_vf2pf_interrupts(struct adf_accel_dev *accel_dev,
135     uint32_t vf_mask);
136     void adf_enable_pf2vf_interrupts(struct adf_accel_dev *accel_dev);
137     void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev);
138     +int adf_init_pf_wq(void);
139     +void adf_exit_pf_wq(void);
140     #else
141     static inline int adf_sriov_configure(struct pci_dev *pdev, int numvfs)
142     {
143     @@ -253,5 +255,14 @@ static inline void adf_enable_pf2vf_interrupts(struct adf_accel_dev *accel_dev)
144     static inline void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev)
145     {
146     }
147     +
148     +static inline int adf_init_pf_wq(void)
149     +{
150     + return 0;
151     +}
152     +
153     +static inline void adf_exit_pf_wq(void)
154     +{
155     +}
156     #endif
157     #endif
158     diff --git a/drivers/crypto/qat/qat_common/adf_ctl_drv.c b/drivers/crypto/qat/qat_common/adf_ctl_drv.c
159     index 5c897e6e7994..3c3f948290ca 100644
160     --- a/drivers/crypto/qat/qat_common/adf_ctl_drv.c
161     +++ b/drivers/crypto/qat/qat_common/adf_ctl_drv.c
162     @@ -462,12 +462,17 @@ static int __init adf_register_ctl_device_driver(void)
163     if (adf_init_aer())
164     goto err_aer;
165    
166     + if (adf_init_pf_wq())
167     + goto err_pf_wq;
168     +
169     if (qat_crypto_register())
170     goto err_crypto_register;
171    
172     return 0;
173    
174     err_crypto_register:
175     + adf_exit_pf_wq();
176     +err_pf_wq:
177     adf_exit_aer();
178     err_aer:
179     adf_chr_drv_destroy();
180     @@ -480,6 +485,7 @@ static void __exit adf_unregister_ctl_device_driver(void)
181     {
182     adf_chr_drv_destroy();
183     adf_exit_aer();
184     + adf_exit_pf_wq();
185     qat_crypto_unregister();
186     adf_clean_vf_map(false);
187     mutex_destroy(&adf_ctl_lock);
188     diff --git a/drivers/crypto/qat/qat_common/adf_sriov.c b/drivers/crypto/qat/qat_common/adf_sriov.c
189     index 1117a8b58280..38a0415e767d 100644
190     --- a/drivers/crypto/qat/qat_common/adf_sriov.c
191     +++ b/drivers/crypto/qat/qat_common/adf_sriov.c
192     @@ -119,11 +119,6 @@ static int adf_enable_sriov(struct adf_accel_dev *accel_dev)
193     int i;
194     u32 reg;
195    
196     - /* Workqueue for PF2VF responses */
197     - pf2vf_resp_wq = create_workqueue("qat_pf2vf_resp_wq");
198     - if (!pf2vf_resp_wq)
199     - return -ENOMEM;
200     -
201     for (i = 0, vf_info = accel_dev->pf.vf_info; i < totalvfs;
202     i++, vf_info++) {
203     /* This ptr will be populated when VFs will be created */
204     @@ -216,11 +211,6 @@ void adf_disable_sriov(struct adf_accel_dev *accel_dev)
205    
206     kfree(accel_dev->pf.vf_info);
207     accel_dev->pf.vf_info = NULL;
208     -
209     - if (pf2vf_resp_wq) {
210     - destroy_workqueue(pf2vf_resp_wq);
211     - pf2vf_resp_wq = NULL;
212     - }
213     }
214     EXPORT_SYMBOL_GPL(adf_disable_sriov);
215    
216     @@ -304,3 +294,19 @@ int adf_sriov_configure(struct pci_dev *pdev, int numvfs)
217     return numvfs;
218     }
219     EXPORT_SYMBOL_GPL(adf_sriov_configure);
220     +
221     +int __init adf_init_pf_wq(void)
222     +{
223     + /* Workqueue for PF2VF responses */
224     + pf2vf_resp_wq = create_workqueue("qat_pf2vf_resp_wq");
225     +
226     + return !pf2vf_resp_wq ? -ENOMEM : 0;
227     +}
228     +
229     +void adf_exit_pf_wq(void)
230     +{
231     + if (pf2vf_resp_wq) {
232     + destroy_workqueue(pf2vf_resp_wq);
233     + pf2vf_resp_wq = NULL;
234     + }
235     +}
236     diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_dp.c b/drivers/gpu/drm/amd/amdgpu/atombios_dp.c
237     index bf731e9f643e..7f85c2c1d681 100644
238     --- a/drivers/gpu/drm/amd/amdgpu/atombios_dp.c
239     +++ b/drivers/gpu/drm/amd/amdgpu/atombios_dp.c
240     @@ -276,8 +276,8 @@ static int amdgpu_atombios_dp_get_dp_link_config(struct drm_connector *connector
241     }
242     }
243     } else {
244     - for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) {
245     - for (i = 0; i < ARRAY_SIZE(link_rates) && link_rates[i] <= max_link_rate; i++) {
246     + for (i = 0; i < ARRAY_SIZE(link_rates) && link_rates[i] <= max_link_rate; i++) {
247     + for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) {
248     max_pix_clock = (lane_num * link_rates[i] * 8) / bpp;
249     if (max_pix_clock >= pix_clock) {
250     *dp_lanes = lane_num;
251     diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
252     index cf39ed3133d6..4d0bc2a8843c 100644
253     --- a/drivers/gpu/drm/i915/i915_debugfs.c
254     +++ b/drivers/gpu/drm/i915/i915_debugfs.c
255     @@ -2860,20 +2860,6 @@ static void intel_dp_info(struct seq_file *m,
256     intel_panel_info(m, &intel_connector->panel);
257     }
258    
259     -static void intel_dp_mst_info(struct seq_file *m,
260     - struct intel_connector *intel_connector)
261     -{
262     - struct intel_encoder *intel_encoder = intel_connector->encoder;
263     - struct intel_dp_mst_encoder *intel_mst =
264     - enc_to_mst(&intel_encoder->base);
265     - struct intel_digital_port *intel_dig_port = intel_mst->primary;
266     - struct intel_dp *intel_dp = &intel_dig_port->dp;
267     - bool has_audio = drm_dp_mst_port_has_audio(&intel_dp->mst_mgr,
268     - intel_connector->port);
269     -
270     - seq_printf(m, "\taudio support: %s\n", yesno(has_audio));
271     -}
272     -
273     static void intel_hdmi_info(struct seq_file *m,
274     struct intel_connector *intel_connector)
275     {
276     @@ -2917,8 +2903,6 @@ static void intel_connector_info(struct seq_file *m,
277     intel_hdmi_info(m, intel_connector);
278     else if (intel_encoder->type == INTEL_OUTPUT_LVDS)
279     intel_lvds_info(m, intel_connector);
280     - else if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
281     - intel_dp_mst_info(m, intel_connector);
282     }
283    
284     seq_printf(m, "\tmodes:\n");
285     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
286     index 9b6737c85acb..5672b57e65d5 100644
287     --- a/drivers/gpu/drm/i915/i915_reg.h
288     +++ b/drivers/gpu/drm/i915/i915_reg.h
289     @@ -7412,6 +7412,8 @@ enum skl_disp_power_wells {
290     #define TRANS_CLK_SEL_DISABLED (0x0<<29)
291     #define TRANS_CLK_SEL_PORT(x) (((x)+1)<<29)
292    
293     +#define CDCLK_FREQ _MMIO(0x46200)
294     +
295     #define _TRANSA_MSA_MISC 0x60410
296     #define _TRANSB_MSA_MISC 0x61410
297     #define _TRANSC_MSA_MISC 0x62410
298     diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
299     index 30f921421b0c..7d281b40064a 100644
300     --- a/drivers/gpu/drm/i915/intel_audio.c
301     +++ b/drivers/gpu/drm/i915/intel_audio.c
302     @@ -262,8 +262,7 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder)
303     tmp |= AUD_CONFIG_N_PROG_ENABLE;
304     tmp &= ~AUD_CONFIG_UPPER_N_MASK;
305     tmp &= ~AUD_CONFIG_LOWER_N_MASK;
306     - if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
307     - intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
308     + if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
309     tmp |= AUD_CONFIG_N_VALUE_INDEX;
310     I915_WRITE(HSW_AUD_CFG(pipe), tmp);
311    
312     @@ -476,8 +475,7 @@ static void ilk_audio_codec_enable(struct drm_connector *connector,
313     tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
314     tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
315     tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
316     - if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT) ||
317     - intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DP_MST))
318     + if (intel_pipe_has_type(intel_crtc, INTEL_OUTPUT_DISPLAYPORT))
319     tmp |= AUD_CONFIG_N_VALUE_INDEX;
320     else
321     tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
322     @@ -515,8 +513,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
323    
324     /* ELD Conn_Type */
325     connector->eld[5] &= ~(3 << 2);
326     - if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||
327     - intel_pipe_has_type(crtc, INTEL_OUTPUT_DP_MST))
328     + if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT))
329     connector->eld[5] |= (1 << 2);
330    
331     connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;
332     diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
333     index a7b4a524fadd..dbacc2901d47 100644
334     --- a/drivers/gpu/drm/i915/intel_crt.c
335     +++ b/drivers/gpu/drm/i915/intel_crt.c
336     @@ -255,8 +255,14 @@ static bool intel_crt_compute_config(struct intel_encoder *encoder,
337     pipe_config->has_pch_encoder = true;
338    
339     /* LPT FDI RX only supports 8bpc. */
340     - if (HAS_PCH_LPT(dev))
341     + if (HAS_PCH_LPT(dev)) {
342     + if (pipe_config->bw_constrained && pipe_config->pipe_bpp < 24) {
343     + DRM_DEBUG_KMS("LPT only supports 24bpp\n");
344     + return false;
345     + }
346     +
347     pipe_config->pipe_bpp = 24;
348     + }
349    
350     /* FDI must always be 2.7 GHz */
351     if (HAS_DDI(dev)) {
352     diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
353     index 33b8e0a2b3fd..40511493914c 100644
354     --- a/drivers/gpu/drm/i915/intel_ddi.c
355     +++ b/drivers/gpu/drm/i915/intel_ddi.c
356     @@ -3165,23 +3165,6 @@ void intel_ddi_fdi_disable(struct drm_crtc *crtc)
357     I915_WRITE(FDI_RX_CTL(PIPE_A), val);
358     }
359    
360     -bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
361     - struct intel_crtc *intel_crtc)
362     -{
363     - u32 temp;
364     -
365     - if (intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_AUDIO)) {
366     - temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
367     -
368     - intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO);
369     -
370     - if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
371     - return true;
372     - }
373     -
374     - return false;
375     -}
376     -
377     void intel_ddi_get_config(struct intel_encoder *encoder,
378     struct intel_crtc_state *pipe_config)
379     {
380     @@ -3242,8 +3225,11 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
381     break;
382     }
383    
384     - pipe_config->has_audio =
385     - intel_ddi_is_audio_enabled(dev_priv, intel_crtc);
386     + if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) {
387     + temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
388     + if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
389     + pipe_config->has_audio = true;
390     + }
391    
392     if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp_bpp &&
393     pipe_config->pipe_bpp > dev_priv->vbt.edp_bpp) {
394     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
395     index c023a04c44d0..39b00b9daf2d 100644
396     --- a/drivers/gpu/drm/i915/intel_display.c
397     +++ b/drivers/gpu/drm/i915/intel_display.c
398     @@ -9793,6 +9793,8 @@ static void broadwell_set_cdclk(struct drm_device *dev, int cdclk)
399     sandybridge_pcode_write(dev_priv, HSW_PCODE_DE_WRITE_FREQ_REQ, data);
400     mutex_unlock(&dev_priv->rps.hw_lock);
401    
402     + I915_WRITE(CDCLK_FREQ, DIV_ROUND_CLOSEST(cdclk, 1000) - 1);
403     +
404     intel_update_cdclk(dev);
405    
406     WARN(cdclk != dev_priv->cdclk_freq,
407     diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
408     index db6361b5a6ab..e8e6984b8053 100644
409     --- a/drivers/gpu/drm/i915/intel_dp_mst.c
410     +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
411     @@ -78,8 +78,6 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
412     return false;
413     }
414    
415     - if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, found->port))
416     - pipe_config->has_audio = true;
417     mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
418    
419     pipe_config->pbn = mst_pbn;
420     @@ -104,11 +102,6 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder)
421     struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
422     struct intel_digital_port *intel_dig_port = intel_mst->primary;
423     struct intel_dp *intel_dp = &intel_dig_port->dp;
424     - struct drm_device *dev = encoder->base.dev;
425     - struct drm_i915_private *dev_priv = dev->dev_private;
426     - struct drm_crtc *crtc = encoder->base.crtc;
427     - struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
428     -
429     int ret;
430    
431     DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
432     @@ -119,10 +112,6 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder)
433     if (ret) {
434     DRM_ERROR("failed to update payload %d\n", ret);
435     }
436     - if (intel_crtc->config->has_audio) {
437     - intel_audio_codec_disable(encoder);
438     - intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO);
439     - }
440     }
441    
442     static void intel_mst_post_disable_dp(struct intel_encoder *encoder)
443     @@ -219,7 +208,6 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder)
444     struct intel_dp *intel_dp = &intel_dig_port->dp;
445     struct drm_device *dev = intel_dig_port->base.base.dev;
446     struct drm_i915_private *dev_priv = dev->dev_private;
447     - struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
448     enum port port = intel_dig_port->port;
449     int ret;
450    
451     @@ -232,13 +220,6 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder)
452     ret = drm_dp_check_act_status(&intel_dp->mst_mgr);
453    
454     ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr);
455     -
456     - if (crtc->config->has_audio) {
457     - DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
458     - pipe_name(crtc->pipe));
459     - intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO);
460     - intel_audio_codec_enable(encoder);
461     - }
462     }
463    
464     static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder *encoder,
465     @@ -264,9 +245,6 @@ static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder,
466    
467     pipe_config->has_dp_encoder = true;
468    
469     - pipe_config->has_audio =
470     - intel_ddi_is_audio_enabled(dev_priv, crtc);
471     -
472     temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
473     if (temp & TRANS_DDI_PHSYNC)
474     flags |= DRM_MODE_FLAG_PHSYNC;
475     diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
476     index 3ce3bee368fe..1ae61f488987 100644
477     --- a/drivers/gpu/drm/i915/intel_drv.h
478     +++ b/drivers/gpu/drm/i915/intel_drv.h
479     @@ -1013,8 +1013,6 @@ void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
480     void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);
481     bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
482     void intel_ddi_fdi_disable(struct drm_crtc *crtc);
483     -bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
484     - struct intel_crtc *intel_crtc);
485     void intel_ddi_get_config(struct intel_encoder *encoder,
486     struct intel_crtc_state *pipe_config);
487     struct intel_encoder *
488     diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
489     index 7e4a9842b9ea..0eae3994e5e3 100644
490     --- a/drivers/gpu/drm/i915/intel_pm.c
491     +++ b/drivers/gpu/drm/i915/intel_pm.c
492     @@ -6565,6 +6565,12 @@ static void broadwell_init_clock_gating(struct drm_device *dev)
493     misccpctl = I915_READ(GEN7_MISCCPCTL);
494     I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
495     I915_WRITE(GEN8_L3SQCREG1, BDW_WA_L3SQCREG1_DEFAULT);
496     + /*
497     + * Wait at least 100 clocks before re-enabling clock gating. See
498     + * the definition of L3SQCREG1 in BSpec.
499     + */
500     + POSTING_READ(GEN8_L3SQCREG1);
501     + udelay(1);
502     I915_WRITE(GEN7_MISCCPCTL, misccpctl);
503    
504     /*
505     diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
506     index 801dd60ac192..7f52142d37d5 100644
507     --- a/drivers/gpu/drm/radeon/atombios_crtc.c
508     +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
509     @@ -1740,6 +1740,7 @@ static u32 radeon_get_pll_use_mask(struct drm_crtc *crtc)
510     static int radeon_get_shared_dp_ppll(struct drm_crtc *crtc)
511     {
512     struct drm_device *dev = crtc->dev;
513     + struct radeon_device *rdev = dev->dev_private;
514     struct drm_crtc *test_crtc;
515     struct radeon_crtc *test_radeon_crtc;
516    
517     @@ -1749,6 +1750,10 @@ static int radeon_get_shared_dp_ppll(struct drm_crtc *crtc)
518     test_radeon_crtc = to_radeon_crtc(test_crtc);
519     if (test_radeon_crtc->encoder &&
520     ENCODER_MODE_IS_DP(atombios_get_encoder_mode(test_radeon_crtc->encoder))) {
521     + /* PPLL2 is exclusive to UNIPHYA on DCE61 */
522     + if (ASIC_IS_DCE61(rdev) && !ASIC_IS_DCE8(rdev) &&
523     + test_radeon_crtc->pll_id == ATOM_PPLL2)
524     + continue;
525     /* for DP use the same PLL for all */
526     if (test_radeon_crtc->pll_id != ATOM_PPLL_INVALID)
527     return test_radeon_crtc->pll_id;
528     @@ -1770,6 +1775,7 @@ static int radeon_get_shared_nondp_ppll(struct drm_crtc *crtc)
529     {
530     struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
531     struct drm_device *dev = crtc->dev;
532     + struct radeon_device *rdev = dev->dev_private;
533     struct drm_crtc *test_crtc;
534     struct radeon_crtc *test_radeon_crtc;
535     u32 adjusted_clock, test_adjusted_clock;
536     @@ -1785,6 +1791,10 @@ static int radeon_get_shared_nondp_ppll(struct drm_crtc *crtc)
537     test_radeon_crtc = to_radeon_crtc(test_crtc);
538     if (test_radeon_crtc->encoder &&
539     !ENCODER_MODE_IS_DP(atombios_get_encoder_mode(test_radeon_crtc->encoder))) {
540     + /* PPLL2 is exclusive to UNIPHYA on DCE61 */
541     + if (ASIC_IS_DCE61(rdev) && !ASIC_IS_DCE8(rdev) &&
542     + test_radeon_crtc->pll_id == ATOM_PPLL2)
543     + continue;
544     /* check if we are already driving this connector with another crtc */
545     if (test_radeon_crtc->connector == radeon_crtc->connector) {
546     /* if we are, return that pll */
547     diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
548     index 6af832545bc5..b5760851195c 100644
549     --- a/drivers/gpu/drm/radeon/atombios_dp.c
550     +++ b/drivers/gpu/drm/radeon/atombios_dp.c
551     @@ -326,8 +326,8 @@ int radeon_dp_get_dp_link_config(struct drm_connector *connector,
552     }
553     }
554     } else {
555     - for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) {
556     - for (i = 0; i < ARRAY_SIZE(link_rates) && link_rates[i] <= max_link_rate; i++) {
557     + for (i = 0; i < ARRAY_SIZE(link_rates) && link_rates[i] <= max_link_rate; i++) {
558     + for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) {
559     max_pix_clock = (lane_num * link_rates[i] * 8) / bpp;
560     if (max_pix_clock >= pix_clock) {
561     *dp_lanes = lane_num;
562     diff --git a/drivers/gpu/drm/radeon/radeon_dp_auxch.c b/drivers/gpu/drm/radeon/radeon_dp_auxch.c
563     index 3b0c229d7dcd..db64e0062689 100644
564     --- a/drivers/gpu/drm/radeon/radeon_dp_auxch.c
565     +++ b/drivers/gpu/drm/radeon/radeon_dp_auxch.c
566     @@ -105,7 +105,7 @@ radeon_dp_aux_transfer_native(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg
567    
568     tmp &= AUX_HPD_SEL(0x7);
569     tmp |= AUX_HPD_SEL(chan->rec.hpd);
570     - tmp |= AUX_EN | AUX_LS_READ_EN;
571     + tmp |= AUX_EN | AUX_LS_READ_EN | AUX_HPD_DISCON(0x1);
572    
573     WREG32(AUX_CONTROL + aux_offset[instance], tmp);
574    
575     diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
576     index ed9cefa1f6f1..eaed31d04468 100644
577     --- a/drivers/infiniband/hw/mlx5/main.c
578     +++ b/drivers/infiniband/hw/mlx5/main.c
579     @@ -654,8 +654,8 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port,
580     struct mlx5_ib_dev *dev = to_mdev(ibdev);
581     struct mlx5_core_dev *mdev = dev->mdev;
582     struct mlx5_hca_vport_context *rep;
583     - int max_mtu;
584     - int oper_mtu;
585     + u16 max_mtu;
586     + u16 oper_mtu;
587     int err;
588     u8 ib_link_width_oper;
589     u8 vl_hw_cap;
590     diff --git a/drivers/input/misc/max8997_haptic.c b/drivers/input/misc/max8997_haptic.c
591     index a806ba3818f7..8d6326d7e7be 100644
592     --- a/drivers/input/misc/max8997_haptic.c
593     +++ b/drivers/input/misc/max8997_haptic.c
594     @@ -255,12 +255,14 @@ static int max8997_haptic_probe(struct platform_device *pdev)
595     struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent);
596     const struct max8997_platform_data *pdata =
597     dev_get_platdata(iodev->dev);
598     - const struct max8997_haptic_platform_data *haptic_pdata =
599     - pdata->haptic_pdata;
600     + const struct max8997_haptic_platform_data *haptic_pdata = NULL;
601     struct max8997_haptic *chip;
602     struct input_dev *input_dev;
603     int error;
604    
605     + if (pdata)
606     + haptic_pdata = pdata->haptic_pdata;
607     +
608     if (!haptic_pdata) {
609     dev_err(&pdev->dev, "no haptic platform data\n");
610     return -EINVAL;
611     diff --git a/drivers/media/v4l2-core/videobuf2-v4l2.c b/drivers/media/v4l2-core/videobuf2-v4l2.c
612     index 7f366f1b0377..0b1b8c7b6ce5 100644
613     --- a/drivers/media/v4l2-core/videobuf2-v4l2.c
614     +++ b/drivers/media/v4l2-core/videobuf2-v4l2.c
615     @@ -74,11 +74,6 @@ static int __verify_planes_array(struct vb2_buffer *vb, const struct v4l2_buffer
616     return 0;
617     }
618    
619     -static int __verify_planes_array_core(struct vb2_buffer *vb, const void *pb)
620     -{
621     - return __verify_planes_array(vb, pb);
622     -}
623     -
624     /**
625     * __verify_length() - Verify that the bytesused value for each plane fits in
626     * the plane length and that the data offset doesn't exceed the bytesused value.
627     @@ -442,7 +437,6 @@ static int __fill_vb2_buffer(struct vb2_buffer *vb,
628     }
629    
630     static const struct vb2_buf_ops v4l2_buf_ops = {
631     - .verify_planes_array = __verify_planes_array_core,
632     .fill_user_buffer = __fill_v4l2_buffer,
633     .fill_vb2_buffer = __fill_vb2_buffer,
634     .copy_timestamp = __copy_timestamp,
635     diff --git a/drivers/net/ethernet/atheros/atlx/atl2.c b/drivers/net/ethernet/atheros/atlx/atl2.c
636     index 8f76f4558a88..2ff465848b65 100644
637     --- a/drivers/net/ethernet/atheros/atlx/atl2.c
638     +++ b/drivers/net/ethernet/atheros/atlx/atl2.c
639     @@ -1412,7 +1412,7 @@ static int atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
640    
641     err = -EIO;
642    
643     - netdev->hw_features = NETIF_F_SG | NETIF_F_HW_VLAN_CTAG_RX;
644     + netdev->hw_features = NETIF_F_HW_VLAN_CTAG_RX;
645     netdev->features |= (NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX);
646    
647     /* Init PHY as early as possible due to power saving issue */
648     diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
649     index 767347b1f631..f50bdbfaae7c 100644
650     --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
651     +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
652     @@ -519,6 +519,7 @@ static void nicvf_rcv_queue_config(struct nicvf *nic, struct queue_set *qs,
653     nicvf_config_vlan_stripping(nic, nic->netdev->features);
654    
655     /* Enable Receive queue */
656     + memset(&rq_cfg, 0, sizeof(struct rq_cfg));
657     rq_cfg.ena = 1;
658     rq_cfg.tcp_ena = 0;
659     nicvf_queue_reg_write(nic, NIC_QSET_RQ_0_7_CFG, qidx, *(u64 *)&rq_cfg);
660     @@ -551,6 +552,7 @@ void nicvf_cmp_queue_config(struct nicvf *nic, struct queue_set *qs,
661     qidx, (u64)(cq->dmem.phys_base));
662    
663     /* Enable Completion queue */
664     + memset(&cq_cfg, 0, sizeof(struct cq_cfg));
665     cq_cfg.ena = 1;
666     cq_cfg.reset = 0;
667     cq_cfg.caching = 0;
668     @@ -599,6 +601,7 @@ static void nicvf_snd_queue_config(struct nicvf *nic, struct queue_set *qs,
669     qidx, (u64)(sq->dmem.phys_base));
670    
671     /* Enable send queue & set queue size */
672     + memset(&sq_cfg, 0, sizeof(struct sq_cfg));
673     sq_cfg.ena = 1;
674     sq_cfg.reset = 0;
675     sq_cfg.ldwb = 0;
676     @@ -635,6 +638,7 @@ static void nicvf_rbdr_config(struct nicvf *nic, struct queue_set *qs,
677    
678     /* Enable RBDR & set queue size */
679     /* Buffer size should be in multiples of 128 bytes */
680     + memset(&rbdr_cfg, 0, sizeof(struct rbdr_cfg));
681     rbdr_cfg.ena = 1;
682     rbdr_cfg.reset = 0;
683     rbdr_cfg.ldwb = 0;
684     diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
685     index 41c81f6ec630..0d6e8c177650 100644
686     --- a/drivers/net/ethernet/freescale/fec_main.c
687     +++ b/drivers/net/ethernet/freescale/fec_main.c
688     @@ -1566,9 +1566,15 @@ fec_enet_rx(struct net_device *ndev, int budget)
689     struct fec_enet_private *fep = netdev_priv(ndev);
690    
691     for_each_set_bit(queue_id, &fep->work_rx, FEC_ENET_MAX_RX_QS) {
692     - clear_bit(queue_id, &fep->work_rx);
693     - pkt_received += fec_enet_rx_queue(ndev,
694     + int ret;
695     +
696     + ret = fec_enet_rx_queue(ndev,
697     budget - pkt_received, queue_id);
698     +
699     + if (ret < budget - pkt_received)
700     + clear_bit(queue_id, &fep->work_rx);
701     +
702     + pkt_received += ret;
703     }
704     return pkt_received;
705     }
706     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
707     index 41440b2b20a3..03ef9aca21e4 100644
708     --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
709     +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
710     @@ -704,7 +704,7 @@ static int get_fixed_ipv6_csum(__wsum hw_checksum, struct sk_buff *skb,
711    
712     if (ipv6h->nexthdr == IPPROTO_FRAGMENT || ipv6h->nexthdr == IPPROTO_HOPOPTS)
713     return -1;
714     - hw_checksum = csum_add(hw_checksum, (__force __wsum)(ipv6h->nexthdr << 8));
715     + hw_checksum = csum_add(hw_checksum, (__force __wsum)htons(ipv6h->nexthdr));
716    
717     csum_pseudo_hdr = csum_partial(&ipv6h->saddr,
718     sizeof(ipv6h->saddr) + sizeof(ipv6h->daddr), 0);
719     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
720     index e0946ab22010..0debb611da8b 100644
721     --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
722     +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
723     @@ -402,7 +402,6 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
724     u32 packets = 0;
725     u32 bytes = 0;
726     int factor = priv->cqe_factor;
727     - u64 timestamp = 0;
728     int done = 0;
729     int budget = priv->tx_work_limit;
730     u32 last_nr_txbb;
731     @@ -442,9 +441,12 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
732     new_index = be16_to_cpu(cqe->wqe_index) & size_mask;
733    
734     do {
735     + u64 timestamp = 0;
736     +
737     txbbs_skipped += last_nr_txbb;
738     ring_index = (ring_index + last_nr_txbb) & size_mask;
739     - if (ring->tx_info[ring_index].ts_requested)
740     +
741     + if (unlikely(ring->tx_info[ring_index].ts_requested))
742     timestamp = mlx4_en_get_cqe_ts(cqe);
743    
744     /* free next descriptor */
745     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
746     index 402994bf7e16..e293a2ec2775 100644
747     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
748     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
749     @@ -1389,24 +1389,50 @@ static int mlx5e_refresh_tirs_self_loopback_enable(struct mlx5e_priv *priv)
750     return 0;
751     }
752    
753     -static int mlx5e_set_dev_port_mtu(struct net_device *netdev)
754     +static int mlx5e_set_mtu(struct mlx5e_priv *priv, u16 mtu)
755     {
756     - struct mlx5e_priv *priv = netdev_priv(netdev);
757     struct mlx5_core_dev *mdev = priv->mdev;
758     - int hw_mtu;
759     + u16 hw_mtu = MLX5E_SW2HW_MTU(mtu);
760     int err;
761    
762     - err = mlx5_set_port_mtu(mdev, MLX5E_SW2HW_MTU(netdev->mtu), 1);
763     + err = mlx5_set_port_mtu(mdev, hw_mtu, 1);
764     if (err)
765     return err;
766    
767     - mlx5_query_port_oper_mtu(mdev, &hw_mtu, 1);
768     + /* Update vport context MTU */
769     + mlx5_modify_nic_vport_mtu(mdev, hw_mtu);
770     + return 0;
771     +}
772     +
773     +static void mlx5e_query_mtu(struct mlx5e_priv *priv, u16 *mtu)
774     +{
775     + struct mlx5_core_dev *mdev = priv->mdev;
776     + u16 hw_mtu = 0;
777     + int err;
778     +
779     + err = mlx5_query_nic_vport_mtu(mdev, &hw_mtu);
780     + if (err || !hw_mtu) /* fallback to port oper mtu */
781     + mlx5_query_port_oper_mtu(mdev, &hw_mtu, 1);
782     +
783     + *mtu = MLX5E_HW2SW_MTU(hw_mtu);
784     +}
785     +
786     +static int mlx5e_set_dev_port_mtu(struct net_device *netdev)
787     +{
788     + struct mlx5e_priv *priv = netdev_priv(netdev);
789     + u16 mtu;
790     + int err;
791    
792     - if (MLX5E_HW2SW_MTU(hw_mtu) != netdev->mtu)
793     - netdev_warn(netdev, "%s: Port MTU %d is different than netdev mtu %d\n",
794     - __func__, MLX5E_HW2SW_MTU(hw_mtu), netdev->mtu);
795     + err = mlx5e_set_mtu(priv, netdev->mtu);
796     + if (err)
797     + return err;
798    
799     - netdev->mtu = MLX5E_HW2SW_MTU(hw_mtu);
800     + mlx5e_query_mtu(priv, &mtu);
801     + if (mtu != netdev->mtu)
802     + netdev_warn(netdev, "%s: VPort MTU %d is different than netdev mtu %d\n",
803     + __func__, mtu, netdev->mtu);
804     +
805     + netdev->mtu = mtu;
806     return 0;
807     }
808    
809     @@ -1906,22 +1932,27 @@ static int mlx5e_set_features(struct net_device *netdev,
810     return err;
811     }
812    
813     +#define MXL5_HW_MIN_MTU 64
814     +#define MXL5E_MIN_MTU (MXL5_HW_MIN_MTU + ETH_FCS_LEN)
815     +
816     static int mlx5e_change_mtu(struct net_device *netdev, int new_mtu)
817     {
818     struct mlx5e_priv *priv = netdev_priv(netdev);
819     struct mlx5_core_dev *mdev = priv->mdev;
820     bool was_opened;
821     - int max_mtu;
822     + u16 max_mtu;
823     + u16 min_mtu;
824     int err = 0;
825    
826     mlx5_query_port_max_mtu(mdev, &max_mtu, 1);
827    
828     max_mtu = MLX5E_HW2SW_MTU(max_mtu);
829     + min_mtu = MLX5E_HW2SW_MTU(MXL5E_MIN_MTU);
830    
831     - if (new_mtu > max_mtu) {
832     + if (new_mtu > max_mtu || new_mtu < min_mtu) {
833     netdev_err(netdev,
834     - "%s: Bad MTU (%d) > (%d) Max\n",
835     - __func__, new_mtu, max_mtu);
836     + "%s: Bad MTU (%d), valid range is: [%d..%d]\n",
837     + __func__, new_mtu, min_mtu, max_mtu);
838     return -EINVAL;
839     }
840    
841     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
842     index 6f68dba8d7ed..cc901852f1a9 100644
843     --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
844     +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
845     @@ -957,33 +957,6 @@ unlock_fg:
846     return rule;
847     }
848    
849     -static struct mlx5_flow_rule *add_rule_to_auto_fg(struct mlx5_flow_table *ft,
850     - u8 match_criteria_enable,
851     - u32 *match_criteria,
852     - u32 *match_value,
853     - u8 action,
854     - u32 flow_tag,
855     - struct mlx5_flow_destination *dest)
856     -{
857     - struct mlx5_flow_rule *rule;
858     - struct mlx5_flow_group *g;
859     -
860     - g = create_autogroup(ft, match_criteria_enable, match_criteria);
861     - if (IS_ERR(g))
862     - return (void *)g;
863     -
864     - rule = add_rule_fg(g, match_value,
865     - action, flow_tag, dest);
866     - if (IS_ERR(rule)) {
867     - /* Remove assumes refcount > 0 and autogroup creates a group
868     - * with a refcount = 0.
869     - */
870     - tree_get_node(&g->node);
871     - tree_remove_node(&g->node);
872     - }
873     - return rule;
874     -}
875     -
876     struct mlx5_flow_rule *
877     mlx5_add_flow_rule(struct mlx5_flow_table *ft,
878     u8 match_criteria_enable,
879     @@ -1008,8 +981,23 @@ mlx5_add_flow_rule(struct mlx5_flow_table *ft,
880     goto unlock;
881     }
882    
883     - rule = add_rule_to_auto_fg(ft, match_criteria_enable, match_criteria,
884     - match_value, action, flow_tag, dest);
885     + g = create_autogroup(ft, match_criteria_enable, match_criteria);
886     + if (IS_ERR(g)) {
887     + rule = (void *)g;
888     + goto unlock;
889     + }
890     +
891     + rule = add_rule_fg(g, match_value,
892     + action, flow_tag, dest);
893     + if (IS_ERR(rule)) {
894     + /* Remove assumes refcount > 0 and autogroup creates a group
895     + * with a refcount = 0.
896     + */
897     + unlock_ref_node(&ft->node);
898     + tree_get_node(&g->node);
899     + tree_remove_node(&g->node);
900     + return rule;
901     + }
902     unlock:
903     unlock_ref_node(&ft->node);
904     return rule;
905     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/port.c b/drivers/net/ethernet/mellanox/mlx5/core/port.c
906     index a87e773e93f3..53a793bc2e3d 100644
907     --- a/drivers/net/ethernet/mellanox/mlx5/core/port.c
908     +++ b/drivers/net/ethernet/mellanox/mlx5/core/port.c
909     @@ -246,8 +246,8 @@ int mlx5_query_port_admin_status(struct mlx5_core_dev *dev,
910     }
911     EXPORT_SYMBOL_GPL(mlx5_query_port_admin_status);
912    
913     -static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, int *admin_mtu,
914     - int *max_mtu, int *oper_mtu, u8 port)
915     +static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, u16 *admin_mtu,
916     + u16 *max_mtu, u16 *oper_mtu, u8 port)
917     {
918     u32 in[MLX5_ST_SZ_DW(pmtu_reg)];
919     u32 out[MLX5_ST_SZ_DW(pmtu_reg)];
920     @@ -267,7 +267,7 @@ static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, int *admin_mtu,
921     *admin_mtu = MLX5_GET(pmtu_reg, out, admin_mtu);
922     }
923    
924     -int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port)
925     +int mlx5_set_port_mtu(struct mlx5_core_dev *dev, u16 mtu, u8 port)
926     {
927     u32 in[MLX5_ST_SZ_DW(pmtu_reg)];
928     u32 out[MLX5_ST_SZ_DW(pmtu_reg)];
929     @@ -282,14 +282,14 @@ int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port)
930     }
931     EXPORT_SYMBOL_GPL(mlx5_set_port_mtu);
932    
933     -void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, int *max_mtu,
934     +void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, u16 *max_mtu,
935     u8 port)
936     {
937     mlx5_query_port_mtu(dev, NULL, max_mtu, NULL, port);
938     }
939     EXPORT_SYMBOL_GPL(mlx5_query_port_max_mtu);
940    
941     -void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, int *oper_mtu,
942     +void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, u16 *oper_mtu,
943     u8 port)
944     {
945     mlx5_query_port_mtu(dev, NULL, NULL, oper_mtu, port);
946     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/vport.c b/drivers/net/ethernet/mellanox/mlx5/core/vport.c
947     index c7398b95aecd..6d5f56e73b5d 100644
948     --- a/drivers/net/ethernet/mellanox/mlx5/core/vport.c
949     +++ b/drivers/net/ethernet/mellanox/mlx5/core/vport.c
950     @@ -196,6 +196,46 @@ int mlx5_modify_nic_vport_mac_address(struct mlx5_core_dev *mdev,
951     }
952     EXPORT_SYMBOL_GPL(mlx5_modify_nic_vport_mac_address);
953    
954     +int mlx5_query_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 *mtu)
955     +{
956     + int outlen = MLX5_ST_SZ_BYTES(query_nic_vport_context_out);
957     + u32 *out;
958     + int err;
959     +
960     + out = mlx5_vzalloc(outlen);
961     + if (!out)
962     + return -ENOMEM;
963     +
964     + err = mlx5_query_nic_vport_context(mdev, 0, out, outlen);
965     + if (!err)
966     + *mtu = MLX5_GET(query_nic_vport_context_out, out,
967     + nic_vport_context.mtu);
968     +
969     + kvfree(out);
970     + return err;
971     +}
972     +EXPORT_SYMBOL_GPL(mlx5_query_nic_vport_mtu);
973     +
974     +int mlx5_modify_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 mtu)
975     +{
976     + int inlen = MLX5_ST_SZ_BYTES(modify_nic_vport_context_in);
977     + void *in;
978     + int err;
979     +
980     + in = mlx5_vzalloc(inlen);
981     + if (!in)
982     + return -ENOMEM;
983     +
984     + MLX5_SET(modify_nic_vport_context_in, in, field_select.mtu, 1);
985     + MLX5_SET(modify_nic_vport_context_in, in, nic_vport_context.mtu, mtu);
986     +
987     + err = mlx5_modify_nic_vport_context(mdev, in, inlen);
988     +
989     + kvfree(in);
990     + return err;
991     +}
992     +EXPORT_SYMBOL_GPL(mlx5_modify_nic_vport_mtu);
993     +
994     int mlx5_query_nic_vport_mac_list(struct mlx5_core_dev *dev,
995     u32 vport,
996     enum mlx5_list_type list_type,
997     diff --git a/drivers/net/usb/cdc_mbim.c b/drivers/net/usb/cdc_mbim.c
998     index bdd83d95ec0a..96a5028621c8 100644
999     --- a/drivers/net/usb/cdc_mbim.c
1000     +++ b/drivers/net/usb/cdc_mbim.c
1001     @@ -617,8 +617,13 @@ static const struct usb_device_id mbim_devs[] = {
1002     { USB_VENDOR_AND_INTERFACE_INFO(0x0bdb, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
1003     .driver_info = (unsigned long)&cdc_mbim_info,
1004     },
1005     - /* Huawei E3372 fails unless NDP comes after the IP packets */
1006     - { USB_DEVICE_AND_INTERFACE_INFO(0x12d1, 0x157d, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
1007     +
1008     + /* Some Huawei devices, ME906s-158 (12d1:15c1) and E3372
1009     + * (12d1:157d), are known to fail unless the NDP is placed
1010     + * after the IP packets. Applying the quirk to all Huawei
1011     + * devices is broader than necessary, but harmless.
1012     + */
1013     + { USB_VENDOR_AND_INTERFACE_INFO(0x12d1, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
1014     .driver_info = (unsigned long)&cdc_mbim_info_ndp_to_end,
1015     },
1016     /* default entry */
1017     diff --git a/drivers/pinctrl/pinctrl-at91-pio4.c b/drivers/pinctrl/pinctrl-at91-pio4.c
1018     index ee69db6ae1c7..e1c0d4e1bb33 100644
1019     --- a/drivers/pinctrl/pinctrl-at91-pio4.c
1020     +++ b/drivers/pinctrl/pinctrl-at91-pio4.c
1021     @@ -722,9 +722,11 @@ static int atmel_conf_pin_config_group_set(struct pinctrl_dev *pctldev,
1022     break;
1023     case PIN_CONFIG_BIAS_PULL_UP:
1024     conf |= ATMEL_PIO_PUEN_MASK;
1025     + conf &= (~ATMEL_PIO_PDEN_MASK);
1026     break;
1027     case PIN_CONFIG_BIAS_PULL_DOWN:
1028     conf |= ATMEL_PIO_PDEN_MASK;
1029     + conf &= (~ATMEL_PIO_PUEN_MASK);
1030     break;
1031     case PIN_CONFIG_DRIVE_OPEN_DRAIN:
1032     if (arg == 0)
1033     diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
1034     index f2e1a39ce0f3..5cf4a97e0304 100644
1035     --- a/drivers/regulator/axp20x-regulator.c
1036     +++ b/drivers/regulator/axp20x-regulator.c
1037     @@ -221,10 +221,10 @@ static const struct regulator_desc axp22x_regulators[] = {
1038     AXP22X_ELDO2_V_OUT, 0x1f, AXP22X_PWR_OUT_CTRL2, BIT(1)),
1039     AXP_DESC(AXP22X, ELDO3, "eldo3", "eldoin", 700, 3300, 100,
1040     AXP22X_ELDO3_V_OUT, 0x1f, AXP22X_PWR_OUT_CTRL2, BIT(2)),
1041     - AXP_DESC_IO(AXP22X, LDO_IO0, "ldo_io0", "ips", 1800, 3300, 100,
1042     + AXP_DESC_IO(AXP22X, LDO_IO0, "ldo_io0", "ips", 700, 3300, 100,
1043     AXP22X_LDO_IO0_V_OUT, 0x1f, AXP20X_GPIO0_CTRL, 0x07,
1044     AXP22X_IO_ENABLED, AXP22X_IO_DISABLED),
1045     - AXP_DESC_IO(AXP22X, LDO_IO1, "ldo_io1", "ips", 1800, 3300, 100,
1046     + AXP_DESC_IO(AXP22X, LDO_IO1, "ldo_io1", "ips", 700, 3300, 100,
1047     AXP22X_LDO_IO1_V_OUT, 0x1f, AXP20X_GPIO1_CTRL, 0x07,
1048     AXP22X_IO_ENABLED, AXP22X_IO_DISABLED),
1049     AXP_DESC_FIXED(AXP22X, RTC_LDO, "rtc_ldo", "ips", 3000),
1050     diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
1051     index 3242ffc0cb25..09dce49609c1 100644
1052     --- a/drivers/regulator/s2mps11.c
1053     +++ b/drivers/regulator/s2mps11.c
1054     @@ -306,7 +306,7 @@ static struct regulator_ops s2mps11_buck_ops = {
1055     .enable_mask = S2MPS11_ENABLE_MASK \
1056     }
1057    
1058     -#define regulator_desc_s2mps11_buck6_10(num, min, step) { \
1059     +#define regulator_desc_s2mps11_buck67810(num, min, step) { \
1060     .name = "BUCK"#num, \
1061     .id = S2MPS11_BUCK##num, \
1062     .ops = &s2mps11_buck_ops, \
1063     @@ -322,6 +322,22 @@ static struct regulator_ops s2mps11_buck_ops = {
1064     .enable_mask = S2MPS11_ENABLE_MASK \
1065     }
1066    
1067     +#define regulator_desc_s2mps11_buck9 { \
1068     + .name = "BUCK9", \
1069     + .id = S2MPS11_BUCK9, \
1070     + .ops = &s2mps11_buck_ops, \
1071     + .type = REGULATOR_VOLTAGE, \
1072     + .owner = THIS_MODULE, \
1073     + .min_uV = MIN_3000_MV, \
1074     + .uV_step = STEP_25_MV, \
1075     + .n_voltages = S2MPS11_BUCK9_N_VOLTAGES, \
1076     + .ramp_delay = S2MPS11_RAMP_DELAY, \
1077     + .vsel_reg = S2MPS11_REG_B9CTRL2, \
1078     + .vsel_mask = S2MPS11_BUCK9_VSEL_MASK, \
1079     + .enable_reg = S2MPS11_REG_B9CTRL1, \
1080     + .enable_mask = S2MPS11_ENABLE_MASK \
1081     +}
1082     +
1083     static const struct regulator_desc s2mps11_regulators[] = {
1084     regulator_desc_s2mps11_ldo(1, STEP_25_MV),
1085     regulator_desc_s2mps11_ldo(2, STEP_50_MV),
1086     @@ -366,11 +382,11 @@ static const struct regulator_desc s2mps11_regulators[] = {
1087     regulator_desc_s2mps11_buck1_4(3),
1088     regulator_desc_s2mps11_buck1_4(4),
1089     regulator_desc_s2mps11_buck5,
1090     - regulator_desc_s2mps11_buck6_10(6, MIN_600_MV, STEP_6_25_MV),
1091     - regulator_desc_s2mps11_buck6_10(7, MIN_600_MV, STEP_6_25_MV),
1092     - regulator_desc_s2mps11_buck6_10(8, MIN_600_MV, STEP_6_25_MV),
1093     - regulator_desc_s2mps11_buck6_10(9, MIN_3000_MV, STEP_25_MV),
1094     - regulator_desc_s2mps11_buck6_10(10, MIN_750_MV, STEP_12_5_MV),
1095     + regulator_desc_s2mps11_buck67810(6, MIN_600_MV, STEP_6_25_MV),
1096     + regulator_desc_s2mps11_buck67810(7, MIN_600_MV, STEP_6_25_MV),
1097     + regulator_desc_s2mps11_buck67810(8, MIN_600_MV, STEP_6_25_MV),
1098     + regulator_desc_s2mps11_buck9,
1099     + regulator_desc_s2mps11_buck67810(10, MIN_750_MV, STEP_12_5_MV),
1100     };
1101    
1102     static struct regulator_ops s2mps14_reg_ops;
1103     diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
1104     index 5d0ec42a9317..634254a52301 100644
1105     --- a/drivers/scsi/qla1280.c
1106     +++ b/drivers/scsi/qla1280.c
1107     @@ -4214,7 +4214,7 @@ static struct scsi_host_template qla1280_driver_template = {
1108     .eh_bus_reset_handler = qla1280_eh_bus_reset,
1109     .eh_host_reset_handler = qla1280_eh_adapter_reset,
1110     .bios_param = qla1280_biosparam,
1111     - .can_queue = 0xfffff,
1112     + .can_queue = MAX_OUTSTANDING_COMMANDS,
1113     .this_id = -1,
1114     .sg_tablesize = SG_ALL,
1115     .use_clustering = ENABLE_CLUSTERING,
1116     diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
1117     index ab9914ad8365..64232ecbb821 100644
1118     --- a/drivers/spi/spi-pxa2xx.c
1119     +++ b/drivers/spi/spi-pxa2xx.c
1120     @@ -111,7 +111,7 @@ static const struct lpss_config lpss_platforms[] = {
1121     .reg_general = -1,
1122     .reg_ssp = 0x20,
1123     .reg_cs_ctrl = 0x24,
1124     - .reg_capabilities = 0xfc,
1125     + .reg_capabilities = -1,
1126     .rx_threshold = 1,
1127     .tx_threshold_lo = 32,
1128     .tx_threshold_hi = 56,
1129     diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
1130     index 64318fcfacf2..5044c6198332 100644
1131     --- a/drivers/spi/spi-ti-qspi.c
1132     +++ b/drivers/spi/spi-ti-qspi.c
1133     @@ -94,6 +94,7 @@ struct ti_qspi {
1134     #define QSPI_FLEN(n) ((n - 1) << 0)
1135     #define QSPI_WLEN_MAX_BITS 128
1136     #define QSPI_WLEN_MAX_BYTES 16
1137     +#define QSPI_WLEN_MASK QSPI_WLEN(QSPI_WLEN_MAX_BITS)
1138    
1139     /* STATUS REGISTER */
1140     #define BUSY 0x01
1141     @@ -224,16 +225,16 @@ static inline int ti_qspi_poll_wc(struct ti_qspi *qspi)
1142     return -ETIMEDOUT;
1143     }
1144    
1145     -static int qspi_write_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1146     +static int qspi_write_msg(struct ti_qspi *qspi, struct spi_transfer *t,
1147     + int count)
1148     {
1149     - int wlen, count, xfer_len;
1150     + int wlen, xfer_len;
1151     unsigned int cmd;
1152     const u8 *txbuf;
1153     u32 data;
1154    
1155     txbuf = t->tx_buf;
1156     cmd = qspi->cmd | QSPI_WR_SNGL;
1157     - count = t->len;
1158     wlen = t->bits_per_word >> 3; /* in bytes */
1159     xfer_len = wlen;
1160    
1161     @@ -293,9 +294,10 @@ static int qspi_write_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1162     return 0;
1163     }
1164    
1165     -static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1166     +static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t,
1167     + int count)
1168     {
1169     - int wlen, count;
1170     + int wlen;
1171     unsigned int cmd;
1172     u8 *rxbuf;
1173    
1174     @@ -312,7 +314,6 @@ static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1175     cmd |= QSPI_RD_SNGL;
1176     break;
1177     }
1178     - count = t->len;
1179     wlen = t->bits_per_word >> 3; /* in bytes */
1180    
1181     while (count) {
1182     @@ -343,12 +344,13 @@ static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1183     return 0;
1184     }
1185    
1186     -static int qspi_transfer_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1187     +static int qspi_transfer_msg(struct ti_qspi *qspi, struct spi_transfer *t,
1188     + int count)
1189     {
1190     int ret;
1191    
1192     if (t->tx_buf) {
1193     - ret = qspi_write_msg(qspi, t);
1194     + ret = qspi_write_msg(qspi, t, count);
1195     if (ret) {
1196     dev_dbg(qspi->dev, "Error while writing\n");
1197     return ret;
1198     @@ -356,7 +358,7 @@ static int qspi_transfer_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1199     }
1200    
1201     if (t->rx_buf) {
1202     - ret = qspi_read_msg(qspi, t);
1203     + ret = qspi_read_msg(qspi, t, count);
1204     if (ret) {
1205     dev_dbg(qspi->dev, "Error while reading\n");
1206     return ret;
1207     @@ -373,7 +375,8 @@ static int ti_qspi_start_transfer_one(struct spi_master *master,
1208     struct spi_device *spi = m->spi;
1209     struct spi_transfer *t;
1210     int status = 0, ret;
1211     - int frame_length;
1212     + unsigned int frame_len_words, transfer_len_words;
1213     + int wlen;
1214    
1215     /* setup device control reg */
1216     qspi->dc = 0;
1217     @@ -385,30 +388,38 @@ static int ti_qspi_start_transfer_one(struct spi_master *master,
1218     if (spi->mode & SPI_CS_HIGH)
1219     qspi->dc |= QSPI_CSPOL(spi->chip_select);
1220    
1221     - frame_length = (m->frame_length << 3) / spi->bits_per_word;
1222     -
1223     - frame_length = clamp(frame_length, 0, QSPI_FRAME);
1224     + frame_len_words = 0;
1225     + list_for_each_entry(t, &m->transfers, transfer_list)
1226     + frame_len_words += t->len / (t->bits_per_word >> 3);
1227     + frame_len_words = min_t(unsigned int, frame_len_words, QSPI_FRAME);
1228    
1229     /* setup command reg */
1230     qspi->cmd = 0;
1231     qspi->cmd |= QSPI_EN_CS(spi->chip_select);
1232     - qspi->cmd |= QSPI_FLEN(frame_length);
1233     + qspi->cmd |= QSPI_FLEN(frame_len_words);
1234    
1235     ti_qspi_write(qspi, qspi->dc, QSPI_SPI_DC_REG);
1236    
1237     mutex_lock(&qspi->list_lock);
1238    
1239     list_for_each_entry(t, &m->transfers, transfer_list) {
1240     - qspi->cmd |= QSPI_WLEN(t->bits_per_word);
1241     + qspi->cmd = ((qspi->cmd & ~QSPI_WLEN_MASK) |
1242     + QSPI_WLEN(t->bits_per_word));
1243     +
1244     + wlen = t->bits_per_word >> 3;
1245     + transfer_len_words = min(t->len / wlen, frame_len_words);
1246    
1247     - ret = qspi_transfer_msg(qspi, t);
1248     + ret = qspi_transfer_msg(qspi, t, transfer_len_words * wlen);
1249     if (ret) {
1250     dev_dbg(qspi->dev, "transfer message failed\n");
1251     mutex_unlock(&qspi->list_lock);
1252     return -EINVAL;
1253     }
1254    
1255     - m->actual_length += t->len;
1256     + m->actual_length += transfer_len_words * wlen;
1257     + frame_len_words -= transfer_len_words;
1258     + if (frame_len_words == 0)
1259     + break;
1260     }
1261    
1262     mutex_unlock(&qspi->list_lock);
1263     diff --git a/drivers/staging/wilc1000/wilc_spi.c b/drivers/staging/wilc1000/wilc_spi.c
1264     index 86de50c9f7f5..b3d6541b3896 100644
1265     --- a/drivers/staging/wilc1000/wilc_spi.c
1266     +++ b/drivers/staging/wilc1000/wilc_spi.c
1267     @@ -120,8 +120,6 @@ static u8 crc7(u8 crc, const u8 *buffer, u32 len)
1268    
1269     #define USE_SPI_DMA 0
1270    
1271     -static const struct wilc1000_ops wilc1000_spi_ops;
1272     -
1273     static int wilc_bus_probe(struct spi_device *spi)
1274     {
1275     int ret, gpio;
1276     diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
1277     index 769e0ff1b4ce..dea6486a7508 100644
1278     --- a/fs/btrfs/ctree.c
1279     +++ b/fs/btrfs/ctree.c
1280     @@ -19,6 +19,7 @@
1281     #include <linux/sched.h>
1282     #include <linux/slab.h>
1283     #include <linux/rbtree.h>
1284     +#include <linux/vmalloc.h>
1285     #include "ctree.h"
1286     #include "disk-io.h"
1287     #include "transaction.h"
1288     @@ -5361,10 +5362,13 @@ int btrfs_compare_trees(struct btrfs_root *left_root,
1289     goto out;
1290     }
1291    
1292     - tmp_buf = kmalloc(left_root->nodesize, GFP_NOFS);
1293     + tmp_buf = kmalloc(left_root->nodesize, GFP_KERNEL | __GFP_NOWARN);
1294     if (!tmp_buf) {
1295     - ret = -ENOMEM;
1296     - goto out;
1297     + tmp_buf = vmalloc(left_root->nodesize);
1298     + if (!tmp_buf) {
1299     + ret = -ENOMEM;
1300     + goto out;
1301     + }
1302     }
1303    
1304     left_path->search_commit_root = 1;
1305     @@ -5565,7 +5569,7 @@ int btrfs_compare_trees(struct btrfs_root *left_root,
1306     out:
1307     btrfs_free_path(left_path);
1308     btrfs_free_path(right_path);
1309     - kfree(tmp_buf);
1310     + kvfree(tmp_buf);
1311     return ret;
1312     }
1313    
1314     diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
1315     index bfe4a337fb4d..6661ad8b4088 100644
1316     --- a/fs/btrfs/ctree.h
1317     +++ b/fs/btrfs/ctree.h
1318     @@ -2252,7 +2252,7 @@ struct btrfs_ioctl_defrag_range_args {
1319     #define BTRFS_MOUNT_FREE_SPACE_TREE (1 << 26)
1320    
1321     #define BTRFS_DEFAULT_COMMIT_INTERVAL (30)
1322     -#define BTRFS_DEFAULT_MAX_INLINE (8192)
1323     +#define BTRFS_DEFAULT_MAX_INLINE (2048)
1324    
1325     #define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt)
1326     #define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt)
1327     diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
1328     index cbb7dbfb3fff..218f51a5dbab 100644
1329     --- a/fs/btrfs/dev-replace.c
1330     +++ b/fs/btrfs/dev-replace.c
1331     @@ -394,6 +394,8 @@ int btrfs_dev_replace_start(struct btrfs_root *root,
1332     dev_replace->cursor_right = 0;
1333     dev_replace->is_valid = 1;
1334     dev_replace->item_needs_writeback = 1;
1335     + atomic64_set(&dev_replace->num_write_errors, 0);
1336     + atomic64_set(&dev_replace->num_uncorrectable_read_errors, 0);
1337     args->result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR;
1338     btrfs_dev_replace_unlock(dev_replace);
1339    
1340     diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
1341     index d8d68af5aef0..ae6e3e36fdf0 100644
1342     --- a/fs/btrfs/disk-io.c
1343     +++ b/fs/btrfs/disk-io.c
1344     @@ -303,7 +303,7 @@ static int csum_tree_block(struct btrfs_fs_info *fs_info,
1345     err = map_private_extent_buffer(buf, offset, 32,
1346     &kaddr, &map_start, &map_len);
1347     if (err)
1348     - return 1;
1349     + return err;
1350     cur_len = min(len, map_len - (offset - map_start));
1351     crc = btrfs_csum_data(kaddr + offset - map_start,
1352     crc, cur_len);
1353     @@ -313,7 +313,7 @@ static int csum_tree_block(struct btrfs_fs_info *fs_info,
1354     if (csum_size > sizeof(inline_result)) {
1355     result = kzalloc(csum_size, GFP_NOFS);
1356     if (!result)
1357     - return 1;
1358     + return -ENOMEM;
1359     } else {
1360     result = (char *)&inline_result;
1361     }
1362     @@ -334,7 +334,7 @@ static int csum_tree_block(struct btrfs_fs_info *fs_info,
1363     val, found, btrfs_header_level(buf));
1364     if (result != (char *)&inline_result)
1365     kfree(result);
1366     - return 1;
1367     + return -EUCLEAN;
1368     }
1369     } else {
1370     write_extent_buffer(buf, result, 0, csum_size);
1371     @@ -513,11 +513,21 @@ static int csum_dirty_buffer(struct btrfs_fs_info *fs_info, struct page *page)
1372     eb = (struct extent_buffer *)page->private;
1373     if (page != eb->pages[0])
1374     return 0;
1375     +
1376     found_start = btrfs_header_bytenr(eb);
1377     - if (WARN_ON(found_start != start || !PageUptodate(page)))
1378     - return 0;
1379     - csum_tree_block(fs_info, eb, 0);
1380     - return 0;
1381     + /*
1382     + * Please do not consolidate these warnings into a single if.
1383     + * It is useful to know what went wrong.
1384     + */
1385     + if (WARN_ON(found_start != start))
1386     + return -EUCLEAN;
1387     + if (WARN_ON(!PageUptodate(page)))
1388     + return -EUCLEAN;
1389     +
1390     + ASSERT(memcmp_extent_buffer(eb, fs_info->fsid,
1391     + btrfs_header_fsid(), BTRFS_FSID_SIZE) == 0);
1392     +
1393     + return csum_tree_block(fs_info, eb, 0);
1394     }
1395    
1396     static int check_tree_block_fsid(struct btrfs_fs_info *fs_info,
1397     @@ -660,10 +670,8 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
1398     eb, found_level);
1399    
1400     ret = csum_tree_block(root->fs_info, eb, 1);
1401     - if (ret) {
1402     - ret = -EIO;
1403     + if (ret)
1404     goto err;
1405     - }
1406    
1407     /*
1408     * If this is a leaf block and it is corrupt, set the corrupt bit so
1409     diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
1410     index 9a30ca64066b..5d956b869e03 100644
1411     --- a/fs/btrfs/file.c
1412     +++ b/fs/btrfs/file.c
1413     @@ -1996,10 +1996,11 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
1414     */
1415     smp_mb();
1416     if (btrfs_inode_in_log(inode, root->fs_info->generation) ||
1417     - (BTRFS_I(inode)->last_trans <=
1418     - root->fs_info->last_trans_committed &&
1419     - (full_sync ||
1420     - !btrfs_have_ordered_extents_in_range(inode, start, len)))) {
1421     + (full_sync && BTRFS_I(inode)->last_trans <=
1422     + root->fs_info->last_trans_committed) ||
1423     + (!btrfs_have_ordered_extents_in_range(inode, start, len) &&
1424     + BTRFS_I(inode)->last_trans
1425     + <= root->fs_info->last_trans_committed)) {
1426     /*
1427     * We'v had everything committed since the last time we were
1428     * modified so clear this flag in case it was set for whatever
1429     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
1430     index d96f5cf38a2d..f407e487c687 100644
1431     --- a/fs/btrfs/inode.c
1432     +++ b/fs/btrfs/inode.c
1433     @@ -4211,11 +4211,20 @@ static int truncate_space_check(struct btrfs_trans_handle *trans,
1434     {
1435     int ret;
1436    
1437     + /*
1438     + * This is only used to apply pressure to the enospc system, we don't
1439     + * intend to use this reservation at all.
1440     + */
1441     bytes_deleted = btrfs_csum_bytes_to_leaves(root, bytes_deleted);
1442     + bytes_deleted *= root->nodesize;
1443     ret = btrfs_block_rsv_add(root, &root->fs_info->trans_block_rsv,
1444     bytes_deleted, BTRFS_RESERVE_NO_FLUSH);
1445     - if (!ret)
1446     + if (!ret) {
1447     + trace_btrfs_space_reservation(root->fs_info, "transaction",
1448     + trans->transid,
1449     + bytes_deleted, 1);
1450     trans->bytes_reserved += bytes_deleted;
1451     + }
1452     return ret;
1453    
1454     }
1455     @@ -7414,7 +7423,26 @@ static int lock_extent_direct(struct inode *inode, u64 lockstart, u64 lockend,
1456     cached_state, GFP_NOFS);
1457    
1458     if (ordered) {
1459     - btrfs_start_ordered_extent(inode, ordered, 1);
1460     + /*
1461     + * If we are doing a DIO read and the ordered extent we
1462     + * found is for a buffered write, we can not wait for it
1463     + * to complete and retry, because if we do so we can
1464     + * deadlock with concurrent buffered writes on page
1465     + * locks. This happens only if our DIO read covers more
1466     + * than one extent map, if at this point has already
1467     + * created an ordered extent for a previous extent map
1468     + * and locked its range in the inode's io tree, and a
1469     + * concurrent write against that previous extent map's
1470     + * range and this range started (we unlock the ranges
1471     + * in the io tree only when the bios complete and
1472     + * buffered writes always lock pages before attempting
1473     + * to lock range in the io tree).
1474     + */
1475     + if (writing ||
1476     + test_bit(BTRFS_ORDERED_DIRECT, &ordered->flags))
1477     + btrfs_start_ordered_extent(inode, ordered, 1);
1478     + else
1479     + ret = -ENOTBLK;
1480     btrfs_put_ordered_extent(ordered);
1481     } else {
1482     /*
1483     @@ -7431,9 +7459,11 @@ static int lock_extent_direct(struct inode *inode, u64 lockstart, u64 lockend,
1484     * that page.
1485     */
1486     ret = -ENOTBLK;
1487     - break;
1488     }
1489    
1490     + if (ret)
1491     + break;
1492     +
1493     cond_resched();
1494     }
1495    
1496     diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
1497     index 48aee9846329..e3791f268489 100644
1498     --- a/fs/btrfs/ioctl.c
1499     +++ b/fs/btrfs/ioctl.c
1500     @@ -59,6 +59,7 @@
1501     #include "props.h"
1502     #include "sysfs.h"
1503     #include "qgroup.h"
1504     +#include "tree-log.h"
1505    
1506     #ifdef CONFIG_64BIT
1507     /* If we have a 32-bit userspace and 64-bit kernel, then the UAPI
1508     @@ -1656,7 +1657,7 @@ static noinline int btrfs_ioctl_snap_create_transid(struct file *file,
1509    
1510     src_inode = file_inode(src.file);
1511     if (src_inode->i_sb != file_inode(file)->i_sb) {
1512     - btrfs_info(BTRFS_I(src_inode)->root->fs_info,
1513     + btrfs_info(BTRFS_I(file_inode(file))->root->fs_info,
1514     "Snapshot src from another FS");
1515     ret = -EXDEV;
1516     } else if (!inode_owner_or_capable(src_inode)) {
1517     @@ -2097,8 +2098,6 @@ static noinline int search_ioctl(struct inode *inode,
1518     key.offset = (u64)-1;
1519     root = btrfs_read_fs_root_no_name(info, &key);
1520     if (IS_ERR(root)) {
1521     - btrfs_err(info, "could not find root %llu",
1522     - sk->tree_id);
1523     btrfs_free_path(path);
1524     return -ENOENT;
1525     }
1526     @@ -2476,6 +2475,8 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
1527     trans->block_rsv = &block_rsv;
1528     trans->bytes_reserved = block_rsv.size;
1529    
1530     + btrfs_record_snapshot_destroy(trans, dir);
1531     +
1532     ret = btrfs_unlink_subvol(trans, root, dir,
1533     dest->root_key.objectid,
1534     dentry->d_name.name,
1535     @@ -3068,6 +3069,9 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen,
1536     ret = extent_same_check_offsets(src, loff, &len, olen);
1537     if (ret)
1538     goto out_unlock;
1539     + ret = extent_same_check_offsets(src, dst_loff, &len, olen);
1540     + if (ret)
1541     + goto out_unlock;
1542    
1543     /*
1544     * Single inode case wants the same checks, except we
1545     diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
1546     index 5279fdae7142..7173360eea7a 100644
1547     --- a/fs/btrfs/qgroup.c
1548     +++ b/fs/btrfs/qgroup.c
1549     @@ -1842,8 +1842,10 @@ out:
1550     }
1551    
1552     /*
1553     - * copy the acounting information between qgroups. This is necessary when a
1554     - * snapshot or a subvolume is created
1555     + * Copy the acounting information between qgroups. This is necessary
1556     + * when a snapshot or a subvolume is created. Throwing an error will
1557     + * cause a transaction abort so we take extra care here to only error
1558     + * when a readonly fs is a reasonable outcome.
1559     */
1560     int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
1561     struct btrfs_fs_info *fs_info, u64 srcid, u64 objectid,
1562     @@ -1873,15 +1875,15 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
1563     2 * inherit->num_excl_copies;
1564     for (i = 0; i < nums; ++i) {
1565     srcgroup = find_qgroup_rb(fs_info, *i_qgroups);
1566     - if (!srcgroup) {
1567     - ret = -EINVAL;
1568     - goto out;
1569     - }
1570    
1571     - if ((srcgroup->qgroupid >> 48) <= (objectid >> 48)) {
1572     - ret = -EINVAL;
1573     - goto out;
1574     - }
1575     + /*
1576     + * Zero out invalid groups so we can ignore
1577     + * them later.
1578     + */
1579     + if (!srcgroup ||
1580     + ((srcgroup->qgroupid >> 48) <= (objectid >> 48)))
1581     + *i_qgroups = 0ULL;
1582     +
1583     ++i_qgroups;
1584     }
1585     }
1586     @@ -1916,17 +1918,19 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
1587     */
1588     if (inherit) {
1589     i_qgroups = (u64 *)(inherit + 1);
1590     - for (i = 0; i < inherit->num_qgroups; ++i) {
1591     + for (i = 0; i < inherit->num_qgroups; ++i, ++i_qgroups) {
1592     + if (*i_qgroups == 0)
1593     + continue;
1594     ret = add_qgroup_relation_item(trans, quota_root,
1595     objectid, *i_qgroups);
1596     - if (ret)
1597     + if (ret && ret != -EEXIST)
1598     goto out;
1599     ret = add_qgroup_relation_item(trans, quota_root,
1600     *i_qgroups, objectid);
1601     - if (ret)
1602     + if (ret && ret != -EEXIST)
1603     goto out;
1604     - ++i_qgroups;
1605     }
1606     + ret = 0;
1607     }
1608    
1609    
1610     @@ -1987,17 +1991,22 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
1611    
1612     i_qgroups = (u64 *)(inherit + 1);
1613     for (i = 0; i < inherit->num_qgroups; ++i) {
1614     - ret = add_relation_rb(quota_root->fs_info, objectid,
1615     - *i_qgroups);
1616     - if (ret)
1617     - goto unlock;
1618     + if (*i_qgroups) {
1619     + ret = add_relation_rb(quota_root->fs_info, objectid,
1620     + *i_qgroups);
1621     + if (ret)
1622     + goto unlock;
1623     + }
1624     ++i_qgroups;
1625     }
1626    
1627     - for (i = 0; i < inherit->num_ref_copies; ++i) {
1628     + for (i = 0; i < inherit->num_ref_copies; ++i, i_qgroups += 2) {
1629     struct btrfs_qgroup *src;
1630     struct btrfs_qgroup *dst;
1631    
1632     + if (!i_qgroups[0] || !i_qgroups[1])
1633     + continue;
1634     +
1635     src = find_qgroup_rb(fs_info, i_qgroups[0]);
1636     dst = find_qgroup_rb(fs_info, i_qgroups[1]);
1637    
1638     @@ -2008,12 +2017,14 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
1639    
1640     dst->rfer = src->rfer - level_size;
1641     dst->rfer_cmpr = src->rfer_cmpr - level_size;
1642     - i_qgroups += 2;
1643     }
1644     - for (i = 0; i < inherit->num_excl_copies; ++i) {
1645     + for (i = 0; i < inherit->num_excl_copies; ++i, i_qgroups += 2) {
1646     struct btrfs_qgroup *src;
1647     struct btrfs_qgroup *dst;
1648    
1649     + if (!i_qgroups[0] || !i_qgroups[1])
1650     + continue;
1651     +
1652     src = find_qgroup_rb(fs_info, i_qgroups[0]);
1653     dst = find_qgroup_rb(fs_info, i_qgroups[1]);
1654    
1655     @@ -2024,7 +2035,6 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
1656    
1657     dst->excl = src->excl + level_size;
1658     dst->excl_cmpr = src->excl_cmpr + level_size;
1659     - i_qgroups += 2;
1660     }
1661    
1662     unlock:
1663     diff --git a/fs/btrfs/reada.c b/fs/btrfs/reada.c
1664     index 619f92963e27..49b3fb73ffbf 100644
1665     --- a/fs/btrfs/reada.c
1666     +++ b/fs/btrfs/reada.c
1667     @@ -265,7 +265,7 @@ static struct reada_zone *reada_find_zone(struct btrfs_fs_info *fs_info,
1668     spin_unlock(&fs_info->reada_lock);
1669    
1670     if (ret == 1) {
1671     - if (logical >= zone->start && logical < zone->end)
1672     + if (logical >= zone->start && logical <= zone->end)
1673     return zone;
1674     spin_lock(&fs_info->reada_lock);
1675     kref_put(&zone->refcnt, reada_zone_release);
1676     @@ -679,7 +679,7 @@ static int reada_start_machine_dev(struct btrfs_fs_info *fs_info,
1677     */
1678     ret = radix_tree_gang_lookup(&dev->reada_extents, (void **)&re,
1679     dev->reada_next >> PAGE_CACHE_SHIFT, 1);
1680     - if (ret == 0 || re->logical >= dev->reada_curr_zone->end) {
1681     + if (ret == 0 || re->logical > dev->reada_curr_zone->end) {
1682     ret = reada_pick_zone(dev);
1683     if (!ret) {
1684     spin_unlock(&fs_info->reada_lock);
1685     diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
1686     index 2bd0011450df..5c806f0d443d 100644
1687     --- a/fs/btrfs/relocation.c
1688     +++ b/fs/btrfs/relocation.c
1689     @@ -1850,6 +1850,7 @@ again:
1690     eb = read_tree_block(dest, old_bytenr, old_ptr_gen);
1691     if (IS_ERR(eb)) {
1692     ret = PTR_ERR(eb);
1693     + break;
1694     } else if (!extent_buffer_uptodate(eb)) {
1695     ret = -EIO;
1696     free_extent_buffer(eb);
1697     diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
1698     index 849a30aa117d..58ae0a2ce65c 100644
1699     --- a/fs/btrfs/tree-log.c
1700     +++ b/fs/btrfs/tree-log.c
1701     @@ -4621,7 +4621,22 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
1702    
1703     mutex_lock(&BTRFS_I(inode)->log_mutex);
1704    
1705     - btrfs_get_logged_extents(inode, &logged_list, start, end);
1706     + /*
1707     + * Collect ordered extents only if we are logging data. This is to
1708     + * ensure a subsequent request to log this inode in LOG_INODE_ALL mode
1709     + * will process the ordered extents if they still exists at the time,
1710     + * because when we collect them we test and set for the flag
1711     + * BTRFS_ORDERED_LOGGED to prevent multiple log requests to process the
1712     + * same ordered extents. The consequence for the LOG_INODE_ALL log mode
1713     + * not processing the ordered extents is that we end up logging the
1714     + * corresponding file extent items, based on the extent maps in the
1715     + * inode's extent_map_tree's modified_list, without logging the
1716     + * respective checksums (since the may still be only attached to the
1717     + * ordered extents and have not been inserted in the csum tree by
1718     + * btrfs_finish_ordered_io() yet).
1719     + */
1720     + if (inode_only == LOG_INODE_ALL)
1721     + btrfs_get_logged_extents(inode, &logged_list, start, end);
1722    
1723     /*
1724     * a brute force approach to making sure we get the most uptodate
1725     @@ -4909,6 +4924,42 @@ out_unlock:
1726     }
1727    
1728     /*
1729     + * Check if we must fallback to a transaction commit when logging an inode.
1730     + * This must be called after logging the inode and is used only in the context
1731     + * when fsyncing an inode requires the need to log some other inode - in which
1732     + * case we can't lock the i_mutex of each other inode we need to log as that
1733     + * can lead to deadlocks with concurrent fsync against other inodes (as we can
1734     + * log inodes up or down in the hierarchy) or rename operations for example. So
1735     + * we take the log_mutex of the inode after we have logged it and then check for
1736     + * its last_unlink_trans value - this is safe because any task setting
1737     + * last_unlink_trans must take the log_mutex and it must do this before it does
1738     + * the actual unlink operation, so if we do this check before a concurrent task
1739     + * sets last_unlink_trans it means we've logged a consistent version/state of
1740     + * all the inode items, otherwise we are not sure and must do a transaction
1741     + * commit (the concurrent task migth have only updated last_unlink_trans before
1742     + * we logged the inode or it might have also done the unlink).
1743     + */
1744     +static bool btrfs_must_commit_transaction(struct btrfs_trans_handle *trans,
1745     + struct inode *inode)
1746     +{
1747     + struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
1748     + bool ret = false;
1749     +
1750     + mutex_lock(&BTRFS_I(inode)->log_mutex);
1751     + if (BTRFS_I(inode)->last_unlink_trans > fs_info->last_trans_committed) {
1752     + /*
1753     + * Make sure any commits to the log are forced to be full
1754     + * commits.
1755     + */
1756     + btrfs_set_log_full_commit(fs_info, trans);
1757     + ret = true;
1758     + }
1759     + mutex_unlock(&BTRFS_I(inode)->log_mutex);
1760     +
1761     + return ret;
1762     +}
1763     +
1764     +/*
1765     * follow the dentry parent pointers up the chain and see if any
1766     * of the directories in it require a full commit before they can
1767     * be logged. Returns zero if nothing special needs to be done or 1 if
1768     @@ -4921,7 +4972,6 @@ static noinline int check_parent_dirs_for_sync(struct btrfs_trans_handle *trans,
1769     u64 last_committed)
1770     {
1771     int ret = 0;
1772     - struct btrfs_root *root;
1773     struct dentry *old_parent = NULL;
1774     struct inode *orig_inode = inode;
1775    
1776     @@ -4953,14 +5003,7 @@ static noinline int check_parent_dirs_for_sync(struct btrfs_trans_handle *trans,
1777     BTRFS_I(inode)->logged_trans = trans->transid;
1778     smp_mb();
1779    
1780     - if (BTRFS_I(inode)->last_unlink_trans > last_committed) {
1781     - root = BTRFS_I(inode)->root;
1782     -
1783     - /*
1784     - * make sure any commits to the log are forced
1785     - * to be full commits
1786     - */
1787     - btrfs_set_log_full_commit(root->fs_info, trans);
1788     + if (btrfs_must_commit_transaction(trans, inode)) {
1789     ret = 1;
1790     break;
1791     }
1792     @@ -5119,6 +5162,9 @@ process_leaf:
1793     btrfs_release_path(path);
1794     ret = btrfs_log_inode(trans, root, di_inode,
1795     log_mode, 0, LLONG_MAX, ctx);
1796     + if (!ret &&
1797     + btrfs_must_commit_transaction(trans, di_inode))
1798     + ret = 1;
1799     iput(di_inode);
1800     if (ret)
1801     goto next_dir_inode;
1802     @@ -5233,6 +5279,9 @@ static int btrfs_log_all_parents(struct btrfs_trans_handle *trans,
1803    
1804     ret = btrfs_log_inode(trans, root, dir_inode,
1805     LOG_INODE_ALL, 0, LLONG_MAX, ctx);
1806     + if (!ret &&
1807     + btrfs_must_commit_transaction(trans, dir_inode))
1808     + ret = 1;
1809     iput(dir_inode);
1810     if (ret)
1811     goto out;
1812     @@ -5584,6 +5633,9 @@ error:
1813     * They revolve around files there were unlinked from the directory, and
1814     * this function updates the parent directory so that a full commit is
1815     * properly done if it is fsync'd later after the unlinks are done.
1816     + *
1817     + * Must be called before the unlink operations (updates to the subvolume tree,
1818     + * inodes, etc) are done.
1819     */
1820     void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans,
1821     struct inode *dir, struct inode *inode,
1822     @@ -5599,8 +5651,11 @@ void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans,
1823     * into the file. When the file is logged we check it and
1824     * don't log the parents if the file is fully on disk.
1825     */
1826     - if (S_ISREG(inode->i_mode))
1827     + if (S_ISREG(inode->i_mode)) {
1828     + mutex_lock(&BTRFS_I(inode)->log_mutex);
1829     BTRFS_I(inode)->last_unlink_trans = trans->transid;
1830     + mutex_unlock(&BTRFS_I(inode)->log_mutex);
1831     + }
1832    
1833     /*
1834     * if this directory was already logged any new
1835     @@ -5631,7 +5686,29 @@ void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans,
1836     return;
1837    
1838     record:
1839     + mutex_lock(&BTRFS_I(dir)->log_mutex);
1840     + BTRFS_I(dir)->last_unlink_trans = trans->transid;
1841     + mutex_unlock(&BTRFS_I(dir)->log_mutex);
1842     +}
1843     +
1844     +/*
1845     + * Make sure that if someone attempts to fsync the parent directory of a deleted
1846     + * snapshot, it ends up triggering a transaction commit. This is to guarantee
1847     + * that after replaying the log tree of the parent directory's root we will not
1848     + * see the snapshot anymore and at log replay time we will not see any log tree
1849     + * corresponding to the deleted snapshot's root, which could lead to replaying
1850     + * it after replaying the log tree of the parent directory (which would replay
1851     + * the snapshot delete operation).
1852     + *
1853     + * Must be called before the actual snapshot destroy operation (updates to the
1854     + * parent root and tree of tree roots trees, etc) are done.
1855     + */
1856     +void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans,
1857     + struct inode *dir)
1858     +{
1859     + mutex_lock(&BTRFS_I(dir)->log_mutex);
1860     BTRFS_I(dir)->last_unlink_trans = trans->transid;
1861     + mutex_unlock(&BTRFS_I(dir)->log_mutex);
1862     }
1863    
1864     /*
1865     diff --git a/fs/btrfs/tree-log.h b/fs/btrfs/tree-log.h
1866     index 6916a781ea02..a9f1b75d080d 100644
1867     --- a/fs/btrfs/tree-log.h
1868     +++ b/fs/btrfs/tree-log.h
1869     @@ -79,6 +79,8 @@ int btrfs_pin_log_trans(struct btrfs_root *root);
1870     void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans,
1871     struct inode *dir, struct inode *inode,
1872     int for_rename);
1873     +void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans,
1874     + struct inode *dir);
1875     int btrfs_log_new_name(struct btrfs_trans_handle *trans,
1876     struct inode *inode, struct inode *old_dir,
1877     struct dentry *parent);
1878     diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c
1879     index 5384ceb35b1c..98b3eb7d8eaf 100644
1880     --- a/fs/isofs/rock.c
1881     +++ b/fs/isofs/rock.c
1882     @@ -203,6 +203,8 @@ int get_rock_ridge_filename(struct iso_directory_record *de,
1883     int retnamlen = 0;
1884     int truncate = 0;
1885     int ret = 0;
1886     + char *p;
1887     + int len;
1888    
1889     if (!ISOFS_SB(inode->i_sb)->s_rock)
1890     return 0;
1891     @@ -267,12 +269,17 @@ repeat:
1892     rr->u.NM.flags);
1893     break;
1894     }
1895     - if ((strlen(retname) + rr->len - 5) >= 254) {
1896     + len = rr->len - 5;
1897     + if (retnamlen + len >= 254) {
1898     truncate = 1;
1899     break;
1900     }
1901     - strncat(retname, rr->u.NM.name, rr->len - 5);
1902     - retnamlen += rr->len - 5;
1903     + p = memchr(rr->u.NM.name, '\0', len);
1904     + if (unlikely(p))
1905     + len = p - rr->u.NM.name;
1906     + memcpy(retname + retnamlen, rr->u.NM.name, len);
1907     + retnamlen += len;
1908     + retname[retnamlen] = '\0';
1909     break;
1910     case SIG('R', 'E'):
1911     kfree(rs.buffer);
1912     diff --git a/fs/namei.c b/fs/namei.c
1913     index 9c590e0f66e9..7824bfb89ada 100644
1914     --- a/fs/namei.c
1915     +++ b/fs/namei.c
1916     @@ -2968,22 +2968,10 @@ no_open:
1917     dentry = lookup_real(dir, dentry, nd->flags);
1918     if (IS_ERR(dentry))
1919     return PTR_ERR(dentry);
1920     -
1921     - if (create_error) {
1922     - int open_flag = op->open_flag;
1923     -
1924     - error = create_error;
1925     - if ((open_flag & O_EXCL)) {
1926     - if (!dentry->d_inode)
1927     - goto out;
1928     - } else if (!dentry->d_inode) {
1929     - goto out;
1930     - } else if ((open_flag & O_TRUNC) &&
1931     - d_is_reg(dentry)) {
1932     - goto out;
1933     - }
1934     - /* will fail later, go on to get the right error */
1935     - }
1936     + }
1937     + if (create_error && !dentry->d_inode) {
1938     + error = create_error;
1939     + goto out;
1940     }
1941     looked_up:
1942     path->dentry = dentry;
1943     @@ -4258,7 +4246,11 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
1944     bool new_is_dir = false;
1945     unsigned max_links = new_dir->i_sb->s_max_links;
1946    
1947     - if (source == target)
1948     + /*
1949     + * Check source == target.
1950     + * On overlayfs need to look at underlying inodes.
1951     + */
1952     + if (vfs_select_inode(old_dentry, 0) == vfs_select_inode(new_dentry, 0))
1953     return 0;
1954    
1955     error = may_delete(old_dir, old_dentry, is_dir);
1956     diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
1957     index 0cdf497c91ef..2162434728c0 100644
1958     --- a/fs/ocfs2/acl.c
1959     +++ b/fs/ocfs2/acl.c
1960     @@ -322,3 +322,90 @@ struct posix_acl *ocfs2_iop_get_acl(struct inode *inode, int type)
1961     brelse(di_bh);
1962     return acl;
1963     }
1964     +
1965     +int ocfs2_acl_chmod(struct inode *inode, struct buffer_head *bh)
1966     +{
1967     + struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1968     + struct posix_acl *acl;
1969     + int ret;
1970     +
1971     + if (S_ISLNK(inode->i_mode))
1972     + return -EOPNOTSUPP;
1973     +
1974     + if (!(osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL))
1975     + return 0;
1976     +
1977     + acl = ocfs2_get_acl_nolock(inode, ACL_TYPE_ACCESS, bh);
1978     + if (IS_ERR(acl) || !acl)
1979     + return PTR_ERR(acl);
1980     + ret = __posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode);
1981     + if (ret)
1982     + return ret;
1983     + ret = ocfs2_set_acl(NULL, inode, NULL, ACL_TYPE_ACCESS,
1984     + acl, NULL, NULL);
1985     + posix_acl_release(acl);
1986     + return ret;
1987     +}
1988     +
1989     +/*
1990     + * Initialize the ACLs of a new inode. If parent directory has default ACL,
1991     + * then clone to new inode. Called from ocfs2_mknod.
1992     + */
1993     +int ocfs2_init_acl(handle_t *handle,
1994     + struct inode *inode,
1995     + struct inode *dir,
1996     + struct buffer_head *di_bh,
1997     + struct buffer_head *dir_bh,
1998     + struct ocfs2_alloc_context *meta_ac,
1999     + struct ocfs2_alloc_context *data_ac)
2000     +{
2001     + struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2002     + struct posix_acl *acl = NULL;
2003     + int ret = 0, ret2;
2004     + umode_t mode;
2005     +
2006     + if (!S_ISLNK(inode->i_mode)) {
2007     + if (osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) {
2008     + acl = ocfs2_get_acl_nolock(dir, ACL_TYPE_DEFAULT,
2009     + dir_bh);
2010     + if (IS_ERR(acl))
2011     + return PTR_ERR(acl);
2012     + }
2013     + if (!acl) {
2014     + mode = inode->i_mode & ~current_umask();
2015     + ret = ocfs2_acl_set_mode(inode, di_bh, handle, mode);
2016     + if (ret) {
2017     + mlog_errno(ret);
2018     + goto cleanup;
2019     + }
2020     + }
2021     + }
2022     + if ((osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) && acl) {
2023     + if (S_ISDIR(inode->i_mode)) {
2024     + ret = ocfs2_set_acl(handle, inode, di_bh,
2025     + ACL_TYPE_DEFAULT, acl,
2026     + meta_ac, data_ac);
2027     + if (ret)
2028     + goto cleanup;
2029     + }
2030     + mode = inode->i_mode;
2031     + ret = __posix_acl_create(&acl, GFP_NOFS, &mode);
2032     + if (ret < 0)
2033     + return ret;
2034     +
2035     + ret2 = ocfs2_acl_set_mode(inode, di_bh, handle, mode);
2036     + if (ret2) {
2037     + mlog_errno(ret2);
2038     + ret = ret2;
2039     + goto cleanup;
2040     + }
2041     + if (ret > 0) {
2042     + ret = ocfs2_set_acl(handle, inode,
2043     + di_bh, ACL_TYPE_ACCESS,
2044     + acl, meta_ac, data_ac);
2045     + }
2046     + }
2047     +cleanup:
2048     + posix_acl_release(acl);
2049     + return ret;
2050     +}
2051     diff --git a/fs/ocfs2/acl.h b/fs/ocfs2/acl.h
2052     index 3fce68d08625..2783a75b3999 100644
2053     --- a/fs/ocfs2/acl.h
2054     +++ b/fs/ocfs2/acl.h
2055     @@ -35,5 +35,10 @@ int ocfs2_set_acl(handle_t *handle,
2056     struct posix_acl *acl,
2057     struct ocfs2_alloc_context *meta_ac,
2058     struct ocfs2_alloc_context *data_ac);
2059     +extern int ocfs2_acl_chmod(struct inode *, struct buffer_head *);
2060     +extern int ocfs2_init_acl(handle_t *, struct inode *, struct inode *,
2061     + struct buffer_head *, struct buffer_head *,
2062     + struct ocfs2_alloc_context *,
2063     + struct ocfs2_alloc_context *);
2064    
2065     #endif /* OCFS2_ACL_H */
2066     diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
2067     index 7cb38fdca229..3d60fda1cb09 100644
2068     --- a/fs/ocfs2/file.c
2069     +++ b/fs/ocfs2/file.c
2070     @@ -1268,20 +1268,20 @@ bail_unlock_rw:
2071     if (size_change)
2072     ocfs2_rw_unlock(inode, 1);
2073     bail:
2074     - brelse(bh);
2075    
2076     /* Release quota pointers in case we acquired them */
2077     for (qtype = 0; qtype < OCFS2_MAXQUOTAS; qtype++)
2078     dqput(transfer_to[qtype]);
2079    
2080     if (!status && attr->ia_valid & ATTR_MODE) {
2081     - status = posix_acl_chmod(inode, inode->i_mode);
2082     + status = ocfs2_acl_chmod(inode, bh);
2083     if (status < 0)
2084     mlog_errno(status);
2085     }
2086     if (inode_locked)
2087     ocfs2_inode_unlock(inode, 1);
2088    
2089     + brelse(bh);
2090     return status;
2091     }
2092    
2093     diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
2094     index 6b3e87189a64..a8f1225e6d9b 100644
2095     --- a/fs/ocfs2/namei.c
2096     +++ b/fs/ocfs2/namei.c
2097     @@ -259,7 +259,6 @@ static int ocfs2_mknod(struct inode *dir,
2098     struct ocfs2_dir_lookup_result lookup = { NULL, };
2099     sigset_t oldset;
2100     int did_block_signals = 0;
2101     - struct posix_acl *default_acl = NULL, *acl = NULL;
2102     struct ocfs2_dentry_lock *dl = NULL;
2103    
2104     trace_ocfs2_mknod(dir, dentry, dentry->d_name.len, dentry->d_name.name,
2105     @@ -367,12 +366,6 @@ static int ocfs2_mknod(struct inode *dir,
2106     goto leave;
2107     }
2108    
2109     - status = posix_acl_create(dir, &inode->i_mode, &default_acl, &acl);
2110     - if (status) {
2111     - mlog_errno(status);
2112     - goto leave;
2113     - }
2114     -
2115     handle = ocfs2_start_trans(osb, ocfs2_mknod_credits(osb->sb,
2116     S_ISDIR(mode),
2117     xattr_credits));
2118     @@ -421,16 +414,8 @@ static int ocfs2_mknod(struct inode *dir,
2119     inc_nlink(dir);
2120     }
2121    
2122     - if (default_acl) {
2123     - status = ocfs2_set_acl(handle, inode, new_fe_bh,
2124     - ACL_TYPE_DEFAULT, default_acl,
2125     - meta_ac, data_ac);
2126     - }
2127     - if (!status && acl) {
2128     - status = ocfs2_set_acl(handle, inode, new_fe_bh,
2129     - ACL_TYPE_ACCESS, acl,
2130     - meta_ac, data_ac);
2131     - }
2132     + status = ocfs2_init_acl(handle, inode, dir, new_fe_bh, parent_fe_bh,
2133     + meta_ac, data_ac);
2134    
2135     if (status < 0) {
2136     mlog_errno(status);
2137     @@ -472,10 +457,6 @@ static int ocfs2_mknod(struct inode *dir,
2138     d_instantiate(dentry, inode);
2139     status = 0;
2140     leave:
2141     - if (default_acl)
2142     - posix_acl_release(default_acl);
2143     - if (acl)
2144     - posix_acl_release(acl);
2145     if (status < 0 && did_quota_inode)
2146     dquot_free_inode(inode);
2147     if (handle)
2148     diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c
2149     index 3eff031aaf26..9919964c5b3b 100644
2150     --- a/fs/ocfs2/refcounttree.c
2151     +++ b/fs/ocfs2/refcounttree.c
2152     @@ -4248,20 +4248,12 @@ static int ocfs2_reflink(struct dentry *old_dentry, struct inode *dir,
2153     struct inode *inode = d_inode(old_dentry);
2154     struct buffer_head *old_bh = NULL;
2155     struct inode *new_orphan_inode = NULL;
2156     - struct posix_acl *default_acl, *acl;
2157     - umode_t mode;
2158    
2159     if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb)))
2160     return -EOPNOTSUPP;
2161    
2162     - mode = inode->i_mode;
2163     - error = posix_acl_create(dir, &mode, &default_acl, &acl);
2164     - if (error) {
2165     - mlog_errno(error);
2166     - return error;
2167     - }
2168    
2169     - error = ocfs2_create_inode_in_orphan(dir, mode,
2170     + error = ocfs2_create_inode_in_orphan(dir, inode->i_mode,
2171     &new_orphan_inode);
2172     if (error) {
2173     mlog_errno(error);
2174     @@ -4300,16 +4292,11 @@ static int ocfs2_reflink(struct dentry *old_dentry, struct inode *dir,
2175     /* If the security isn't preserved, we need to re-initialize them. */
2176     if (!preserve) {
2177     error = ocfs2_init_security_and_acl(dir, new_orphan_inode,
2178     - &new_dentry->d_name,
2179     - default_acl, acl);
2180     + &new_dentry->d_name);
2181     if (error)
2182     mlog_errno(error);
2183     }
2184     out:
2185     - if (default_acl)
2186     - posix_acl_release(default_acl);
2187     - if (acl)
2188     - posix_acl_release(acl);
2189     if (!error) {
2190     error = ocfs2_mv_orphaned_inode_to_new(dir, new_orphan_inode,
2191     new_dentry);
2192     diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
2193     index 7d3d979f57d9..f19b7381a998 100644
2194     --- a/fs/ocfs2/xattr.c
2195     +++ b/fs/ocfs2/xattr.c
2196     @@ -7216,12 +7216,10 @@ out:
2197     */
2198     int ocfs2_init_security_and_acl(struct inode *dir,
2199     struct inode *inode,
2200     - const struct qstr *qstr,
2201     - struct posix_acl *default_acl,
2202     - struct posix_acl *acl)
2203     + const struct qstr *qstr)
2204     {
2205     - struct buffer_head *dir_bh = NULL;
2206     int ret = 0;
2207     + struct buffer_head *dir_bh = NULL;
2208    
2209     ret = ocfs2_init_security_get(inode, dir, qstr, NULL);
2210     if (ret) {
2211     @@ -7234,11 +7232,9 @@ int ocfs2_init_security_and_acl(struct inode *dir,
2212     mlog_errno(ret);
2213     goto leave;
2214     }
2215     -
2216     - if (!ret && default_acl)
2217     - ret = ocfs2_iop_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
2218     - if (!ret && acl)
2219     - ret = ocfs2_iop_set_acl(inode, acl, ACL_TYPE_ACCESS);
2220     + ret = ocfs2_init_acl(NULL, inode, dir, NULL, dir_bh, NULL, NULL);
2221     + if (ret)
2222     + mlog_errno(ret);
2223    
2224     ocfs2_inode_unlock(dir, 0);
2225     brelse(dir_bh);
2226     diff --git a/fs/ocfs2/xattr.h b/fs/ocfs2/xattr.h
2227     index f10d5b93c366..1633cc15ea1f 100644
2228     --- a/fs/ocfs2/xattr.h
2229     +++ b/fs/ocfs2/xattr.h
2230     @@ -94,7 +94,5 @@ int ocfs2_reflink_xattrs(struct inode *old_inode,
2231     bool preserve_security);
2232     int ocfs2_init_security_and_acl(struct inode *dir,
2233     struct inode *inode,
2234     - const struct qstr *qstr,
2235     - struct posix_acl *default_acl,
2236     - struct posix_acl *acl);
2237     + const struct qstr *qstr);
2238     #endif /* OCFS2_XATTR_H */
2239     diff --git a/fs/open.c b/fs/open.c
2240     index 17cb6b1dab75..081d3d6df74b 100644
2241     --- a/fs/open.c
2242     +++ b/fs/open.c
2243     @@ -840,16 +840,12 @@ EXPORT_SYMBOL(file_path);
2244     int vfs_open(const struct path *path, struct file *file,
2245     const struct cred *cred)
2246     {
2247     - struct dentry *dentry = path->dentry;
2248     - struct inode *inode = dentry->d_inode;
2249     + struct inode *inode = vfs_select_inode(path->dentry, file->f_flags);
2250    
2251     - file->f_path = *path;
2252     - if (dentry->d_flags & DCACHE_OP_SELECT_INODE) {
2253     - inode = dentry->d_op->d_select_inode(dentry, file->f_flags);
2254     - if (IS_ERR(inode))
2255     - return PTR_ERR(inode);
2256     - }
2257     + if (IS_ERR(inode))
2258     + return PTR_ERR(inode);
2259    
2260     + file->f_path = *path;
2261     return do_dentry_open(file, inode, NULL, cred);
2262     }
2263    
2264     diff --git a/include/linux/bpf.h b/include/linux/bpf.h
2265     index 83d1926c61e4..67bc2da5d233 100644
2266     --- a/include/linux/bpf.h
2267     +++ b/include/linux/bpf.h
2268     @@ -165,12 +165,13 @@ void bpf_register_prog_type(struct bpf_prog_type_list *tl);
2269     void bpf_register_map_type(struct bpf_map_type_list *tl);
2270    
2271     struct bpf_prog *bpf_prog_get(u32 ufd);
2272     +struct bpf_prog *bpf_prog_inc(struct bpf_prog *prog);
2273     void bpf_prog_put(struct bpf_prog *prog);
2274     void bpf_prog_put_rcu(struct bpf_prog *prog);
2275    
2276     struct bpf_map *bpf_map_get_with_uref(u32 ufd);
2277     struct bpf_map *__bpf_map_get(struct fd f);
2278     -void bpf_map_inc(struct bpf_map *map, bool uref);
2279     +struct bpf_map *bpf_map_inc(struct bpf_map *map, bool uref);
2280     void bpf_map_put_with_uref(struct bpf_map *map);
2281     void bpf_map_put(struct bpf_map *map);
2282    
2283     diff --git a/include/linux/dcache.h b/include/linux/dcache.h
2284     index 03dda7ba73ac..96c1a2da92d7 100644
2285     --- a/include/linux/dcache.h
2286     +++ b/include/linux/dcache.h
2287     @@ -592,4 +592,16 @@ static inline struct dentry *d_real(struct dentry *dentry)
2288     return dentry;
2289     }
2290    
2291     +static inline struct inode *vfs_select_inode(struct dentry *dentry,
2292     + unsigned open_flags)
2293     +{
2294     + struct inode *inode = d_inode(dentry);
2295     +
2296     + if (inode && unlikely(dentry->d_flags & DCACHE_OP_SELECT_INODE))
2297     + inode = dentry->d_op->d_select_inode(dentry, open_flags);
2298     +
2299     + return inode;
2300     +}
2301     +
2302     +
2303     #endif /* __LINUX_DCACHE_H */
2304     diff --git a/include/linux/mfd/samsung/s2mps11.h b/include/linux/mfd/samsung/s2mps11.h
2305     index b288965e8101..2c14eeca46f0 100644
2306     --- a/include/linux/mfd/samsung/s2mps11.h
2307     +++ b/include/linux/mfd/samsung/s2mps11.h
2308     @@ -173,10 +173,12 @@ enum s2mps11_regulators {
2309    
2310     #define S2MPS11_LDO_VSEL_MASK 0x3F
2311     #define S2MPS11_BUCK_VSEL_MASK 0xFF
2312     +#define S2MPS11_BUCK9_VSEL_MASK 0x1F
2313     #define S2MPS11_ENABLE_MASK (0x03 << S2MPS11_ENABLE_SHIFT)
2314     #define S2MPS11_ENABLE_SHIFT 0x06
2315     #define S2MPS11_LDO_N_VOLTAGES (S2MPS11_LDO_VSEL_MASK + 1)
2316     #define S2MPS11_BUCK_N_VOLTAGES (S2MPS11_BUCK_VSEL_MASK + 1)
2317     +#define S2MPS11_BUCK9_N_VOLTAGES (S2MPS11_BUCK9_VSEL_MASK + 1)
2318     #define S2MPS11_RAMP_DELAY 25000 /* uV/us */
2319    
2320     #define S2MPS11_CTRL1_PWRHOLD_MASK BIT(4)
2321     diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
2322     index 1e3006dcf35d..46dd88e7071b 100644
2323     --- a/include/linux/mlx5/driver.h
2324     +++ b/include/linux/mlx5/driver.h
2325     @@ -813,9 +813,9 @@ int mlx5_set_port_admin_status(struct mlx5_core_dev *dev,
2326     int mlx5_query_port_admin_status(struct mlx5_core_dev *dev,
2327     enum mlx5_port_status *status);
2328    
2329     -int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port);
2330     -void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, int *max_mtu, u8 port);
2331     -void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, int *oper_mtu,
2332     +int mlx5_set_port_mtu(struct mlx5_core_dev *dev, u16 mtu, u8 port);
2333     +void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, u16 *max_mtu, u8 port);
2334     +void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, u16 *oper_mtu,
2335     u8 port);
2336    
2337     int mlx5_query_port_vl_hw_cap(struct mlx5_core_dev *dev,
2338     diff --git a/include/linux/mlx5/vport.h b/include/linux/mlx5/vport.h
2339     index 123771003e68..a3f3c71124d3 100644
2340     --- a/include/linux/mlx5/vport.h
2341     +++ b/include/linux/mlx5/vport.h
2342     @@ -45,6 +45,8 @@ int mlx5_query_nic_vport_mac_address(struct mlx5_core_dev *mdev,
2343     u16 vport, u8 *addr);
2344     int mlx5_modify_nic_vport_mac_address(struct mlx5_core_dev *dev,
2345     u16 vport, u8 *addr);
2346     +int mlx5_query_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 *mtu);
2347     +int mlx5_modify_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 mtu);
2348     int mlx5_query_nic_vport_system_image_guid(struct mlx5_core_dev *mdev,
2349     u64 *system_image_guid);
2350     int mlx5_query_nic_vport_node_guid(struct mlx5_core_dev *mdev, u64 *node_guid);
2351     diff --git a/include/linux/mm.h b/include/linux/mm.h
2352     index a6c240e885c0..e4e59f9d82f1 100644
2353     --- a/include/linux/mm.h
2354     +++ b/include/linux/mm.h
2355     @@ -456,11 +456,20 @@ static inline int page_mapcount(struct page *page)
2356    
2357     #ifdef CONFIG_TRANSPARENT_HUGEPAGE
2358     int total_mapcount(struct page *page);
2359     +int page_trans_huge_mapcount(struct page *page, int *total_mapcount);
2360     #else
2361     static inline int total_mapcount(struct page *page)
2362     {
2363     return page_mapcount(page);
2364     }
2365     +static inline int page_trans_huge_mapcount(struct page *page,
2366     + int *total_mapcount)
2367     +{
2368     + int mapcount = page_mapcount(page);
2369     + if (total_mapcount)
2370     + *total_mapcount = mapcount;
2371     + return mapcount;
2372     +}
2373     #endif
2374    
2375     static inline int page_count(struct page *page)
2376     diff --git a/include/linux/net.h b/include/linux/net.h
2377     index 0b4ac7da583a..25ef630f1bd6 100644
2378     --- a/include/linux/net.h
2379     +++ b/include/linux/net.h
2380     @@ -245,7 +245,15 @@ do { \
2381     net_ratelimited_function(pr_warn, fmt, ##__VA_ARGS__)
2382     #define net_info_ratelimited(fmt, ...) \
2383     net_ratelimited_function(pr_info, fmt, ##__VA_ARGS__)
2384     -#if defined(DEBUG)
2385     +#if defined(CONFIG_DYNAMIC_DEBUG)
2386     +#define net_dbg_ratelimited(fmt, ...) \
2387     +do { \
2388     + DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
2389     + if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT) && \
2390     + net_ratelimit()) \
2391     + __dynamic_pr_debug(&descriptor, fmt, ##__VA_ARGS__); \
2392     +} while (0)
2393     +#elif defined(DEBUG)
2394     #define net_dbg_ratelimited(fmt, ...) \
2395     net_ratelimited_function(pr_debug, fmt, ##__VA_ARGS__)
2396     #else
2397     diff --git a/include/linux/rculist_nulls.h b/include/linux/rculist_nulls.h
2398     index 1c33dd7da4a7..4ae95f7e8597 100644
2399     --- a/include/linux/rculist_nulls.h
2400     +++ b/include/linux/rculist_nulls.h
2401     @@ -98,6 +98,45 @@ static inline void hlist_nulls_add_head_rcu(struct hlist_nulls_node *n,
2402     if (!is_a_nulls(first))
2403     first->pprev = &n->next;
2404     }
2405     +
2406     +/**
2407     + * hlist_nulls_add_tail_rcu
2408     + * @n: the element to add to the hash list.
2409     + * @h: the list to add to.
2410     + *
2411     + * Description:
2412     + * Adds the specified element to the end of the specified hlist_nulls,
2413     + * while permitting racing traversals. NOTE: tail insertion requires
2414     + * list traversal.
2415     + *
2416     + * The caller must take whatever precautions are necessary
2417     + * (such as holding appropriate locks) to avoid racing
2418     + * with another list-mutation primitive, such as hlist_nulls_add_head_rcu()
2419     + * or hlist_nulls_del_rcu(), running on this same list.
2420     + * However, it is perfectly legal to run concurrently with
2421     + * the _rcu list-traversal primitives, such as
2422     + * hlist_nulls_for_each_entry_rcu(), used to prevent memory-consistency
2423     + * problems on Alpha CPUs. Regardless of the type of CPU, the
2424     + * list-traversal primitive must be guarded by rcu_read_lock().
2425     + */
2426     +static inline void hlist_nulls_add_tail_rcu(struct hlist_nulls_node *n,
2427     + struct hlist_nulls_head *h)
2428     +{
2429     + struct hlist_nulls_node *i, *last = NULL;
2430     +
2431     + for (i = hlist_nulls_first_rcu(h); !is_a_nulls(i);
2432     + i = hlist_nulls_next_rcu(i))
2433     + last = i;
2434     +
2435     + if (last) {
2436     + n->next = last->next;
2437     + n->pprev = &last->next;
2438     + rcu_assign_pointer(hlist_nulls_next_rcu(last), n);
2439     + } else {
2440     + hlist_nulls_add_head_rcu(n, h);
2441     + }
2442     +}
2443     +
2444     /**
2445     * hlist_nulls_for_each_entry_rcu - iterate over rcu list of given type
2446     * @tpos: the type * to use as a loop cursor.
2447     diff --git a/include/linux/swap.h b/include/linux/swap.h
2448     index 5fa4aa4ddd05..b974a2106dd7 100644
2449     --- a/include/linux/swap.h
2450     +++ b/include/linux/swap.h
2451     @@ -418,7 +418,7 @@ extern sector_t swapdev_block(int, pgoff_t);
2452     extern int page_swapcount(struct page *);
2453     extern int swp_swapcount(swp_entry_t entry);
2454     extern struct swap_info_struct *page_swap_info(struct page *);
2455     -extern int reuse_swap_page(struct page *);
2456     +extern bool reuse_swap_page(struct page *, int *);
2457     extern int try_to_free_swap(struct page *);
2458     struct backing_dev_info;
2459    
2460     @@ -513,8 +513,8 @@ static inline int swp_swapcount(swp_entry_t entry)
2461     return 0;
2462     }
2463    
2464     -#define reuse_swap_page(page) \
2465     - (!PageTransCompound(page) && page_mapcount(page) == 1)
2466     +#define reuse_swap_page(page, total_mapcount) \
2467     + (page_trans_huge_mapcount(page, total_mapcount) == 1)
2468    
2469     static inline int try_to_free_swap(struct page *page)
2470     {
2471     diff --git a/include/net/codel.h b/include/net/codel.h
2472     index 267e70210061..d168aca115cc 100644
2473     --- a/include/net/codel.h
2474     +++ b/include/net/codel.h
2475     @@ -162,12 +162,14 @@ struct codel_vars {
2476     * struct codel_stats - contains codel shared variables and stats
2477     * @maxpacket: largest packet we've seen so far
2478     * @drop_count: temp count of dropped packets in dequeue()
2479     + * @drop_len: bytes of dropped packets in dequeue()
2480     * ecn_mark: number of packets we ECN marked instead of dropping
2481     * ce_mark: number of packets CE marked because sojourn time was above ce_threshold
2482     */
2483     struct codel_stats {
2484     u32 maxpacket;
2485     u32 drop_count;
2486     + u32 drop_len;
2487     u32 ecn_mark;
2488     u32 ce_mark;
2489     };
2490     @@ -308,6 +310,7 @@ static struct sk_buff *codel_dequeue(struct Qdisc *sch,
2491     vars->rec_inv_sqrt);
2492     goto end;
2493     }
2494     + stats->drop_len += qdisc_pkt_len(skb);
2495     qdisc_drop(skb, sch);
2496     stats->drop_count++;
2497     skb = dequeue_func(vars, sch);
2498     @@ -330,6 +333,7 @@ static struct sk_buff *codel_dequeue(struct Qdisc *sch,
2499     if (params->ecn && INET_ECN_set_ce(skb)) {
2500     stats->ecn_mark++;
2501     } else {
2502     + stats->drop_len += qdisc_pkt_len(skb);
2503     qdisc_drop(skb, sch);
2504     stats->drop_count++;
2505    
2506     diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
2507     index 636a362a0e03..e5bba897d206 100644
2508     --- a/include/net/sch_generic.h
2509     +++ b/include/net/sch_generic.h
2510     @@ -396,7 +396,8 @@ struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue,
2511     struct Qdisc *qdisc);
2512     void qdisc_reset(struct Qdisc *qdisc);
2513     void qdisc_destroy(struct Qdisc *qdisc);
2514     -void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n);
2515     +void qdisc_tree_reduce_backlog(struct Qdisc *qdisc, unsigned int n,
2516     + unsigned int len);
2517     struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
2518     const struct Qdisc_ops *ops);
2519     struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue,
2520     @@ -707,6 +708,23 @@ static inline void qdisc_reset_queue(struct Qdisc *sch)
2521     sch->qstats.backlog = 0;
2522     }
2523    
2524     +static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new,
2525     + struct Qdisc **pold)
2526     +{
2527     + struct Qdisc *old;
2528     +
2529     + sch_tree_lock(sch);
2530     + old = *pold;
2531     + *pold = new;
2532     + if (old != NULL) {
2533     + qdisc_tree_reduce_backlog(old, old->q.qlen, old->qstats.backlog);
2534     + qdisc_reset(old);
2535     + }
2536     + sch_tree_unlock(sch);
2537     +
2538     + return old;
2539     +}
2540     +
2541     static inline unsigned int __qdisc_queue_drop(struct Qdisc *sch,
2542     struct sk_buff_head *list)
2543     {
2544     diff --git a/include/net/sock.h b/include/net/sock.h
2545     index f5ea148853e2..3c688ca3456d 100644
2546     --- a/include/net/sock.h
2547     +++ b/include/net/sock.h
2548     @@ -630,7 +630,11 @@ static inline void sk_add_node_rcu(struct sock *sk, struct hlist_head *list)
2549    
2550     static inline void __sk_nulls_add_node_rcu(struct sock *sk, struct hlist_nulls_head *list)
2551     {
2552     - hlist_nulls_add_head_rcu(&sk->sk_nulls_node, list);
2553     + if (IS_ENABLED(CONFIG_IPV6) && sk->sk_reuseport &&
2554     + sk->sk_family == AF_INET6)
2555     + hlist_nulls_add_tail_rcu(&sk->sk_nulls_node, list);
2556     + else
2557     + hlist_nulls_add_head_rcu(&sk->sk_nulls_node, list);
2558     }
2559    
2560     static inline void sk_nulls_add_node_rcu(struct sock *sk, struct hlist_nulls_head *list)
2561     diff --git a/include/uapi/linux/if.h b/include/uapi/linux/if.h
2562     index 9cf2394f0bcf..752f5dc040a5 100644
2563     --- a/include/uapi/linux/if.h
2564     +++ b/include/uapi/linux/if.h
2565     @@ -19,14 +19,20 @@
2566     #ifndef _LINUX_IF_H
2567     #define _LINUX_IF_H
2568    
2569     +#include <linux/libc-compat.h> /* for compatibility with glibc */
2570     #include <linux/types.h> /* for "__kernel_caddr_t" et al */
2571     #include <linux/socket.h> /* for "struct sockaddr" et al */
2572     #include <linux/compiler.h> /* for "__user" et al */
2573    
2574     +#if __UAPI_DEF_IF_IFNAMSIZ
2575     #define IFNAMSIZ 16
2576     +#endif /* __UAPI_DEF_IF_IFNAMSIZ */
2577     #define IFALIASZ 256
2578     #include <linux/hdlc/ioctl.h>
2579    
2580     +/* For glibc compatibility. An empty enum does not compile. */
2581     +#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO != 0 && \
2582     + __UAPI_DEF_IF_NET_DEVICE_FLAGS != 0
2583     /**
2584     * enum net_device_flags - &struct net_device flags
2585     *
2586     @@ -68,6 +74,8 @@
2587     * @IFF_ECHO: echo sent packets. Volatile.
2588     */
2589     enum net_device_flags {
2590     +/* for compatibility with glibc net/if.h */
2591     +#if __UAPI_DEF_IF_NET_DEVICE_FLAGS
2592     IFF_UP = 1<<0, /* sysfs */
2593     IFF_BROADCAST = 1<<1, /* volatile */
2594     IFF_DEBUG = 1<<2, /* sysfs */
2595     @@ -84,11 +92,17 @@ enum net_device_flags {
2596     IFF_PORTSEL = 1<<13, /* sysfs */
2597     IFF_AUTOMEDIA = 1<<14, /* sysfs */
2598     IFF_DYNAMIC = 1<<15, /* sysfs */
2599     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS */
2600     +#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
2601     IFF_LOWER_UP = 1<<16, /* volatile */
2602     IFF_DORMANT = 1<<17, /* volatile */
2603     IFF_ECHO = 1<<18, /* volatile */
2604     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
2605     };
2606     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO != 0 && __UAPI_DEF_IF_NET_DEVICE_FLAGS != 0 */
2607    
2608     +/* for compatibility with glibc net/if.h */
2609     +#if __UAPI_DEF_IF_NET_DEVICE_FLAGS
2610     #define IFF_UP IFF_UP
2611     #define IFF_BROADCAST IFF_BROADCAST
2612     #define IFF_DEBUG IFF_DEBUG
2613     @@ -105,9 +119,13 @@ enum net_device_flags {
2614     #define IFF_PORTSEL IFF_PORTSEL
2615     #define IFF_AUTOMEDIA IFF_AUTOMEDIA
2616     #define IFF_DYNAMIC IFF_DYNAMIC
2617     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS */
2618     +
2619     +#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
2620     #define IFF_LOWER_UP IFF_LOWER_UP
2621     #define IFF_DORMANT IFF_DORMANT
2622     #define IFF_ECHO IFF_ECHO
2623     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
2624    
2625     #define IFF_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
2626     IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
2627     @@ -166,6 +184,8 @@ enum {
2628     * being very small might be worth keeping for clean configuration.
2629     */
2630    
2631     +/* for compatibility with glibc net/if.h */
2632     +#if __UAPI_DEF_IF_IFMAP
2633     struct ifmap {
2634     unsigned long mem_start;
2635     unsigned long mem_end;
2636     @@ -175,6 +195,7 @@ struct ifmap {
2637     unsigned char port;
2638     /* 3 bytes spare */
2639     };
2640     +#endif /* __UAPI_DEF_IF_IFMAP */
2641    
2642     struct if_settings {
2643     unsigned int type; /* Type of physical device or protocol */
2644     @@ -200,6 +221,8 @@ struct if_settings {
2645     * remainder may be interface specific.
2646     */
2647    
2648     +/* for compatibility with glibc net/if.h */
2649     +#if __UAPI_DEF_IF_IFREQ
2650     struct ifreq {
2651     #define IFHWADDRLEN 6
2652     union
2653     @@ -223,6 +246,7 @@ struct ifreq {
2654     struct if_settings ifru_settings;
2655     } ifr_ifru;
2656     };
2657     +#endif /* __UAPI_DEF_IF_IFREQ */
2658    
2659     #define ifr_name ifr_ifrn.ifrn_name /* interface name */
2660     #define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
2661     @@ -249,6 +273,8 @@ struct ifreq {
2662     * must know all networks accessible).
2663     */
2664    
2665     +/* for compatibility with glibc net/if.h */
2666     +#if __UAPI_DEF_IF_IFCONF
2667     struct ifconf {
2668     int ifc_len; /* size of buffer */
2669     union {
2670     @@ -256,6 +282,8 @@ struct ifconf {
2671     struct ifreq __user *ifcu_req;
2672     } ifc_ifcu;
2673     };
2674     +#endif /* __UAPI_DEF_IF_IFCONF */
2675     +
2676     #define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
2677     #define ifc_req ifc_ifcu.ifcu_req /* array of structures */
2678    
2679     diff --git a/include/uapi/linux/libc-compat.h b/include/uapi/linux/libc-compat.h
2680     index 7d024ceb075d..d5e38c73377c 100644
2681     --- a/include/uapi/linux/libc-compat.h
2682     +++ b/include/uapi/linux/libc-compat.h
2683     @@ -51,6 +51,40 @@
2684     /* We have included glibc headers... */
2685     #if defined(__GLIBC__)
2686    
2687     +/* Coordinate with glibc net/if.h header. */
2688     +#if defined(_NET_IF_H)
2689     +
2690     +/* GLIBC headers included first so don't define anything
2691     + * that would already be defined. */
2692     +
2693     +#define __UAPI_DEF_IF_IFCONF 0
2694     +#define __UAPI_DEF_IF_IFMAP 0
2695     +#define __UAPI_DEF_IF_IFNAMSIZ 0
2696     +#define __UAPI_DEF_IF_IFREQ 0
2697     +/* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */
2698     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 0
2699     +/* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
2700     +#ifndef __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
2701     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
2702     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
2703     +
2704     +#else /* _NET_IF_H */
2705     +
2706     +/* Linux headers included first, and we must define everything
2707     + * we need. The expectation is that glibc will check the
2708     + * __UAPI_DEF_* defines and adjust appropriately. */
2709     +
2710     +#define __UAPI_DEF_IF_IFCONF 1
2711     +#define __UAPI_DEF_IF_IFMAP 1
2712     +#define __UAPI_DEF_IF_IFNAMSIZ 1
2713     +#define __UAPI_DEF_IF_IFREQ 1
2714     +/* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */
2715     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1
2716     +/* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
2717     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
2718     +
2719     +#endif /* _NET_IF_H */
2720     +
2721     /* Coordinate with glibc netinet/in.h header. */
2722     #if defined(_NETINET_IN_H)
2723    
2724     @@ -117,6 +151,16 @@
2725     * that we need. */
2726     #else /* !defined(__GLIBC__) */
2727    
2728     +/* Definitions for if.h */
2729     +#define __UAPI_DEF_IF_IFCONF 1
2730     +#define __UAPI_DEF_IF_IFMAP 1
2731     +#define __UAPI_DEF_IF_IFNAMSIZ 1
2732     +#define __UAPI_DEF_IF_IFREQ 1
2733     +/* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */
2734     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1
2735     +/* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
2736     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
2737     +
2738     /* Definitions for in.h */
2739     #define __UAPI_DEF_IN_ADDR 1
2740     #define __UAPI_DEF_IN_IPPROTO 1
2741     diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c
2742     index f2ece3c174a5..8f94ca1860cf 100644
2743     --- a/kernel/bpf/inode.c
2744     +++ b/kernel/bpf/inode.c
2745     @@ -31,10 +31,10 @@ static void *bpf_any_get(void *raw, enum bpf_type type)
2746     {
2747     switch (type) {
2748     case BPF_TYPE_PROG:
2749     - atomic_inc(&((struct bpf_prog *)raw)->aux->refcnt);
2750     + raw = bpf_prog_inc(raw);
2751     break;
2752     case BPF_TYPE_MAP:
2753     - bpf_map_inc(raw, true);
2754     + raw = bpf_map_inc(raw, true);
2755     break;
2756     default:
2757     WARN_ON_ONCE(1);
2758     @@ -297,7 +297,8 @@ static void *bpf_obj_do_get(const struct filename *pathname,
2759     goto out;
2760    
2761     raw = bpf_any_get(inode->i_private, *type);
2762     - touch_atime(&path);
2763     + if (!IS_ERR(raw))
2764     + touch_atime(&path);
2765    
2766     path_put(&path);
2767     return raw;
2768     diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
2769     index 637397059f76..aa5f39772ac4 100644
2770     --- a/kernel/bpf/syscall.c
2771     +++ b/kernel/bpf/syscall.c
2772     @@ -201,11 +201,18 @@ struct bpf_map *__bpf_map_get(struct fd f)
2773     return f.file->private_data;
2774     }
2775    
2776     -void bpf_map_inc(struct bpf_map *map, bool uref)
2777     +/* prog's and map's refcnt limit */
2778     +#define BPF_MAX_REFCNT 32768
2779     +
2780     +struct bpf_map *bpf_map_inc(struct bpf_map *map, bool uref)
2781     {
2782     - atomic_inc(&map->refcnt);
2783     + if (atomic_inc_return(&map->refcnt) > BPF_MAX_REFCNT) {
2784     + atomic_dec(&map->refcnt);
2785     + return ERR_PTR(-EBUSY);
2786     + }
2787     if (uref)
2788     atomic_inc(&map->usercnt);
2789     + return map;
2790     }
2791    
2792     struct bpf_map *bpf_map_get_with_uref(u32 ufd)
2793     @@ -217,7 +224,7 @@ struct bpf_map *bpf_map_get_with_uref(u32 ufd)
2794     if (IS_ERR(map))
2795     return map;
2796    
2797     - bpf_map_inc(map, true);
2798     + map = bpf_map_inc(map, true);
2799     fdput(f);
2800    
2801     return map;
2802     @@ -600,6 +607,15 @@ static struct bpf_prog *__bpf_prog_get(struct fd f)
2803     return f.file->private_data;
2804     }
2805    
2806     +struct bpf_prog *bpf_prog_inc(struct bpf_prog *prog)
2807     +{
2808     + if (atomic_inc_return(&prog->aux->refcnt) > BPF_MAX_REFCNT) {
2809     + atomic_dec(&prog->aux->refcnt);
2810     + return ERR_PTR(-EBUSY);
2811     + }
2812     + return prog;
2813     +}
2814     +
2815     /* called by sockets/tracing/seccomp before attaching program to an event
2816     * pairs with bpf_prog_put()
2817     */
2818     @@ -612,7 +628,7 @@ struct bpf_prog *bpf_prog_get(u32 ufd)
2819     if (IS_ERR(prog))
2820     return prog;
2821    
2822     - atomic_inc(&prog->aux->refcnt);
2823     + prog = bpf_prog_inc(prog);
2824     fdput(f);
2825    
2826     return prog;
2827     diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
2828     index 2e7f7ab739e4..2cbfba78d3db 100644
2829     --- a/kernel/bpf/verifier.c
2830     +++ b/kernel/bpf/verifier.c
2831     @@ -239,15 +239,6 @@ static const char * const reg_type_str[] = {
2832     [CONST_IMM] = "imm",
2833     };
2834    
2835     -static const struct {
2836     - int map_type;
2837     - int func_id;
2838     -} func_limit[] = {
2839     - {BPF_MAP_TYPE_PROG_ARRAY, BPF_FUNC_tail_call},
2840     - {BPF_MAP_TYPE_PERF_EVENT_ARRAY, BPF_FUNC_perf_event_read},
2841     - {BPF_MAP_TYPE_PERF_EVENT_ARRAY, BPF_FUNC_perf_event_output},
2842     -};
2843     -
2844     static void print_verifier_state(struct verifier_env *env)
2845     {
2846     enum bpf_reg_type t;
2847     @@ -898,24 +889,44 @@ static int check_func_arg(struct verifier_env *env, u32 regno,
2848    
2849     static int check_map_func_compatibility(struct bpf_map *map, int func_id)
2850     {
2851     - bool bool_map, bool_func;
2852     - int i;
2853     -
2854     if (!map)
2855     return 0;
2856    
2857     - for (i = 0; i < ARRAY_SIZE(func_limit); i++) {
2858     - bool_map = (map->map_type == func_limit[i].map_type);
2859     - bool_func = (func_id == func_limit[i].func_id);
2860     - /* only when map & func pair match it can continue.
2861     - * don't allow any other map type to be passed into
2862     - * the special func;
2863     - */
2864     - if (bool_func && bool_map != bool_func)
2865     - return -EINVAL;
2866     + /* We need a two way check, first is from map perspective ... */
2867     + switch (map->map_type) {
2868     + case BPF_MAP_TYPE_PROG_ARRAY:
2869     + if (func_id != BPF_FUNC_tail_call)
2870     + goto error;
2871     + break;
2872     + case BPF_MAP_TYPE_PERF_EVENT_ARRAY:
2873     + if (func_id != BPF_FUNC_perf_event_read &&
2874     + func_id != BPF_FUNC_perf_event_output)
2875     + goto error;
2876     + break;
2877     + default:
2878     + break;
2879     + }
2880     +
2881     + /* ... and second from the function itself. */
2882     + switch (func_id) {
2883     + case BPF_FUNC_tail_call:
2884     + if (map->map_type != BPF_MAP_TYPE_PROG_ARRAY)
2885     + goto error;
2886     + break;
2887     + case BPF_FUNC_perf_event_read:
2888     + case BPF_FUNC_perf_event_output:
2889     + if (map->map_type != BPF_MAP_TYPE_PERF_EVENT_ARRAY)
2890     + goto error;
2891     + break;
2892     + default:
2893     + break;
2894     }
2895    
2896     return 0;
2897     +error:
2898     + verbose("cannot pass map_type %d into func %d\n",
2899     + map->map_type, func_id);
2900     + return -EINVAL;
2901     }
2902    
2903     static int check_call(struct verifier_env *env, int func_id)
2904     @@ -1348,6 +1359,7 @@ static int check_ld_abs(struct verifier_env *env, struct bpf_insn *insn)
2905     }
2906    
2907     if (insn->dst_reg != BPF_REG_0 || insn->off != 0 ||
2908     + BPF_SIZE(insn->code) == BPF_DW ||
2909     (mode == BPF_ABS && insn->src_reg != BPF_REG_0)) {
2910     verbose("BPF_LD_ABS uses reserved fields\n");
2911     return -EINVAL;
2912     @@ -2003,7 +2015,6 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env)
2913     if (IS_ERR(map)) {
2914     verbose("fd %d is not pointing to valid bpf_map\n",
2915     insn->imm);
2916     - fdput(f);
2917     return PTR_ERR(map);
2918     }
2919    
2920     @@ -2023,15 +2034,18 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env)
2921     return -E2BIG;
2922     }
2923    
2924     - /* remember this map */
2925     - env->used_maps[env->used_map_cnt++] = map;
2926     -
2927     /* hold the map. If the program is rejected by verifier,
2928     * the map will be released by release_maps() or it
2929     * will be used by the valid program until it's unloaded
2930     * and all maps are released in free_bpf_prog_info()
2931     */
2932     - bpf_map_inc(map, false);
2933     + map = bpf_map_inc(map, false);
2934     + if (IS_ERR(map)) {
2935     + fdput(f);
2936     + return PTR_ERR(map);
2937     + }
2938     + env->used_maps[env->used_map_cnt++] = map;
2939     +
2940     fdput(f);
2941     next_insn:
2942     insn++;
2943     diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
2944     index 1faad2cfdb9e..287201a5d12f 100644
2945     --- a/kernel/events/ring_buffer.c
2946     +++ b/kernel/events/ring_buffer.c
2947     @@ -347,6 +347,7 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size,
2948     bool truncated)
2949     {
2950     struct ring_buffer *rb = handle->rb;
2951     + bool wakeup = truncated;
2952     unsigned long aux_head;
2953     u64 flags = 0;
2954    
2955     @@ -375,9 +376,16 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size,
2956     aux_head = rb->user_page->aux_head = local_read(&rb->aux_head);
2957    
2958     if (aux_head - local_read(&rb->aux_wakeup) >= rb->aux_watermark) {
2959     - perf_output_wakeup(handle);
2960     + wakeup = true;
2961     local_add(rb->aux_watermark, &rb->aux_wakeup);
2962     }
2963     +
2964     + if (wakeup) {
2965     + if (truncated)
2966     + handle->event->pending_disable = 1;
2967     + perf_output_wakeup(handle);
2968     + }
2969     +
2970     handle->event = NULL;
2971    
2972     local_set(&rb->aux_nest, 0);
2973     diff --git a/kernel/workqueue.c b/kernel/workqueue.c
2974     index 9e82d0450fad..f48c80e4ba75 100644
2975     --- a/kernel/workqueue.c
2976     +++ b/kernel/workqueue.c
2977     @@ -4556,6 +4556,17 @@ static void rebind_workers(struct worker_pool *pool)
2978     pool->attrs->cpumask) < 0);
2979    
2980     spin_lock_irq(&pool->lock);
2981     +
2982     + /*
2983     + * XXX: CPU hotplug notifiers are weird and can call DOWN_FAILED
2984     + * w/o preceding DOWN_PREPARE. Work around it. CPU hotplug is
2985     + * being reworked and this can go away in time.
2986     + */
2987     + if (!(pool->flags & POOL_DISASSOCIATED)) {
2988     + spin_unlock_irq(&pool->lock);
2989     + return;
2990     + }
2991     +
2992     pool->flags &= ~POOL_DISASSOCIATED;
2993    
2994     for_each_pool_worker(worker, pool) {
2995     diff --git a/mm/huge_memory.c b/mm/huge_memory.c
2996     index a7db0a2db1ab..a82a87b3f9c6 100644
2997     --- a/mm/huge_memory.c
2998     +++ b/mm/huge_memory.c
2999     @@ -1257,15 +1257,9 @@ int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
3000     VM_BUG_ON_PAGE(!PageCompound(page) || !PageHead(page), page);
3001     /*
3002     * We can only reuse the page if nobody else maps the huge page or it's
3003     - * part. We can do it by checking page_mapcount() on each sub-page, but
3004     - * it's expensive.
3005     - * The cheaper way is to check page_count() to be equal 1: every
3006     - * mapcount takes page reference reference, so this way we can
3007     - * guarantee, that the PMD is the only mapping.
3008     - * This can give false negative if somebody pinned the page, but that's
3009     - * fine.
3010     + * part.
3011     */
3012     - if (page_mapcount(page) == 1 && page_count(page) == 1) {
3013     + if (page_trans_huge_mapcount(page, NULL) == 1) {
3014     pmd_t entry;
3015     entry = pmd_mkyoung(orig_pmd);
3016     entry = maybe_pmd_mkwrite(pmd_mkdirty(entry), vma);
3017     @@ -2038,7 +2032,8 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma,
3018     if (pte_write(pteval)) {
3019     writable = true;
3020     } else {
3021     - if (PageSwapCache(page) && !reuse_swap_page(page)) {
3022     + if (PageSwapCache(page) &&
3023     + !reuse_swap_page(page, NULL)) {
3024     unlock_page(page);
3025     result = SCAN_SWAP_CACHE_PAGE;
3026     goto out;
3027     @@ -3338,6 +3333,64 @@ int total_mapcount(struct page *page)
3028     }
3029    
3030     /*
3031     + * This calculates accurately how many mappings a transparent hugepage
3032     + * has (unlike page_mapcount() which isn't fully accurate). This full
3033     + * accuracy is primarily needed to know if copy-on-write faults can
3034     + * reuse the page and change the mapping to read-write instead of
3035     + * copying them. At the same time this returns the total_mapcount too.
3036     + *
3037     + * The function returns the highest mapcount any one of the subpages
3038     + * has. If the return value is one, even if different processes are
3039     + * mapping different subpages of the transparent hugepage, they can
3040     + * all reuse it, because each process is reusing a different subpage.
3041     + *
3042     + * The total_mapcount is instead counting all virtual mappings of the
3043     + * subpages. If the total_mapcount is equal to "one", it tells the
3044     + * caller all mappings belong to the same "mm" and in turn the
3045     + * anon_vma of the transparent hugepage can become the vma->anon_vma
3046     + * local one as no other process may be mapping any of the subpages.
3047     + *
3048     + * It would be more accurate to replace page_mapcount() with
3049     + * page_trans_huge_mapcount(), however we only use
3050     + * page_trans_huge_mapcount() in the copy-on-write faults where we
3051     + * need full accuracy to avoid breaking page pinning, because
3052     + * page_trans_huge_mapcount() is slower than page_mapcount().
3053     + */
3054     +int page_trans_huge_mapcount(struct page *page, int *total_mapcount)
3055     +{
3056     + int i, ret, _total_mapcount, mapcount;
3057     +
3058     + /* hugetlbfs shouldn't call it */
3059     + VM_BUG_ON_PAGE(PageHuge(page), page);
3060     +
3061     + if (likely(!PageTransCompound(page))) {
3062     + mapcount = atomic_read(&page->_mapcount) + 1;
3063     + if (total_mapcount)
3064     + *total_mapcount = mapcount;
3065     + return mapcount;
3066     + }
3067     +
3068     + page = compound_head(page);
3069     +
3070     + _total_mapcount = ret = 0;
3071     + for (i = 0; i < HPAGE_PMD_NR; i++) {
3072     + mapcount = atomic_read(&page[i]._mapcount) + 1;
3073     + ret = max(ret, mapcount);
3074     + _total_mapcount += mapcount;
3075     + }
3076     + if (PageDoubleMap(page)) {
3077     + ret -= 1;
3078     + _total_mapcount -= HPAGE_PMD_NR;
3079     + }
3080     + mapcount = compound_mapcount(page);
3081     + ret += mapcount;
3082     + _total_mapcount += mapcount;
3083     + if (total_mapcount)
3084     + *total_mapcount = _total_mapcount;
3085     + return ret;
3086     +}
3087     +
3088     +/*
3089     * This function splits huge page into normal pages. @page can point to any
3090     * subpage of huge page to split. Split doesn't change the position of @page.
3091     *
3092     diff --git a/mm/memory.c b/mm/memory.c
3093     index 3345dcf862cf..c1aa0e4b4096 100644
3094     --- a/mm/memory.c
3095     +++ b/mm/memory.c
3096     @@ -2357,6 +2357,7 @@ static int do_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
3097     * not dirty accountable.
3098     */
3099     if (PageAnon(old_page) && !PageKsm(old_page)) {
3100     + int total_mapcount;
3101     if (!trylock_page(old_page)) {
3102     page_cache_get(old_page);
3103     pte_unmap_unlock(page_table, ptl);
3104     @@ -2371,13 +2372,18 @@ static int do_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
3105     }
3106     page_cache_release(old_page);
3107     }
3108     - if (reuse_swap_page(old_page)) {
3109     - /*
3110     - * The page is all ours. Move it to our anon_vma so
3111     - * the rmap code will not search our parent or siblings.
3112     - * Protected against the rmap code by the page lock.
3113     - */
3114     - page_move_anon_rmap(old_page, vma, address);
3115     + if (reuse_swap_page(old_page, &total_mapcount)) {
3116     + if (total_mapcount == 1) {
3117     + /*
3118     + * The page is all ours. Move it to
3119     + * our anon_vma so the rmap code will
3120     + * not search our parent or siblings.
3121     + * Protected against the rmap code by
3122     + * the page lock.
3123     + */
3124     + page_move_anon_rmap(compound_head(old_page),
3125     + vma, address);
3126     + }
3127     unlock_page(old_page);
3128     return wp_page_reuse(mm, vma, address, page_table, ptl,
3129     orig_pte, old_page, 0, 0);
3130     @@ -2602,7 +2608,7 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
3131     inc_mm_counter_fast(mm, MM_ANONPAGES);
3132     dec_mm_counter_fast(mm, MM_SWAPENTS);
3133     pte = mk_pte(page, vma->vm_page_prot);
3134     - if ((flags & FAULT_FLAG_WRITE) && reuse_swap_page(page)) {
3135     + if ((flags & FAULT_FLAG_WRITE) && reuse_swap_page(page, NULL)) {
3136     pte = maybe_mkwrite(pte_mkdirty(pte), vma);
3137     flags &= ~FAULT_FLAG_WRITE;
3138     ret |= VM_FAULT_WRITE;
3139     diff --git a/mm/swapfile.c b/mm/swapfile.c
3140     index d2c37365e2d6..954fd8f72b79 100644
3141     --- a/mm/swapfile.c
3142     +++ b/mm/swapfile.c
3143     @@ -916,18 +916,19 @@ out:
3144     * to it. And as a side-effect, free up its swap: because the old content
3145     * on disk will never be read, and seeking back there to write new content
3146     * later would only waste time away from clustering.
3147     + *
3148     + * NOTE: total_mapcount should not be relied upon by the caller if
3149     + * reuse_swap_page() returns false, but it may be always overwritten
3150     + * (see the other implementation for CONFIG_SWAP=n).
3151     */
3152     -int reuse_swap_page(struct page *page)
3153     +bool reuse_swap_page(struct page *page, int *total_mapcount)
3154     {
3155     int count;
3156    
3157     VM_BUG_ON_PAGE(!PageLocked(page), page);
3158     if (unlikely(PageKsm(page)))
3159     - return 0;
3160     - /* The page is part of THP and cannot be reused */
3161     - if (PageTransCompound(page))
3162     - return 0;
3163     - count = page_mapcount(page);
3164     + return false;
3165     + count = page_trans_huge_mapcount(page, total_mapcount);
3166     if (count <= 1 && PageSwapCache(page)) {
3167     count += page_swapcount(page);
3168     if (count == 1 && !PageWriteback(page)) {
3169     diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
3170     index 2d7c4c11fc63..336149ffd07d 100644
3171     --- a/mm/zsmalloc.c
3172     +++ b/mm/zsmalloc.c
3173     @@ -1732,10 +1732,13 @@ static struct page *isolate_source_page(struct size_class *class)
3174     static unsigned long zs_can_compact(struct size_class *class)
3175     {
3176     unsigned long obj_wasted;
3177     + unsigned long obj_allocated = zs_stat_get(class, OBJ_ALLOCATED);
3178     + unsigned long obj_used = zs_stat_get(class, OBJ_USED);
3179    
3180     - obj_wasted = zs_stat_get(class, OBJ_ALLOCATED) -
3181     - zs_stat_get(class, OBJ_USED);
3182     + if (obj_allocated <= obj_used)
3183     + return 0;
3184    
3185     + obj_wasted = obj_allocated - obj_used;
3186     obj_wasted /= get_maxobj_per_zspage(class->size,
3187     class->pages_per_zspage);
3188    
3189     diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c
3190     index 263b4de4de57..60a3dbfca8a1 100644
3191     --- a/net/bridge/br_ioctl.c
3192     +++ b/net/bridge/br_ioctl.c
3193     @@ -21,18 +21,19 @@
3194     #include <asm/uaccess.h>
3195     #include "br_private.h"
3196    
3197     -/* called with RTNL */
3198     static int get_bridge_ifindices(struct net *net, int *indices, int num)
3199     {
3200     struct net_device *dev;
3201     int i = 0;
3202    
3203     - for_each_netdev(net, dev) {
3204     + rcu_read_lock();
3205     + for_each_netdev_rcu(net, dev) {
3206     if (i >= num)
3207     break;
3208     if (dev->priv_flags & IFF_EBRIDGE)
3209     indices[i++] = dev->ifindex;
3210     }
3211     + rcu_read_unlock();
3212    
3213     return i;
3214     }
3215     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
3216     index 03661d97463c..ea9893743a0f 100644
3217     --- a/net/bridge/br_multicast.c
3218     +++ b/net/bridge/br_multicast.c
3219     @@ -1270,6 +1270,7 @@ static int br_ip4_multicast_query(struct net_bridge *br,
3220     struct br_ip saddr;
3221     unsigned long max_delay;
3222     unsigned long now = jiffies;
3223     + unsigned int offset = skb_transport_offset(skb);
3224     __be32 group;
3225     int err = 0;
3226    
3227     @@ -1280,14 +1281,14 @@ static int br_ip4_multicast_query(struct net_bridge *br,
3228    
3229     group = ih->group;
3230    
3231     - if (skb->len == sizeof(*ih)) {
3232     + if (skb->len == offset + sizeof(*ih)) {
3233     max_delay = ih->code * (HZ / IGMP_TIMER_SCALE);
3234    
3235     if (!max_delay) {
3236     max_delay = 10 * HZ;
3237     group = 0;
3238     }
3239     - } else if (skb->len >= sizeof(*ih3)) {
3240     + } else if (skb->len >= offset + sizeof(*ih3)) {
3241     ih3 = igmpv3_query_hdr(skb);
3242     if (ih3->nsrcs)
3243     goto out;
3244     @@ -1348,6 +1349,7 @@ static int br_ip6_multicast_query(struct net_bridge *br,
3245     struct br_ip saddr;
3246     unsigned long max_delay;
3247     unsigned long now = jiffies;
3248     + unsigned int offset = skb_transport_offset(skb);
3249     const struct in6_addr *group = NULL;
3250     bool is_general_query;
3251     int err = 0;
3252     @@ -1357,8 +1359,8 @@ static int br_ip6_multicast_query(struct net_bridge *br,
3253     (port && port->state == BR_STATE_DISABLED))
3254     goto out;
3255    
3256     - if (skb->len == sizeof(*mld)) {
3257     - if (!pskb_may_pull(skb, sizeof(*mld))) {
3258     + if (skb->len == offset + sizeof(*mld)) {
3259     + if (!pskb_may_pull(skb, offset + sizeof(*mld))) {
3260     err = -EINVAL;
3261     goto out;
3262     }
3263     @@ -1367,7 +1369,7 @@ static int br_ip6_multicast_query(struct net_bridge *br,
3264     if (max_delay)
3265     group = &mld->mld_mca;
3266     } else {
3267     - if (!pskb_may_pull(skb, sizeof(*mld2q))) {
3268     + if (!pskb_may_pull(skb, offset + sizeof(*mld2q))) {
3269     err = -EINVAL;
3270     goto out;
3271     }
3272     diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
3273     index 215e6137f6ff..482c3717a45e 100644
3274     --- a/net/core/rtnetlink.c
3275     +++ b/net/core/rtnetlink.c
3276     @@ -1176,14 +1176,16 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
3277    
3278     static int rtnl_fill_link_ifmap(struct sk_buff *skb, struct net_device *dev)
3279     {
3280     - struct rtnl_link_ifmap map = {
3281     - .mem_start = dev->mem_start,
3282     - .mem_end = dev->mem_end,
3283     - .base_addr = dev->base_addr,
3284     - .irq = dev->irq,
3285     - .dma = dev->dma,
3286     - .port = dev->if_port,
3287     - };
3288     + struct rtnl_link_ifmap map;
3289     +
3290     + memset(&map, 0, sizeof(map));
3291     + map.mem_start = dev->mem_start;
3292     + map.mem_end = dev->mem_end;
3293     + map.base_addr = dev->base_addr;
3294     + map.irq = dev->irq;
3295     + map.dma = dev->dma;
3296     + map.port = dev->if_port;
3297     +
3298     if (nla_put(skb, IFLA_MAP, sizeof(map), &map))
3299     return -EMSGSIZE;
3300    
3301     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
3302     index 8616d1147c93..9835d9a8a7a4 100644
3303     --- a/net/core/skbuff.c
3304     +++ b/net/core/skbuff.c
3305     @@ -4427,15 +4427,16 @@ int skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci)
3306     __skb_push(skb, offset);
3307     err = __vlan_insert_tag(skb, skb->vlan_proto,
3308     skb_vlan_tag_get(skb));
3309     - if (err)
3310     + if (err) {
3311     + __skb_pull(skb, offset);
3312     return err;
3313     + }
3314     +
3315     skb->protocol = skb->vlan_proto;
3316     skb->mac_len += VLAN_HLEN;
3317     - __skb_pull(skb, offset);
3318    
3319     - if (skb->ip_summed == CHECKSUM_COMPLETE)
3320     - skb->csum = csum_add(skb->csum, csum_partial(skb->data
3321     - + (2 * ETH_ALEN), VLAN_HLEN, 0));
3322     + skb_postpush_rcsum(skb, skb->data + (2 * ETH_ALEN), VLAN_HLEN);
3323     + __skb_pull(skb, offset);
3324     }
3325     __vlan_hwaccel_put_tag(skb, vlan_proto, vlan_tci);
3326     return 0;
3327     diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
3328     index 607a14f20d88..b1dc096d22f8 100644
3329     --- a/net/decnet/dn_route.c
3330     +++ b/net/decnet/dn_route.c
3331     @@ -1034,10 +1034,13 @@ source_ok:
3332     if (!fld.daddr) {
3333     fld.daddr = fld.saddr;
3334    
3335     - err = -EADDRNOTAVAIL;
3336     if (dev_out)
3337     dev_put(dev_out);
3338     + err = -EINVAL;
3339     dev_out = init_net.loopback_dev;
3340     + if (!dev_out->dn_ptr)
3341     + goto out;
3342     + err = -EADDRNOTAVAIL;
3343     dev_hold(dev_out);
3344     if (!fld.daddr) {
3345     fld.daddr =
3346     @@ -1110,6 +1113,8 @@ source_ok:
3347     if (dev_out == NULL)
3348     goto out;
3349     dn_db = rcu_dereference_raw(dev_out->dn_ptr);
3350     + if (!dn_db)
3351     + goto e_inval;
3352     /* Possible improvement - check all devices for local addr */
3353     if (dn_dev_islocal(dev_out, fld.daddr)) {
3354     dev_put(dev_out);
3355     @@ -1151,6 +1156,8 @@ select_source:
3356     dev_put(dev_out);
3357     dev_out = init_net.loopback_dev;
3358     dev_hold(dev_out);
3359     + if (!dev_out->dn_ptr)
3360     + goto e_inval;
3361     fld.flowidn_oif = dev_out->ifindex;
3362     if (res.fi)
3363     dn_fib_info_put(res.fi);
3364     diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
3365     index 8a9246deccfe..63566ec54794 100644
3366     --- a/net/ipv4/fib_frontend.c
3367     +++ b/net/ipv4/fib_frontend.c
3368     @@ -904,7 +904,11 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim)
3369     if (ifa->ifa_flags & IFA_F_SECONDARY) {
3370     prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask);
3371     if (!prim) {
3372     - pr_warn("%s: bug: prim == NULL\n", __func__);
3373     + /* if the device has been deleted, we don't perform
3374     + * address promotion
3375     + */
3376     + if (!in_dev->dead)
3377     + pr_warn("%s: bug: prim == NULL\n", __func__);
3378     return;
3379     }
3380     if (iprim && iprim != prim) {
3381     diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
3382     index d97268e8ff10..2b68418c7198 100644
3383     --- a/net/ipv4/fib_semantics.c
3384     +++ b/net/ipv4/fib_semantics.c
3385     @@ -975,6 +975,8 @@ fib_convert_metrics(struct fib_info *fi, const struct fib_config *cfg)
3386     val = 65535 - 40;
3387     if (type == RTAX_MTU && val > 65535 - 15)
3388     val = 65535 - 15;
3389     + if (type == RTAX_HOPLIMIT && val > 255)
3390     + val = 255;
3391     if (type == RTAX_FEATURES && (val & ~RTAX_FEATURE_MASK))
3392     return -EINVAL;
3393     fi->fib_metrics[type - 1] = val;
3394     diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
3395     index 41ba68de46d8..d0c1e7766214 100644
3396     --- a/net/ipv4/ip_gre.c
3397     +++ b/net/ipv4/ip_gre.c
3398     @@ -179,6 +179,7 @@ static __be16 tnl_flags_to_gre_flags(__be16 tflags)
3399     return flags;
3400     }
3401    
3402     +/* Fills in tpi and returns header length to be pulled. */
3403     static int parse_gre_header(struct sk_buff *skb, struct tnl_ptk_info *tpi,
3404     bool *csum_err)
3405     {
3406     @@ -238,7 +239,7 @@ static int parse_gre_header(struct sk_buff *skb, struct tnl_ptk_info *tpi,
3407     return -EINVAL;
3408     }
3409     }
3410     - return iptunnel_pull_header(skb, hdr_len, tpi->proto);
3411     + return hdr_len;
3412     }
3413    
3414     static void ipgre_err(struct sk_buff *skb, u32 info,
3415     @@ -341,7 +342,7 @@ static void gre_err(struct sk_buff *skb, u32 info)
3416     struct tnl_ptk_info tpi;
3417     bool csum_err = false;
3418    
3419     - if (parse_gre_header(skb, &tpi, &csum_err)) {
3420     + if (parse_gre_header(skb, &tpi, &csum_err) < 0) {
3421     if (!csum_err) /* ignore csum errors. */
3422     return;
3423     }
3424     @@ -419,6 +420,7 @@ static int gre_rcv(struct sk_buff *skb)
3425     {
3426     struct tnl_ptk_info tpi;
3427     bool csum_err = false;
3428     + int hdr_len;
3429    
3430     #ifdef CONFIG_NET_IPGRE_BROADCAST
3431     if (ipv4_is_multicast(ip_hdr(skb)->daddr)) {
3432     @@ -428,7 +430,10 @@ static int gre_rcv(struct sk_buff *skb)
3433     }
3434     #endif
3435    
3436     - if (parse_gre_header(skb, &tpi, &csum_err) < 0)
3437     + hdr_len = parse_gre_header(skb, &tpi, &csum_err);
3438     + if (hdr_len < 0)
3439     + goto drop;
3440     + if (iptunnel_pull_header(skb, hdr_len, tpi.proto) < 0)
3441     goto drop;
3442    
3443     if (ipgre_rcv(skb, &tpi) == PACKET_RCVD)
3444     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
3445     index 02c62299d717..b050cf980a57 100644
3446     --- a/net/ipv4/route.c
3447     +++ b/net/ipv4/route.c
3448     @@ -2045,6 +2045,18 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
3449     */
3450     if (fi && res->prefixlen < 4)
3451     fi = NULL;
3452     + } else if ((type == RTN_LOCAL) && (orig_oif != 0) &&
3453     + (orig_oif != dev_out->ifindex)) {
3454     + /* For local routes that require a particular output interface
3455     + * we do not want to cache the result. Caching the result
3456     + * causes incorrect behaviour when there are multiple source
3457     + * addresses on the interface, the end result being that if the
3458     + * intended recipient is waiting on that interface for the
3459     + * packet he won't receive it because it will be delivered on
3460     + * the loopback interface and the IP_PKTINFO ipi_ifindex will
3461     + * be set to the loopback interface as well.
3462     + */
3463     + fi = NULL;
3464     }
3465    
3466     fnhe = NULL;
3467     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
3468     index fda379cd600d..b6876f2f4cf2 100644
3469     --- a/net/ipv4/tcp_output.c
3470     +++ b/net/ipv4/tcp_output.c
3471     @@ -2625,8 +2625,10 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
3472     */
3473     if (unlikely((NET_IP_ALIGN && ((unsigned long)skb->data & 3)) ||
3474     skb_headroom(skb) >= 0xFFFF)) {
3475     - struct sk_buff *nskb = __pskb_copy(skb, MAX_TCP_HEADER,
3476     - GFP_ATOMIC);
3477     + struct sk_buff *nskb;
3478     +
3479     + skb_mstamp_get(&skb->skb_mstamp);
3480     + nskb = __pskb_copy(skb, MAX_TCP_HEADER, GFP_ATOMIC);
3481     err = nskb ? tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC) :
3482     -ENOBUFS;
3483     } else {
3484     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
3485     index eb8933bc0e6e..56218ff388c7 100644
3486     --- a/net/ipv4/udp.c
3487     +++ b/net/ipv4/udp.c
3488     @@ -339,8 +339,13 @@ found:
3489    
3490     hslot2 = udp_hashslot2(udptable, udp_sk(sk)->udp_portaddr_hash);
3491     spin_lock(&hslot2->lock);
3492     - hlist_nulls_add_head_rcu(&udp_sk(sk)->udp_portaddr_node,
3493     - &hslot2->head);
3494     + if (IS_ENABLED(CONFIG_IPV6) && sk->sk_reuseport &&
3495     + sk->sk_family == AF_INET6)
3496     + hlist_nulls_add_tail_rcu(&udp_sk(sk)->udp_portaddr_node,
3497     + &hslot2->head);
3498     + else
3499     + hlist_nulls_add_head_rcu(&udp_sk(sk)->udp_portaddr_node,
3500     + &hslot2->head);
3501     hslot2->count++;
3502     spin_unlock(&hslot2->lock);
3503     }
3504     diff --git a/net/ipv6/ila/ila_lwt.c b/net/ipv6/ila/ila_lwt.c
3505     index 2ae3c4fd8aab..41f18de5dcc2 100644
3506     --- a/net/ipv6/ila/ila_lwt.c
3507     +++ b/net/ipv6/ila/ila_lwt.c
3508     @@ -120,8 +120,7 @@ nla_put_failure:
3509    
3510     static int ila_encap_nlsize(struct lwtunnel_state *lwtstate)
3511     {
3512     - /* No encapsulation overhead */
3513     - return 0;
3514     + return nla_total_size(sizeof(u64)); /* ILA_ATTR_LOCATOR */
3515     }
3516    
3517     static int ila_encap_cmp(struct lwtunnel_state *a, struct lwtunnel_state *b)
3518     diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
3519     index 18f3498a6c80..e2ea31175ef9 100644
3520     --- a/net/ipv6/reassembly.c
3521     +++ b/net/ipv6/reassembly.c
3522     @@ -496,10 +496,8 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
3523     IP6CB(head)->flags |= IP6SKB_FRAGMENTED;
3524    
3525     /* Yes, and fold redundant checksum back. 8) */
3526     - if (head->ip_summed == CHECKSUM_COMPLETE)
3527     - head->csum = csum_partial(skb_network_header(head),
3528     - skb_network_header_len(head),
3529     - head->csum);
3530     + skb_postpush_rcsum(head, skb_network_header(head),
3531     + skb_network_header_len(head));
3532    
3533     rcu_read_lock();
3534     IP6_INC_STATS_BH(net, __in6_dev_get(dev), IPSTATS_MIB_REASMOKS);
3535     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
3536     index ed446639219c..18e29e2f8877 100644
3537     --- a/net/ipv6/route.c
3538     +++ b/net/ipv6/route.c
3539     @@ -1737,6 +1737,8 @@ static int ip6_convert_metrics(struct mx6_config *mxc,
3540     } else {
3541     val = nla_get_u32(nla);
3542     }
3543     + if (type == RTAX_HOPLIMIT && val > 255)
3544     + val = 255;
3545     if (type == RTAX_FEATURES && (val & ~RTAX_FEATURE_MASK))
3546     goto err;
3547    
3548     diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
3549     index 8dab4e569571..bb8edb9ef506 100644
3550     --- a/net/llc/af_llc.c
3551     +++ b/net/llc/af_llc.c
3552     @@ -626,6 +626,7 @@ static void llc_cmsg_rcv(struct msghdr *msg, struct sk_buff *skb)
3553     if (llc->cmsg_flags & LLC_CMSG_PKTINFO) {
3554     struct llc_pktinfo info;
3555    
3556     + memset(&info, 0, sizeof(info));
3557     info.lpi_ifindex = llc_sk(skb->sk)->dev->ifindex;
3558     llc_pdu_decode_dsap(skb, &info.lpi_sap);
3559     llc_pdu_decode_da(skb, info.lpi_mac);
3560     diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
3561     index f60b4fdeeb8c..6b94f0bc11b8 100644
3562     --- a/net/netfilter/nf_conntrack_core.c
3563     +++ b/net/netfilter/nf_conntrack_core.c
3564     @@ -1780,6 +1780,7 @@ void nf_conntrack_init_end(void)
3565    
3566     int nf_conntrack_init_net(struct net *net)
3567     {
3568     + static atomic64_t unique_id;
3569     int ret = -ENOMEM;
3570     int cpu;
3571    
3572     @@ -1802,7 +1803,8 @@ int nf_conntrack_init_net(struct net *net)
3573     if (!net->ct.stat)
3574     goto err_pcpu_lists;
3575    
3576     - net->ct.slabname = kasprintf(GFP_KERNEL, "nf_conntrack_%p", net);
3577     + net->ct.slabname = kasprintf(GFP_KERNEL, "nf_conntrack_%llu",
3578     + (u64)atomic64_inc_return(&unique_id));
3579     if (!net->ct.slabname)
3580     goto err_slabname;
3581    
3582     diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
3583     index 2d59df521915..879185fe183f 100644
3584     --- a/net/openvswitch/actions.c
3585     +++ b/net/openvswitch/actions.c
3586     @@ -158,9 +158,7 @@ static int push_mpls(struct sk_buff *skb, struct sw_flow_key *key,
3587     new_mpls_lse = (__be32 *)skb_mpls_header(skb);
3588     *new_mpls_lse = mpls->mpls_lse;
3589    
3590     - if (skb->ip_summed == CHECKSUM_COMPLETE)
3591     - skb->csum = csum_add(skb->csum, csum_partial(new_mpls_lse,
3592     - MPLS_HLEN, 0));
3593     + skb_postpush_rcsum(skb, new_mpls_lse, MPLS_HLEN);
3594    
3595     hdr = eth_hdr(skb);
3596     hdr->h_proto = mpls->mpls_ethertype;
3597     @@ -280,7 +278,7 @@ static int set_eth_addr(struct sk_buff *skb, struct sw_flow_key *flow_key,
3598     ether_addr_copy_masked(eth_hdr(skb)->h_dest, key->eth_dst,
3599     mask->eth_dst);
3600    
3601     - ovs_skb_postpush_rcsum(skb, eth_hdr(skb), ETH_ALEN * 2);
3602     + skb_postpush_rcsum(skb, eth_hdr(skb), ETH_ALEN * 2);
3603    
3604     ether_addr_copy(flow_key->eth.src, eth_hdr(skb)->h_source);
3605     ether_addr_copy(flow_key->eth.dst, eth_hdr(skb)->h_dest);
3606     @@ -463,7 +461,7 @@ static int set_ipv6(struct sk_buff *skb, struct sw_flow_key *flow_key,
3607     mask_ipv6_addr(saddr, key->ipv6_src, mask->ipv6_src, masked);
3608    
3609     if (unlikely(memcmp(saddr, masked, sizeof(masked)))) {
3610     - set_ipv6_addr(skb, key->ipv6_proto, saddr, masked,
3611     + set_ipv6_addr(skb, flow_key->ip.proto, saddr, masked,
3612     true);
3613     memcpy(&flow_key->ipv6.addr.src, masked,
3614     sizeof(flow_key->ipv6.addr.src));
3615     @@ -485,7 +483,7 @@ static int set_ipv6(struct sk_buff *skb, struct sw_flow_key *flow_key,
3616     NULL, &flags)
3617     != NEXTHDR_ROUTING);
3618    
3619     - set_ipv6_addr(skb, key->ipv6_proto, daddr, masked,
3620     + set_ipv6_addr(skb, flow_key->ip.proto, daddr, masked,
3621     recalc_csum);
3622     memcpy(&flow_key->ipv6.addr.dst, masked,
3623     sizeof(flow_key->ipv6.addr.dst));
3624     @@ -639,7 +637,7 @@ static int ovs_vport_output(struct net *net, struct sock *sk, struct sk_buff *sk
3625     /* Reconstruct the MAC header. */
3626     skb_push(skb, data->l2_len);
3627     memcpy(skb->data, &data->l2_data, data->l2_len);
3628     - ovs_skb_postpush_rcsum(skb, skb->data, data->l2_len);
3629     + skb_postpush_rcsum(skb, skb->data, data->l2_len);
3630     skb_reset_mac_header(skb);
3631    
3632     ovs_vport_send(vport, skb);
3633     diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
3634     index ee6ff8ffc12d..9e5b9fc805fb 100644
3635     --- a/net/openvswitch/conntrack.c
3636     +++ b/net/openvswitch/conntrack.c
3637     @@ -320,6 +320,7 @@ static int handle_fragments(struct net *net, struct sw_flow_key *key,
3638     } else if (key->eth.type == htons(ETH_P_IPV6)) {
3639     enum ip6_defrag_users user = IP6_DEFRAG_CONNTRACK_IN + zone;
3640    
3641     + skb_orphan(skb);
3642     memset(IP6CB(skb), 0, sizeof(struct inet6_skb_parm));
3643     err = nf_ct_frag6_gather(net, skb, user);
3644     if (err)
3645     diff --git a/net/openvswitch/vport-netdev.c b/net/openvswitch/vport-netdev.c
3646     index 6a6adf314363..4e3972344aa6 100644
3647     --- a/net/openvswitch/vport-netdev.c
3648     +++ b/net/openvswitch/vport-netdev.c
3649     @@ -58,7 +58,7 @@ static void netdev_port_receive(struct sk_buff *skb)
3650     return;
3651    
3652     skb_push(skb, ETH_HLEN);
3653     - ovs_skb_postpush_rcsum(skb, skb->data, ETH_HLEN);
3654     + skb_postpush_rcsum(skb, skb->data, ETH_HLEN);
3655     ovs_vport_receive(vport, skb, skb_tunnel_info(skb));
3656     return;
3657     error:
3658     diff --git a/net/openvswitch/vport.h b/net/openvswitch/vport.h
3659     index c10899cb9040..f01f28a567ad 100644
3660     --- a/net/openvswitch/vport.h
3661     +++ b/net/openvswitch/vport.h
3662     @@ -185,13 +185,6 @@ static inline struct vport *vport_from_priv(void *priv)
3663     int ovs_vport_receive(struct vport *, struct sk_buff *,
3664     const struct ip_tunnel_info *);
3665    
3666     -static inline void ovs_skb_postpush_rcsum(struct sk_buff *skb,
3667     - const void *start, unsigned int len)
3668     -{
3669     - if (skb->ip_summed == CHECKSUM_COMPLETE)
3670     - skb->csum = csum_add(skb->csum, csum_partial(start, len, 0));
3671     -}
3672     -
3673     static inline const char *ovs_vport_name(struct vport *vport)
3674     {
3675     return vport->dev->name;
3676     diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
3677     index da1ae0e13cb5..9cc7b512b472 100644
3678     --- a/net/packet/af_packet.c
3679     +++ b/net/packet/af_packet.c
3680     @@ -3436,6 +3436,7 @@ static int packet_mc_add(struct sock *sk, struct packet_mreq_max *mreq)
3681     i->ifindex = mreq->mr_ifindex;
3682     i->alen = mreq->mr_alen;
3683     memcpy(i->addr, mreq->mr_address, i->alen);
3684     + memset(i->addr + i->alen, 0, sizeof(i->addr) - i->alen);
3685     i->count = 1;
3686     i->next = po->mclist;
3687     po->mclist = i;
3688     diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
3689     index af1acf009866..95b560f0b253 100644
3690     --- a/net/sched/sch_api.c
3691     +++ b/net/sched/sch_api.c
3692     @@ -744,14 +744,15 @@ static u32 qdisc_alloc_handle(struct net_device *dev)
3693     return 0;
3694     }
3695    
3696     -void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n)
3697     +void qdisc_tree_reduce_backlog(struct Qdisc *sch, unsigned int n,
3698     + unsigned int len)
3699     {
3700     const struct Qdisc_class_ops *cops;
3701     unsigned long cl;
3702     u32 parentid;
3703     int drops;
3704    
3705     - if (n == 0)
3706     + if (n == 0 && len == 0)
3707     return;
3708     drops = max_t(int, n, 0);
3709     rcu_read_lock();
3710     @@ -774,11 +775,12 @@ void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n)
3711     cops->put(sch, cl);
3712     }
3713     sch->q.qlen -= n;
3714     + sch->qstats.backlog -= len;
3715     __qdisc_qstats_drop(sch, drops);
3716     }
3717     rcu_read_unlock();
3718     }
3719     -EXPORT_SYMBOL(qdisc_tree_decrease_qlen);
3720     +EXPORT_SYMBOL(qdisc_tree_reduce_backlog);
3721    
3722     static void notify_and_destroy(struct net *net, struct sk_buff *skb,
3723     struct nlmsghdr *n, u32 clid,
3724     diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
3725     index c538d9e4a8f6..baafddf229ce 100644
3726     --- a/net/sched/sch_cbq.c
3727     +++ b/net/sched/sch_cbq.c
3728     @@ -1624,13 +1624,8 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
3729     new->reshape_fail = cbq_reshape_fail;
3730     #endif
3731     }
3732     - sch_tree_lock(sch);
3733     - *old = cl->q;
3734     - cl->q = new;
3735     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
3736     - qdisc_reset(*old);
3737     - sch_tree_unlock(sch);
3738    
3739     + *old = qdisc_replace(sch, new, &cl->q);
3740     return 0;
3741     }
3742    
3743     @@ -1914,7 +1909,7 @@ static int cbq_delete(struct Qdisc *sch, unsigned long arg)
3744     {
3745     struct cbq_sched_data *q = qdisc_priv(sch);
3746     struct cbq_class *cl = (struct cbq_class *)arg;
3747     - unsigned int qlen;
3748     + unsigned int qlen, backlog;
3749    
3750     if (cl->filters || cl->children || cl == &q->link)
3751     return -EBUSY;
3752     @@ -1922,8 +1917,9 @@ static int cbq_delete(struct Qdisc *sch, unsigned long arg)
3753     sch_tree_lock(sch);
3754    
3755     qlen = cl->q->q.qlen;
3756     + backlog = cl->q->qstats.backlog;
3757     qdisc_reset(cl->q);
3758     - qdisc_tree_decrease_qlen(cl->q, qlen);
3759     + qdisc_tree_reduce_backlog(cl->q, qlen, backlog);
3760    
3761     if (cl->next_alive)
3762     cbq_deactivate_class(cl);
3763     diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c
3764     index 5ffb8b8337c7..0a08c860eee4 100644
3765     --- a/net/sched/sch_choke.c
3766     +++ b/net/sched/sch_choke.c
3767     @@ -128,8 +128,8 @@ static void choke_drop_by_idx(struct Qdisc *sch, unsigned int idx)
3768     choke_zap_tail_holes(q);
3769    
3770     qdisc_qstats_backlog_dec(sch, skb);
3771     + qdisc_tree_reduce_backlog(sch, 1, qdisc_pkt_len(skb));
3772     qdisc_drop(skb, sch);
3773     - qdisc_tree_decrease_qlen(sch, 1);
3774     --sch->q.qlen;
3775     }
3776    
3777     @@ -456,6 +456,7 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
3778     old = q->tab;
3779     if (old) {
3780     unsigned int oqlen = sch->q.qlen, tail = 0;
3781     + unsigned dropped = 0;
3782    
3783     while (q->head != q->tail) {
3784     struct sk_buff *skb = q->tab[q->head];
3785     @@ -467,11 +468,12 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
3786     ntab[tail++] = skb;
3787     continue;
3788     }
3789     + dropped += qdisc_pkt_len(skb);
3790     qdisc_qstats_backlog_dec(sch, skb);
3791     --sch->q.qlen;
3792     qdisc_drop(skb, sch);
3793     }
3794     - qdisc_tree_decrease_qlen(sch, oqlen - sch->q.qlen);
3795     + qdisc_tree_reduce_backlog(sch, oqlen - sch->q.qlen, dropped);
3796     q->head = 0;
3797     q->tail = tail;
3798     }
3799     diff --git a/net/sched/sch_codel.c b/net/sched/sch_codel.c
3800     index 535007d5f0b5..9b7e2980ee5c 100644
3801     --- a/net/sched/sch_codel.c
3802     +++ b/net/sched/sch_codel.c
3803     @@ -79,12 +79,13 @@ static struct sk_buff *codel_qdisc_dequeue(struct Qdisc *sch)
3804    
3805     skb = codel_dequeue(sch, &q->params, &q->vars, &q->stats, dequeue);
3806    
3807     - /* We cant call qdisc_tree_decrease_qlen() if our qlen is 0,
3808     + /* We cant call qdisc_tree_reduce_backlog() if our qlen is 0,
3809     * or HTB crashes. Defer it for next round.
3810     */
3811     if (q->stats.drop_count && sch->q.qlen) {
3812     - qdisc_tree_decrease_qlen(sch, q->stats.drop_count);
3813     + qdisc_tree_reduce_backlog(sch, q->stats.drop_count, q->stats.drop_len);
3814     q->stats.drop_count = 0;
3815     + q->stats.drop_len = 0;
3816     }
3817     if (skb)
3818     qdisc_bstats_update(sch, skb);
3819     @@ -116,7 +117,7 @@ static int codel_change(struct Qdisc *sch, struct nlattr *opt)
3820     {
3821     struct codel_sched_data *q = qdisc_priv(sch);
3822     struct nlattr *tb[TCA_CODEL_MAX + 1];
3823     - unsigned int qlen;
3824     + unsigned int qlen, dropped = 0;
3825     int err;
3826    
3827     if (!opt)
3828     @@ -156,10 +157,11 @@ static int codel_change(struct Qdisc *sch, struct nlattr *opt)
3829     while (sch->q.qlen > sch->limit) {
3830     struct sk_buff *skb = __skb_dequeue(&sch->q);
3831    
3832     + dropped += qdisc_pkt_len(skb);
3833     qdisc_qstats_backlog_dec(sch, skb);
3834     qdisc_drop(skb, sch);
3835     }
3836     - qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
3837     + qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen, dropped);
3838    
3839     sch_tree_unlock(sch);
3840     return 0;
3841     diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c
3842     index a1cd778240cd..a63e879e8975 100644
3843     --- a/net/sched/sch_drr.c
3844     +++ b/net/sched/sch_drr.c
3845     @@ -53,9 +53,10 @@ static struct drr_class *drr_find_class(struct Qdisc *sch, u32 classid)
3846     static void drr_purge_queue(struct drr_class *cl)
3847     {
3848     unsigned int len = cl->qdisc->q.qlen;
3849     + unsigned int backlog = cl->qdisc->qstats.backlog;
3850    
3851     qdisc_reset(cl->qdisc);
3852     - qdisc_tree_decrease_qlen(cl->qdisc, len);
3853     + qdisc_tree_reduce_backlog(cl->qdisc, len, backlog);
3854     }
3855    
3856     static const struct nla_policy drr_policy[TCA_DRR_MAX + 1] = {
3857     @@ -226,11 +227,7 @@ static int drr_graft_class(struct Qdisc *sch, unsigned long arg,
3858     new = &noop_qdisc;
3859     }
3860    
3861     - sch_tree_lock(sch);
3862     - drr_purge_queue(cl);
3863     - *old = cl->qdisc;
3864     - cl->qdisc = new;
3865     - sch_tree_unlock(sch);
3866     + *old = qdisc_replace(sch, new, &cl->qdisc);
3867     return 0;
3868     }
3869    
3870     diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c
3871     index f357f34d02d2..d0dff0cd8186 100644
3872     --- a/net/sched/sch_dsmark.c
3873     +++ b/net/sched/sch_dsmark.c
3874     @@ -73,13 +73,7 @@ static int dsmark_graft(struct Qdisc *sch, unsigned long arg,
3875     new = &noop_qdisc;
3876     }
3877    
3878     - sch_tree_lock(sch);
3879     - *old = p->q;
3880     - p->q = new;
3881     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
3882     - qdisc_reset(*old);
3883     - sch_tree_unlock(sch);
3884     -
3885     + *old = qdisc_replace(sch, new, &p->q);
3886     return 0;
3887     }
3888    
3889     @@ -264,6 +258,7 @@ static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch)
3890     return err;
3891     }
3892    
3893     + qdisc_qstats_backlog_inc(sch, skb);
3894     sch->q.qlen++;
3895    
3896     return NET_XMIT_SUCCESS;
3897     @@ -286,6 +281,7 @@ static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
3898     return NULL;
3899    
3900     qdisc_bstats_update(sch, skb);
3901     + qdisc_qstats_backlog_dec(sch, skb);
3902     sch->q.qlen--;
3903    
3904     index = skb->tc_index & (p->indices - 1);
3905     @@ -401,6 +397,7 @@ static void dsmark_reset(struct Qdisc *sch)
3906    
3907     pr_debug("%s(sch %p,[qdisc %p])\n", __func__, sch, p);
3908     qdisc_reset(p->q);
3909     + sch->qstats.backlog = 0;
3910     sch->q.qlen = 0;
3911     }
3912    
3913     diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c
3914     index 109b2322778f..3c6a47d66a04 100644
3915     --- a/net/sched/sch_fq.c
3916     +++ b/net/sched/sch_fq.c
3917     @@ -662,6 +662,7 @@ static int fq_change(struct Qdisc *sch, struct nlattr *opt)
3918     struct fq_sched_data *q = qdisc_priv(sch);
3919     struct nlattr *tb[TCA_FQ_MAX + 1];
3920     int err, drop_count = 0;
3921     + unsigned drop_len = 0;
3922     u32 fq_log;
3923    
3924     if (!opt)
3925     @@ -736,10 +737,11 @@ static int fq_change(struct Qdisc *sch, struct nlattr *opt)
3926    
3927     if (!skb)
3928     break;
3929     + drop_len += qdisc_pkt_len(skb);
3930     kfree_skb(skb);
3931     drop_count++;
3932     }
3933     - qdisc_tree_decrease_qlen(sch, drop_count);
3934     + qdisc_tree_reduce_backlog(sch, drop_count, drop_len);
3935    
3936     sch_tree_unlock(sch);
3937     return err;
3938     diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c
3939     index 4c834e93dafb..d3fc8f9dd3d4 100644
3940     --- a/net/sched/sch_fq_codel.c
3941     +++ b/net/sched/sch_fq_codel.c
3942     @@ -175,7 +175,7 @@ static unsigned int fq_codel_qdisc_drop(struct Qdisc *sch)
3943     static int fq_codel_enqueue(struct sk_buff *skb, struct Qdisc *sch)
3944     {
3945     struct fq_codel_sched_data *q = qdisc_priv(sch);
3946     - unsigned int idx;
3947     + unsigned int idx, prev_backlog;
3948     struct fq_codel_flow *flow;
3949     int uninitialized_var(ret);
3950    
3951     @@ -203,6 +203,7 @@ static int fq_codel_enqueue(struct sk_buff *skb, struct Qdisc *sch)
3952     if (++sch->q.qlen <= sch->limit)
3953     return NET_XMIT_SUCCESS;
3954    
3955     + prev_backlog = sch->qstats.backlog;
3956     q->drop_overlimit++;
3957     /* Return Congestion Notification only if we dropped a packet
3958     * from this flow.
3959     @@ -211,7 +212,7 @@ static int fq_codel_enqueue(struct sk_buff *skb, struct Qdisc *sch)
3960     return NET_XMIT_CN;
3961    
3962     /* As we dropped a packet, better let upper stack know this */
3963     - qdisc_tree_decrease_qlen(sch, 1);
3964     + qdisc_tree_reduce_backlog(sch, 1, prev_backlog - sch->qstats.backlog);
3965     return NET_XMIT_SUCCESS;
3966     }
3967    
3968     @@ -241,6 +242,7 @@ static struct sk_buff *fq_codel_dequeue(struct Qdisc *sch)
3969     struct fq_codel_flow *flow;
3970     struct list_head *head;
3971     u32 prev_drop_count, prev_ecn_mark;
3972     + unsigned int prev_backlog;
3973    
3974     begin:
3975     head = &q->new_flows;
3976     @@ -259,6 +261,7 @@ begin:
3977    
3978     prev_drop_count = q->cstats.drop_count;
3979     prev_ecn_mark = q->cstats.ecn_mark;
3980     + prev_backlog = sch->qstats.backlog;
3981    
3982     skb = codel_dequeue(sch, &q->cparams, &flow->cvars, &q->cstats,
3983     dequeue);
3984     @@ -276,12 +279,14 @@ begin:
3985     }
3986     qdisc_bstats_update(sch, skb);
3987     flow->deficit -= qdisc_pkt_len(skb);
3988     - /* We cant call qdisc_tree_decrease_qlen() if our qlen is 0,
3989     + /* We cant call qdisc_tree_reduce_backlog() if our qlen is 0,
3990     * or HTB crashes. Defer it for next round.
3991     */
3992     if (q->cstats.drop_count && sch->q.qlen) {
3993     - qdisc_tree_decrease_qlen(sch, q->cstats.drop_count);
3994     + qdisc_tree_reduce_backlog(sch, q->cstats.drop_count,
3995     + q->cstats.drop_len);
3996     q->cstats.drop_count = 0;
3997     + q->cstats.drop_len = 0;
3998     }
3999     return skb;
4000     }
4001     @@ -372,11 +377,13 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt)
4002     while (sch->q.qlen > sch->limit) {
4003     struct sk_buff *skb = fq_codel_dequeue(sch);
4004    
4005     + q->cstats.drop_len += qdisc_pkt_len(skb);
4006     kfree_skb(skb);
4007     q->cstats.drop_count++;
4008     }
4009     - qdisc_tree_decrease_qlen(sch, q->cstats.drop_count);
4010     + qdisc_tree_reduce_backlog(sch, q->cstats.drop_count, q->cstats.drop_len);
4011     q->cstats.drop_count = 0;
4012     + q->cstats.drop_len = 0;
4013    
4014     sch_tree_unlock(sch);
4015     return 0;
4016     diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
4017     index 16bc83b2842a..aa4725038f94 100644
4018     --- a/net/sched/sch_generic.c
4019     +++ b/net/sched/sch_generic.c
4020     @@ -159,12 +159,15 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q,
4021     if (validate)
4022     skb = validate_xmit_skb_list(skb, dev);
4023    
4024     - if (skb) {
4025     + if (likely(skb)) {
4026     HARD_TX_LOCK(dev, txq, smp_processor_id());
4027     if (!netif_xmit_frozen_or_stopped(txq))
4028     skb = dev_hard_start_xmit(skb, dev, txq, &ret);
4029    
4030     HARD_TX_UNLOCK(dev, txq);
4031     + } else {
4032     + spin_lock(root_lock);
4033     + return qdisc_qlen(q);
4034     }
4035     spin_lock(root_lock);
4036    
4037     diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c
4038     index b7ebe2c87586..d783d7cc3348 100644
4039     --- a/net/sched/sch_hfsc.c
4040     +++ b/net/sched/sch_hfsc.c
4041     @@ -895,9 +895,10 @@ static void
4042     hfsc_purge_queue(struct Qdisc *sch, struct hfsc_class *cl)
4043     {
4044     unsigned int len = cl->qdisc->q.qlen;
4045     + unsigned int backlog = cl->qdisc->qstats.backlog;
4046    
4047     qdisc_reset(cl->qdisc);
4048     - qdisc_tree_decrease_qlen(cl->qdisc, len);
4049     + qdisc_tree_reduce_backlog(cl->qdisc, len, backlog);
4050     }
4051    
4052     static void
4053     @@ -1215,11 +1216,7 @@ hfsc_graft_class(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
4054     new = &noop_qdisc;
4055     }
4056    
4057     - sch_tree_lock(sch);
4058     - hfsc_purge_queue(sch, cl);
4059     - *old = cl->qdisc;
4060     - cl->qdisc = new;
4061     - sch_tree_unlock(sch);
4062     + *old = qdisc_replace(sch, new, &cl->qdisc);
4063     return 0;
4064     }
4065    
4066     diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c
4067     index 86b04e31e60b..13d6f83ec491 100644
4068     --- a/net/sched/sch_hhf.c
4069     +++ b/net/sched/sch_hhf.c
4070     @@ -382,6 +382,7 @@ static int hhf_enqueue(struct sk_buff *skb, struct Qdisc *sch)
4071     struct hhf_sched_data *q = qdisc_priv(sch);
4072     enum wdrr_bucket_idx idx;
4073     struct wdrr_bucket *bucket;
4074     + unsigned int prev_backlog;
4075    
4076     idx = hhf_classify(skb, sch);
4077    
4078     @@ -409,6 +410,7 @@ static int hhf_enqueue(struct sk_buff *skb, struct Qdisc *sch)
4079     if (++sch->q.qlen <= sch->limit)
4080     return NET_XMIT_SUCCESS;
4081    
4082     + prev_backlog = sch->qstats.backlog;
4083     q->drop_overlimit++;
4084     /* Return Congestion Notification only if we dropped a packet from this
4085     * bucket.
4086     @@ -417,7 +419,7 @@ static int hhf_enqueue(struct sk_buff *skb, struct Qdisc *sch)
4087     return NET_XMIT_CN;
4088    
4089     /* As we dropped a packet, better let upper stack know this. */
4090     - qdisc_tree_decrease_qlen(sch, 1);
4091     + qdisc_tree_reduce_backlog(sch, 1, prev_backlog - sch->qstats.backlog);
4092     return NET_XMIT_SUCCESS;
4093     }
4094    
4095     @@ -527,7 +529,7 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt)
4096     {
4097     struct hhf_sched_data *q = qdisc_priv(sch);
4098     struct nlattr *tb[TCA_HHF_MAX + 1];
4099     - unsigned int qlen;
4100     + unsigned int qlen, prev_backlog;
4101     int err;
4102     u64 non_hh_quantum;
4103     u32 new_quantum = q->quantum;
4104     @@ -577,12 +579,14 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt)
4105     }
4106    
4107     qlen = sch->q.qlen;
4108     + prev_backlog = sch->qstats.backlog;
4109     while (sch->q.qlen > sch->limit) {
4110     struct sk_buff *skb = hhf_dequeue(sch);
4111    
4112     kfree_skb(skb);
4113     }
4114     - qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
4115     + qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen,
4116     + prev_backlog - sch->qstats.backlog);
4117    
4118     sch_tree_unlock(sch);
4119     return 0;
4120     diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
4121     index 15ccd7f8fb2a..87b02ed3d5f2 100644
4122     --- a/net/sched/sch_htb.c
4123     +++ b/net/sched/sch_htb.c
4124     @@ -600,6 +600,7 @@ static int htb_enqueue(struct sk_buff *skb, struct Qdisc *sch)
4125     htb_activate(q, cl);
4126     }
4127    
4128     + qdisc_qstats_backlog_inc(sch, skb);
4129     sch->q.qlen++;
4130     return NET_XMIT_SUCCESS;
4131     }
4132     @@ -889,6 +890,7 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch)
4133     ok:
4134     qdisc_bstats_update(sch, skb);
4135     qdisc_unthrottled(sch);
4136     + qdisc_qstats_backlog_dec(sch, skb);
4137     sch->q.qlen--;
4138     return skb;
4139     }
4140     @@ -955,6 +957,7 @@ static unsigned int htb_drop(struct Qdisc *sch)
4141     unsigned int len;
4142     if (cl->un.leaf.q->ops->drop &&
4143     (len = cl->un.leaf.q->ops->drop(cl->un.leaf.q))) {
4144     + sch->qstats.backlog -= len;
4145     sch->q.qlen--;
4146     if (!cl->un.leaf.q->q.qlen)
4147     htb_deactivate(q, cl);
4148     @@ -984,12 +987,12 @@ static void htb_reset(struct Qdisc *sch)
4149     }
4150     cl->prio_activity = 0;
4151     cl->cmode = HTB_CAN_SEND;
4152     -
4153     }
4154     }
4155     qdisc_watchdog_cancel(&q->watchdog);
4156     __skb_queue_purge(&q->direct_queue);
4157     sch->q.qlen = 0;
4158     + sch->qstats.backlog = 0;
4159     memset(q->hlevel, 0, sizeof(q->hlevel));
4160     memset(q->row_mask, 0, sizeof(q->row_mask));
4161     for (i = 0; i < TC_HTB_NUMPRIO; i++)
4162     @@ -1163,14 +1166,7 @@ static int htb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
4163     cl->common.classid)) == NULL)
4164     return -ENOBUFS;
4165    
4166     - sch_tree_lock(sch);
4167     - *old = cl->un.leaf.q;
4168     - cl->un.leaf.q = new;
4169     - if (*old != NULL) {
4170     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
4171     - qdisc_reset(*old);
4172     - }
4173     - sch_tree_unlock(sch);
4174     + *old = qdisc_replace(sch, new, &cl->un.leaf.q);
4175     return 0;
4176     }
4177    
4178     @@ -1272,7 +1268,6 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg)
4179     {
4180     struct htb_sched *q = qdisc_priv(sch);
4181     struct htb_class *cl = (struct htb_class *)arg;
4182     - unsigned int qlen;
4183     struct Qdisc *new_q = NULL;
4184     int last_child = 0;
4185    
4186     @@ -1292,9 +1287,11 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg)
4187     sch_tree_lock(sch);
4188    
4189     if (!cl->level) {
4190     - qlen = cl->un.leaf.q->q.qlen;
4191     + unsigned int qlen = cl->un.leaf.q->q.qlen;
4192     + unsigned int backlog = cl->un.leaf.q->qstats.backlog;
4193     +
4194     qdisc_reset(cl->un.leaf.q);
4195     - qdisc_tree_decrease_qlen(cl->un.leaf.q, qlen);
4196     + qdisc_tree_reduce_backlog(cl->un.leaf.q, qlen, backlog);
4197     }
4198    
4199     /* delete from hash and active; remainder in destroy_class */
4200     @@ -1428,10 +1425,11 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
4201     sch_tree_lock(sch);
4202     if (parent && !parent->level) {
4203     unsigned int qlen = parent->un.leaf.q->q.qlen;
4204     + unsigned int backlog = parent->un.leaf.q->qstats.backlog;
4205    
4206     /* turn parent into inner node */
4207     qdisc_reset(parent->un.leaf.q);
4208     - qdisc_tree_decrease_qlen(parent->un.leaf.q, qlen);
4209     + qdisc_tree_reduce_backlog(parent->un.leaf.q, qlen, backlog);
4210     qdisc_destroy(parent->un.leaf.q);
4211     if (parent->prio_activity)
4212     htb_deactivate(q, parent);
4213     diff --git a/net/sched/sch_multiq.c b/net/sched/sch_multiq.c
4214     index 4e904ca0af9d..bcdd54bb101c 100644
4215     --- a/net/sched/sch_multiq.c
4216     +++ b/net/sched/sch_multiq.c
4217     @@ -218,7 +218,8 @@ static int multiq_tune(struct Qdisc *sch, struct nlattr *opt)
4218     if (q->queues[i] != &noop_qdisc) {
4219     struct Qdisc *child = q->queues[i];
4220     q->queues[i] = &noop_qdisc;
4221     - qdisc_tree_decrease_qlen(child, child->q.qlen);
4222     + qdisc_tree_reduce_backlog(child, child->q.qlen,
4223     + child->qstats.backlog);
4224     qdisc_destroy(child);
4225     }
4226     }
4227     @@ -238,8 +239,9 @@ static int multiq_tune(struct Qdisc *sch, struct nlattr *opt)
4228     q->queues[i] = child;
4229    
4230     if (old != &noop_qdisc) {
4231     - qdisc_tree_decrease_qlen(old,
4232     - old->q.qlen);
4233     + qdisc_tree_reduce_backlog(old,
4234     + old->q.qlen,
4235     + old->qstats.backlog);
4236     qdisc_destroy(old);
4237     }
4238     sch_tree_unlock(sch);
4239     @@ -303,13 +305,7 @@ static int multiq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
4240     if (new == NULL)
4241     new = &noop_qdisc;
4242    
4243     - sch_tree_lock(sch);
4244     - *old = q->queues[band];
4245     - q->queues[band] = new;
4246     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
4247     - qdisc_reset(*old);
4248     - sch_tree_unlock(sch);
4249     -
4250     + *old = qdisc_replace(sch, new, &q->queues[band]);
4251     return 0;
4252     }
4253    
4254     diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
4255     index 5abd1d9de989..4befe97a9034 100644
4256     --- a/net/sched/sch_netem.c
4257     +++ b/net/sched/sch_netem.c
4258     @@ -395,6 +395,25 @@ static void tfifo_enqueue(struct sk_buff *nskb, struct Qdisc *sch)
4259     sch->q.qlen++;
4260     }
4261    
4262     +/* netem can't properly corrupt a megapacket (like we get from GSO), so instead
4263     + * when we statistically choose to corrupt one, we instead segment it, returning
4264     + * the first packet to be corrupted, and re-enqueue the remaining frames
4265     + */
4266     +static struct sk_buff *netem_segment(struct sk_buff *skb, struct Qdisc *sch)
4267     +{
4268     + struct sk_buff *segs;
4269     + netdev_features_t features = netif_skb_features(skb);
4270     +
4271     + segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK);
4272     +
4273     + if (IS_ERR_OR_NULL(segs)) {
4274     + qdisc_reshape_fail(skb, sch);
4275     + return NULL;
4276     + }
4277     + consume_skb(skb);
4278     + return segs;
4279     +}
4280     +
4281     /*
4282     * Insert one skb into qdisc.
4283     * Note: parent depends on return value to account for queue length.
4284     @@ -407,7 +426,11 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)
4285     /* We don't fill cb now as skb_unshare() may invalidate it */
4286     struct netem_skb_cb *cb;
4287     struct sk_buff *skb2;
4288     + struct sk_buff *segs = NULL;
4289     + unsigned int len = 0, last_len, prev_len = qdisc_pkt_len(skb);
4290     + int nb = 0;
4291     int count = 1;
4292     + int rc = NET_XMIT_SUCCESS;
4293    
4294     /* Random duplication */
4295     if (q->duplicate && q->duplicate >= get_crandom(&q->dup_cor))
4296     @@ -453,10 +476,23 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)
4297     * do it now in software before we mangle it.
4298     */
4299     if (q->corrupt && q->corrupt >= get_crandom(&q->corrupt_cor)) {
4300     + if (skb_is_gso(skb)) {
4301     + segs = netem_segment(skb, sch);
4302     + if (!segs)
4303     + return NET_XMIT_DROP;
4304     + } else {
4305     + segs = skb;
4306     + }
4307     +
4308     + skb = segs;
4309     + segs = segs->next;
4310     +
4311     if (!(skb = skb_unshare(skb, GFP_ATOMIC)) ||
4312     (skb->ip_summed == CHECKSUM_PARTIAL &&
4313     - skb_checksum_help(skb)))
4314     - return qdisc_drop(skb, sch);
4315     + skb_checksum_help(skb))) {
4316     + rc = qdisc_drop(skb, sch);
4317     + goto finish_segs;
4318     + }
4319    
4320     skb->data[prandom_u32() % skb_headlen(skb)] ^=
4321     1<<(prandom_u32() % 8);
4322     @@ -516,6 +552,27 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)
4323     sch->qstats.requeues++;
4324     }
4325    
4326     +finish_segs:
4327     + if (segs) {
4328     + while (segs) {
4329     + skb2 = segs->next;
4330     + segs->next = NULL;
4331     + qdisc_skb_cb(segs)->pkt_len = segs->len;
4332     + last_len = segs->len;
4333     + rc = qdisc_enqueue(segs, sch);
4334     + if (rc != NET_XMIT_SUCCESS) {
4335     + if (net_xmit_drop_count(rc))
4336     + qdisc_qstats_drop(sch);
4337     + } else {
4338     + nb++;
4339     + len += last_len;
4340     + }
4341     + segs = skb2;
4342     + }
4343     + sch->q.qlen += nb;
4344     + if (nb > 1)
4345     + qdisc_tree_reduce_backlog(sch, 1 - nb, prev_len - len);
4346     + }
4347     return NET_XMIT_SUCCESS;
4348     }
4349    
4350     @@ -598,7 +655,8 @@ deliver:
4351     if (unlikely(err != NET_XMIT_SUCCESS)) {
4352     if (net_xmit_drop_count(err)) {
4353     qdisc_qstats_drop(sch);
4354     - qdisc_tree_decrease_qlen(sch, 1);
4355     + qdisc_tree_reduce_backlog(sch, 1,
4356     + qdisc_pkt_len(skb));
4357     }
4358     }
4359     goto tfifo_dequeue;
4360     @@ -1037,15 +1095,7 @@ static int netem_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
4361     {
4362     struct netem_sched_data *q = qdisc_priv(sch);
4363    
4364     - sch_tree_lock(sch);
4365     - *old = q->qdisc;
4366     - q->qdisc = new;
4367     - if (*old) {
4368     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
4369     - qdisc_reset(*old);
4370     - }
4371     - sch_tree_unlock(sch);
4372     -
4373     + *old = qdisc_replace(sch, new, &q->qdisc);
4374     return 0;
4375     }
4376    
4377     diff --git a/net/sched/sch_pie.c b/net/sched/sch_pie.c
4378     index b783a446d884..71ae3b9629f9 100644
4379     --- a/net/sched/sch_pie.c
4380     +++ b/net/sched/sch_pie.c
4381     @@ -183,7 +183,7 @@ static int pie_change(struct Qdisc *sch, struct nlattr *opt)
4382     {
4383     struct pie_sched_data *q = qdisc_priv(sch);
4384     struct nlattr *tb[TCA_PIE_MAX + 1];
4385     - unsigned int qlen;
4386     + unsigned int qlen, dropped = 0;
4387     int err;
4388    
4389     if (!opt)
4390     @@ -232,10 +232,11 @@ static int pie_change(struct Qdisc *sch, struct nlattr *opt)
4391     while (sch->q.qlen > sch->limit) {
4392     struct sk_buff *skb = __skb_dequeue(&sch->q);
4393    
4394     + dropped += qdisc_pkt_len(skb);
4395     qdisc_qstats_backlog_dec(sch, skb);
4396     qdisc_drop(skb, sch);
4397     }
4398     - qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
4399     + qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen, dropped);
4400    
4401     sch_tree_unlock(sch);
4402     return 0;
4403     diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c
4404     index ba6487f2741f..fee1b15506b2 100644
4405     --- a/net/sched/sch_prio.c
4406     +++ b/net/sched/sch_prio.c
4407     @@ -191,7 +191,7 @@ static int prio_tune(struct Qdisc *sch, struct nlattr *opt)
4408     struct Qdisc *child = q->queues[i];
4409     q->queues[i] = &noop_qdisc;
4410     if (child != &noop_qdisc) {
4411     - qdisc_tree_decrease_qlen(child, child->q.qlen);
4412     + qdisc_tree_reduce_backlog(child, child->q.qlen, child->qstats.backlog);
4413     qdisc_destroy(child);
4414     }
4415     }
4416     @@ -210,8 +210,9 @@ static int prio_tune(struct Qdisc *sch, struct nlattr *opt)
4417     q->queues[i] = child;
4418    
4419     if (old != &noop_qdisc) {
4420     - qdisc_tree_decrease_qlen(old,
4421     - old->q.qlen);
4422     + qdisc_tree_reduce_backlog(old,
4423     + old->q.qlen,
4424     + old->qstats.backlog);
4425     qdisc_destroy(old);
4426     }
4427     sch_tree_unlock(sch);
4428     @@ -268,13 +269,7 @@ static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
4429     if (new == NULL)
4430     new = &noop_qdisc;
4431    
4432     - sch_tree_lock(sch);
4433     - *old = q->queues[band];
4434     - q->queues[band] = new;
4435     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
4436     - qdisc_reset(*old);
4437     - sch_tree_unlock(sch);
4438     -
4439     + *old = qdisc_replace(sch, new, &q->queues[band]);
4440     return 0;
4441     }
4442    
4443     diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
4444     index 3dc3a6e56052..8d2d8d953432 100644
4445     --- a/net/sched/sch_qfq.c
4446     +++ b/net/sched/sch_qfq.c
4447     @@ -220,9 +220,10 @@ static struct qfq_class *qfq_find_class(struct Qdisc *sch, u32 classid)
4448     static void qfq_purge_queue(struct qfq_class *cl)
4449     {
4450     unsigned int len = cl->qdisc->q.qlen;
4451     + unsigned int backlog = cl->qdisc->qstats.backlog;
4452    
4453     qdisc_reset(cl->qdisc);
4454     - qdisc_tree_decrease_qlen(cl->qdisc, len);
4455     + qdisc_tree_reduce_backlog(cl->qdisc, len, backlog);
4456     }
4457    
4458     static const struct nla_policy qfq_policy[TCA_QFQ_MAX + 1] = {
4459     @@ -617,11 +618,7 @@ static int qfq_graft_class(struct Qdisc *sch, unsigned long arg,
4460     new = &noop_qdisc;
4461     }
4462    
4463     - sch_tree_lock(sch);
4464     - qfq_purge_queue(cl);
4465     - *old = cl->qdisc;
4466     - cl->qdisc = new;
4467     - sch_tree_unlock(sch);
4468     + *old = qdisc_replace(sch, new, &cl->qdisc);
4469     return 0;
4470     }
4471    
4472     diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c
4473     index 6c0534cc7758..8c0508c0e287 100644
4474     --- a/net/sched/sch_red.c
4475     +++ b/net/sched/sch_red.c
4476     @@ -210,7 +210,8 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt)
4477     q->flags = ctl->flags;
4478     q->limit = ctl->limit;
4479     if (child) {
4480     - qdisc_tree_decrease_qlen(q->qdisc, q->qdisc->q.qlen);
4481     + qdisc_tree_reduce_backlog(q->qdisc, q->qdisc->q.qlen,
4482     + q->qdisc->qstats.backlog);
4483     qdisc_destroy(q->qdisc);
4484     q->qdisc = child;
4485     }
4486     @@ -313,12 +314,7 @@ static int red_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
4487     if (new == NULL)
4488     new = &noop_qdisc;
4489    
4490     - sch_tree_lock(sch);
4491     - *old = q->qdisc;
4492     - q->qdisc = new;
4493     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
4494     - qdisc_reset(*old);
4495     - sch_tree_unlock(sch);
4496     + *old = qdisc_replace(sch, new, &q->qdisc);
4497     return 0;
4498     }
4499    
4500     diff --git a/net/sched/sch_sfb.c b/net/sched/sch_sfb.c
4501     index 5bbb6332ec57..c69611640fa5 100644
4502     --- a/net/sched/sch_sfb.c
4503     +++ b/net/sched/sch_sfb.c
4504     @@ -510,7 +510,8 @@ static int sfb_change(struct Qdisc *sch, struct nlattr *opt)
4505    
4506     sch_tree_lock(sch);
4507    
4508     - qdisc_tree_decrease_qlen(q->qdisc, q->qdisc->q.qlen);
4509     + qdisc_tree_reduce_backlog(q->qdisc, q->qdisc->q.qlen,
4510     + q->qdisc->qstats.backlog);
4511     qdisc_destroy(q->qdisc);
4512     q->qdisc = child;
4513    
4514     @@ -606,12 +607,7 @@ static int sfb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
4515     if (new == NULL)
4516     new = &noop_qdisc;
4517    
4518     - sch_tree_lock(sch);
4519     - *old = q->qdisc;
4520     - q->qdisc = new;
4521     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
4522     - qdisc_reset(*old);
4523     - sch_tree_unlock(sch);
4524     + *old = qdisc_replace(sch, new, &q->qdisc);
4525     return 0;
4526     }
4527    
4528     diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
4529     index 3abab534eb5c..498f0a2cb47f 100644
4530     --- a/net/sched/sch_sfq.c
4531     +++ b/net/sched/sch_sfq.c
4532     @@ -346,7 +346,7 @@ static int
4533     sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch)
4534     {
4535     struct sfq_sched_data *q = qdisc_priv(sch);
4536     - unsigned int hash;
4537     + unsigned int hash, dropped;
4538     sfq_index x, qlen;
4539     struct sfq_slot *slot;
4540     int uninitialized_var(ret);
4541     @@ -461,7 +461,7 @@ enqueue:
4542     return NET_XMIT_SUCCESS;
4543    
4544     qlen = slot->qlen;
4545     - sfq_drop(sch);
4546     + dropped = sfq_drop(sch);
4547     /* Return Congestion Notification only if we dropped a packet
4548     * from this flow.
4549     */
4550     @@ -469,7 +469,7 @@ enqueue:
4551     return NET_XMIT_CN;
4552    
4553     /* As we dropped a packet, better let upper stack know this */
4554     - qdisc_tree_decrease_qlen(sch, 1);
4555     + qdisc_tree_reduce_backlog(sch, 1, dropped);
4556     return NET_XMIT_SUCCESS;
4557     }
4558    
4559     @@ -537,6 +537,7 @@ static void sfq_rehash(struct Qdisc *sch)
4560     struct sfq_slot *slot;
4561     struct sk_buff_head list;
4562     int dropped = 0;
4563     + unsigned int drop_len = 0;
4564    
4565     __skb_queue_head_init(&list);
4566    
4567     @@ -565,6 +566,7 @@ static void sfq_rehash(struct Qdisc *sch)
4568     if (x >= SFQ_MAX_FLOWS) {
4569     drop:
4570     qdisc_qstats_backlog_dec(sch, skb);
4571     + drop_len += qdisc_pkt_len(skb);
4572     kfree_skb(skb);
4573     dropped++;
4574     continue;
4575     @@ -594,7 +596,7 @@ drop:
4576     }
4577     }
4578     sch->q.qlen -= dropped;
4579     - qdisc_tree_decrease_qlen(sch, dropped);
4580     + qdisc_tree_reduce_backlog(sch, dropped, drop_len);
4581     }
4582    
4583     static void sfq_perturbation(unsigned long arg)
4584     @@ -618,7 +620,7 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
4585     struct sfq_sched_data *q = qdisc_priv(sch);
4586     struct tc_sfq_qopt *ctl = nla_data(opt);
4587     struct tc_sfq_qopt_v1 *ctl_v1 = NULL;
4588     - unsigned int qlen;
4589     + unsigned int qlen, dropped = 0;
4590     struct red_parms *p = NULL;
4591    
4592     if (opt->nla_len < nla_attr_size(sizeof(*ctl)))
4593     @@ -667,8 +669,8 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
4594    
4595     qlen = sch->q.qlen;
4596     while (sch->q.qlen > q->limit)
4597     - sfq_drop(sch);
4598     - qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
4599     + dropped += sfq_drop(sch);
4600     + qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen, dropped);
4601    
4602     del_timer(&q->perturb_timer);
4603     if (q->perturb_period) {
4604     diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c
4605     index a4afde14e865..c2fbde742f37 100644
4606     --- a/net/sched/sch_tbf.c
4607     +++ b/net/sched/sch_tbf.c
4608     @@ -160,6 +160,7 @@ static int tbf_segment(struct sk_buff *skb, struct Qdisc *sch)
4609     struct tbf_sched_data *q = qdisc_priv(sch);
4610     struct sk_buff *segs, *nskb;
4611     netdev_features_t features = netif_skb_features(skb);
4612     + unsigned int len = 0, prev_len = qdisc_pkt_len(skb);
4613     int ret, nb;
4614    
4615     segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK);
4616     @@ -172,6 +173,7 @@ static int tbf_segment(struct sk_buff *skb, struct Qdisc *sch)
4617     nskb = segs->next;
4618     segs->next = NULL;
4619     qdisc_skb_cb(segs)->pkt_len = segs->len;
4620     + len += segs->len;
4621     ret = qdisc_enqueue(segs, q->qdisc);
4622     if (ret != NET_XMIT_SUCCESS) {
4623     if (net_xmit_drop_count(ret))
4624     @@ -183,7 +185,7 @@ static int tbf_segment(struct sk_buff *skb, struct Qdisc *sch)
4625     }
4626     sch->q.qlen += nb;
4627     if (nb > 1)
4628     - qdisc_tree_decrease_qlen(sch, 1 - nb);
4629     + qdisc_tree_reduce_backlog(sch, 1 - nb, prev_len - len);
4630     consume_skb(skb);
4631     return nb > 0 ? NET_XMIT_SUCCESS : NET_XMIT_DROP;
4632     }
4633     @@ -399,7 +401,8 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
4634    
4635     sch_tree_lock(sch);
4636     if (child) {
4637     - qdisc_tree_decrease_qlen(q->qdisc, q->qdisc->q.qlen);
4638     + qdisc_tree_reduce_backlog(q->qdisc, q->qdisc->q.qlen,
4639     + q->qdisc->qstats.backlog);
4640     qdisc_destroy(q->qdisc);
4641     q->qdisc = child;
4642     }
4643     @@ -502,13 +505,7 @@ static int tbf_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
4644     if (new == NULL)
4645     new = &noop_qdisc;
4646    
4647     - sch_tree_lock(sch);
4648     - *old = q->qdisc;
4649     - q->qdisc = new;
4650     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
4651     - qdisc_reset(*old);
4652     - sch_tree_unlock(sch);
4653     -
4654     + *old = qdisc_replace(sch, new, &q->qdisc);
4655     return 0;
4656     }
4657    
4658     diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
4659     index bbe65dcb9738..c93e67beaea7 100644
4660     --- a/net/vmw_vsock/af_vsock.c
4661     +++ b/net/vmw_vsock/af_vsock.c
4662     @@ -1789,27 +1789,8 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
4663     else if (sk->sk_shutdown & RCV_SHUTDOWN)
4664     err = 0;
4665    
4666     - if (copied > 0) {
4667     - /* We only do these additional bookkeeping/notification steps
4668     - * if we actually copied something out of the queue pair
4669     - * instead of just peeking ahead.
4670     - */
4671     -
4672     - if (!(flags & MSG_PEEK)) {
4673     - /* If the other side has shutdown for sending and there
4674     - * is nothing more to read, then modify the socket
4675     - * state.
4676     - */
4677     - if (vsk->peer_shutdown & SEND_SHUTDOWN) {
4678     - if (vsock_stream_has_data(vsk) <= 0) {
4679     - sk->sk_state = SS_UNCONNECTED;
4680     - sock_set_flag(sk, SOCK_DONE);
4681     - sk->sk_state_change(sk);
4682     - }
4683     - }
4684     - }
4685     + if (copied > 0)
4686     err = copied;
4687     - }
4688    
4689     out:
4690     release_sock(sk);
4691     diff --git a/net/x25/x25_facilities.c b/net/x25/x25_facilities.c
4692     index 7ecd04c21360..997ff7b2509b 100644
4693     --- a/net/x25/x25_facilities.c
4694     +++ b/net/x25/x25_facilities.c
4695     @@ -277,6 +277,7 @@ int x25_negotiate_facilities(struct sk_buff *skb, struct sock *sk,
4696    
4697     memset(&theirs, 0, sizeof(theirs));
4698     memcpy(new, ours, sizeof(*new));
4699     + memset(dte, 0, sizeof(*dte));
4700    
4701     len = x25_parse_facilities(skb, &theirs, dte, &x25->vc_facil_mask);
4702     if (len < 0)
4703     diff --git a/samples/bpf/trace_output_kern.c b/samples/bpf/trace_output_kern.c
4704     index 8d8d1ec429eb..9b96f4fb8cea 100644
4705     --- a/samples/bpf/trace_output_kern.c
4706     +++ b/samples/bpf/trace_output_kern.c
4707     @@ -18,7 +18,6 @@ int bpf_prog1(struct pt_regs *ctx)
4708     u64 cookie;
4709     } data;
4710    
4711     - memset(&data, 0, sizeof(data));
4712     data.pid = bpf_get_current_pid_tgid();
4713     data.cookie = 0x12345678;
4714    
4715     diff --git a/sound/pci/hda/hda_sysfs.c b/sound/pci/hda/hda_sysfs.c
4716     index 64e0d1d81ca5..9739fce9e032 100644
4717     --- a/sound/pci/hda/hda_sysfs.c
4718     +++ b/sound/pci/hda/hda_sysfs.c
4719     @@ -141,14 +141,6 @@ static int reconfig_codec(struct hda_codec *codec)
4720     err = snd_hda_codec_configure(codec);
4721     if (err < 0)
4722     goto error;
4723     - /* rebuild PCMs */
4724     - err = snd_hda_codec_build_pcms(codec);
4725     - if (err < 0)
4726     - goto error;
4727     - /* rebuild mixers */
4728     - err = snd_hda_codec_build_controls(codec);
4729     - if (err < 0)
4730     - goto error;
4731     err = snd_card_register(codec->card);
4732     error:
4733     snd_hda_power_down(codec);
4734     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
4735     index ac4490a96863..4918ffa5ba68 100644
4736     --- a/sound/pci/hda/patch_realtek.c
4737     +++ b/sound/pci/hda/patch_realtek.c
4738     @@ -6426,6 +6426,7 @@ enum {
4739     ALC668_FIXUP_DELL_DISABLE_AAMIX,
4740     ALC668_FIXUP_DELL_XPS13,
4741     ALC662_FIXUP_ASUS_Nx50,
4742     + ALC668_FIXUP_ASUS_Nx51,
4743     };
4744    
4745     static const struct hda_fixup alc662_fixups[] = {
4746     @@ -6672,6 +6673,15 @@ static const struct hda_fixup alc662_fixups[] = {
4747     .chained = true,
4748     .chain_id = ALC662_FIXUP_BASS_1A
4749     },
4750     + [ALC668_FIXUP_ASUS_Nx51] = {
4751     + .type = HDA_FIXUP_PINS,
4752     + .v.pins = (const struct hda_pintbl[]) {
4753     + {0x1a, 0x90170151}, /* bass speaker */
4754     + {}
4755     + },
4756     + .chained = true,
4757     + .chain_id = ALC662_FIXUP_BASS_CHMAP,
4758     + },
4759     };
4760    
4761     static const struct snd_pci_quirk alc662_fixup_tbl[] = {
4762     @@ -6694,11 +6704,14 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
4763     SND_PCI_QUIRK(0x1028, 0x0698, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
4764     SND_PCI_QUIRK(0x1028, 0x069f, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
4765     SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
4766     + SND_PCI_QUIRK(0x1043, 0x1080, "Asus UX501VW", ALC668_FIXUP_HEADSET_MODE),
4767     SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_ASUS_Nx50),
4768     SND_PCI_QUIRK(0x1043, 0x13df, "Asus N550JX", ALC662_FIXUP_BASS_1A),
4769     SND_PCI_QUIRK(0x1043, 0x129d, "Asus N750", ALC662_FIXUP_ASUS_Nx50),
4770     SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_MODE4_CHMAP),
4771     SND_PCI_QUIRK(0x1043, 0x15a7, "ASUS UX51VZH", ALC662_FIXUP_BASS_16),
4772     + SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51),
4773     + SND_PCI_QUIRK(0x1043, 0x17bd, "ASUS N751", ALC668_FIXUP_ASUS_Nx51),
4774     SND_PCI_QUIRK(0x1043, 0x1b73, "ASUS N55SF", ALC662_FIXUP_BASS_16),
4775     SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_MODE4_CHMAP),
4776     SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
4777     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
4778     index 001fb4dc0722..db11ecf0b74d 100644
4779     --- a/sound/usb/quirks.c
4780     +++ b/sound/usb/quirks.c
4781     @@ -1138,8 +1138,11 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
4782     case USB_ID(0x047F, 0x0415): /* Plantronics BT-300 */
4783     case USB_ID(0x047F, 0xAA05): /* Plantronics DA45 */
4784     case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
4785     + case USB_ID(0x0556, 0x0014): /* Phoenix Audio TMX320VC */
4786     case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */
4787     + case USB_ID(0x1de7, 0x0013): /* Phoenix Audio MT202exe */
4788     case USB_ID(0x1de7, 0x0014): /* Phoenix Audio TMX320 */
4789     + case USB_ID(0x1de7, 0x0114): /* Phoenix Audio MT202pcs */
4790     case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */
4791     return true;
4792     }
4793     diff --git a/tools/lib/traceevent/parse-filter.c b/tools/lib/traceevent/parse-filter.c
4794     index 0144b3d1bb77..88cccea3ca99 100644
4795     --- a/tools/lib/traceevent/parse-filter.c
4796     +++ b/tools/lib/traceevent/parse-filter.c
4797     @@ -1164,11 +1164,11 @@ process_filter(struct event_format *event, struct filter_arg **parg,
4798     current_op = current_exp;
4799    
4800     ret = collapse_tree(current_op, parg, error_str);
4801     + /* collapse_tree() may free current_op, and updates parg accordingly */
4802     + current_op = NULL;
4803     if (ret < 0)
4804     goto fail;
4805    
4806     - *parg = current_op;
4807     -
4808     free(token);
4809     return 0;
4810    
4811     diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
4812     index ec722346e6ff..16892a7ca27e 100644
4813     --- a/tools/perf/util/sort.c
4814     +++ b/tools/perf/util/sort.c
4815     @@ -2272,6 +2272,9 @@ static char *prefix_if_not_in(const char *pre, char *str)
4816    
4817     static char *setup_overhead(char *keys)
4818     {
4819     + if (sort__mode == SORT_MODE__DIFF)
4820     + return keys;
4821     +
4822     keys = prefix_if_not_in("overhead", keys);
4823    
4824     if (symbol_conf.cumulate_callchain)