]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.10
authorSasha Levin <sashal@kernel.org>
Tue, 30 Mar 2021 21:59:20 +0000 (17:59 -0400)
committerSasha Levin <sashal@kernel.org>
Tue, 30 Mar 2021 21:59:20 +0000 (17:59 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
35 files changed:
queue-5.10/asoc-cs42l42-always-wait-at-least-3ms-after-reset.patch [new file with mode: 0644]
queue-5.10/asoc-cs42l42-fix-bitclock-polarity-inversion.patch [new file with mode: 0644]
queue-5.10/asoc-cs42l42-fix-channel-width-support.patch [new file with mode: 0644]
queue-5.10/asoc-cs42l42-fix-mixer-volume-control.patch [new file with mode: 0644]
queue-5.10/asoc-es8316-simplify-adc_pga_gain_tlv-table.patch [new file with mode: 0644]
queue-5.10/asoc-rt1015-fix-i2c-communication-error.patch [new file with mode: 0644]
queue-5.10/asoc-rt5640-fix-dac-and-adc-vol-tlv-values-being-off.patch [new file with mode: 0644]
queue-5.10/asoc-rt5651-fix-dac-and-adc-vol-tlv-values-being-off.patch [new file with mode: 0644]
queue-5.10/asoc-rt5659-update-mclk-rate-in-set_sysclk.patch [new file with mode: 0644]
queue-5.10/asoc-rt711-add-snd_soc_component-remove-callback.patch [new file with mode: 0644]
queue-5.10/asoc-sgtl5000-set-dap_avc_ctrl-register-to-correct-d.patch [new file with mode: 0644]
queue-5.10/asoc-soc-core-prevent-warning-if-no-dmi-table-is-pre.patch [new file with mode: 0644]
queue-5.10/ext4-do-not-iput-inode-under-running-transaction-in-.patch [new file with mode: 0644]
queue-5.10/ext4-fix-bh-ref-count-on-error-paths.patch [new file with mode: 0644]
queue-5.10/ext4-shrink-race-window-in-ext4_should_retry_alloc.patch [new file with mode: 0644]
queue-5.10/fs-nfsd-fix-kconfig-dependency-warning-for-nfsd_v4.patch [new file with mode: 0644]
queue-5.10/io_uring-call-req_set_fail_links-on-short-send-msg-r.patch [new file with mode: 0644]
queue-5.10/io_uring-fix-flags-races-by-linked-timeouts.patch [new file with mode: 0644]
queue-5.10/io_uring-imply-msg_nosignal-for-send-msg-recv-msg-ca.patch [new file with mode: 0644]
queue-5.10/iomap-fix-negative-assignment-to-unsigned-sis-pages-.patch [new file with mode: 0644]
queue-5.10/kernel-freezer-should-treat-pf_io_worker-like-pf_kth.patch [new file with mode: 0644]
queue-5.10/locking-ww_mutex-fix-acquire-release-imbalance-in-ww.patch [new file with mode: 0644]
queue-5.10/locking-ww_mutex-simplify-use_ww_ctx-ww_ctx-handling.patch [new file with mode: 0644]
queue-5.10/nfsd-fix-error-handling-in-nfsv4.0-callbacks.patch [new file with mode: 0644]
queue-5.10/nvmet-tcp-fix-kmap-leak-when-data-digest-in-use.patch [new file with mode: 0644]
queue-5.10/rpc-fix-null-dereference-on-kmalloc-failure.patch [new file with mode: 0644]
queue-5.10/scsi-qla2xxx-fix-broken-endif-placement.patch [new file with mode: 0644]
queue-5.10/scsi-st-fix-a-use-after-free-in-st_open.patch [new file with mode: 0644]
queue-5.10/series
queue-5.10/staging-comedi-cb_pcidas-fix-request_irq-warn.patch [new file with mode: 0644]
queue-5.10/staging-comedi-cb_pcidas64-fix-request_irq-warn.patch [new file with mode: 0644]
queue-5.10/static_call-align-static_call_is_init-patching-condi.patch [new file with mode: 0644]
queue-5.10/thermal-core-add-null-pointer-check-before-using-coo.patch [new file with mode: 0644]
queue-5.10/vhost-fix-vhost_vq_reset.patch [new file with mode: 0644]
queue-5.10/virtiofs-fail-dax-mount-if-device-does-not-support-i.patch [new file with mode: 0644]

diff --git a/queue-5.10/asoc-cs42l42-always-wait-at-least-3ms-after-reset.patch b/queue-5.10/asoc-cs42l42-always-wait-at-least-3ms-after-reset.patch
new file mode 100644 (file)
index 0000000..8c5ce34
--- /dev/null
@@ -0,0 +1,57 @@
+From bf08bc7356e32cca1b0b64d50f839695e72e2ccd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 5 Mar 2021 17:34:32 +0000
+Subject: ASoC: cs42l42: Always wait at least 3ms after reset
+
+From: Lucas Tanure <tanureal@opensource.cirrus.com>
+
+[ Upstream commit 19325cfea04446bc79b36bffd4978af15f46a00e ]
+
+This delay is part of the power-up sequence defined in the datasheet.
+A runtime_resume is a power-up so must also include the delay.
+
+Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
+Link: https://lore.kernel.org/r/20210305173442.195740-6-tanureal@opensource.cirrus.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/cs42l42.c | 3 ++-
+ sound/soc/codecs/cs42l42.h | 1 +
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c
+index d5078ce79fad..4d82d24c7828 100644
+--- a/sound/soc/codecs/cs42l42.c
++++ b/sound/soc/codecs/cs42l42.c
+@@ -1794,7 +1794,7 @@ static int cs42l42_i2c_probe(struct i2c_client *i2c_client,
+               dev_dbg(&i2c_client->dev, "Found reset GPIO\n");
+               gpiod_set_value_cansleep(cs42l42->reset_gpio, 1);
+       }
+-      mdelay(3);
++      usleep_range(CS42L42_BOOT_TIME_US, CS42L42_BOOT_TIME_US * 2);
+       /* Request IRQ */
+       ret = devm_request_threaded_irq(&i2c_client->dev,
+@@ -1919,6 +1919,7 @@ static int cs42l42_runtime_resume(struct device *dev)
+       }
+       gpiod_set_value_cansleep(cs42l42->reset_gpio, 1);
++      usleep_range(CS42L42_BOOT_TIME_US, CS42L42_BOOT_TIME_US * 2);
+       regcache_cache_only(cs42l42->regmap, false);
+       regcache_sync(cs42l42->regmap);
+diff --git a/sound/soc/codecs/cs42l42.h b/sound/soc/codecs/cs42l42.h
+index 9b017b76828a..866d7c873e3c 100644
+--- a/sound/soc/codecs/cs42l42.h
++++ b/sound/soc/codecs/cs42l42.h
+@@ -740,6 +740,7 @@
+ #define CS42L42_FRAC2_VAL(val)        (((val) & 0xff0000) >> 16)
+ #define CS42L42_NUM_SUPPLIES  5
++#define CS42L42_BOOT_TIME_US  3000
+ static const char *const cs42l42_supply_names[CS42L42_NUM_SUPPLIES] = {
+       "VA",
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-cs42l42-fix-bitclock-polarity-inversion.patch b/queue-5.10/asoc-cs42l42-fix-bitclock-polarity-inversion.patch
new file mode 100644 (file)
index 0000000..807b94e
--- /dev/null
@@ -0,0 +1,87 @@
+From d67d32e696e00f09f314cfb0a8de65ecb2b564f1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 5 Mar 2021 17:34:28 +0000
+Subject: ASoC: cs42l42: Fix Bitclock polarity inversion
+
+From: Lucas Tanure <tanureal@opensource.cirrus.com>
+
+[ Upstream commit e793c965519b8b7f2fea51a48398405e2a501729 ]
+
+The driver was setting bit clock polarity opposite to intended polarity.
+Also simplify the code by grouping ADC and DAC clock configurations into
+a single field.
+
+Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
+Link: https://lore.kernel.org/r/20210305173442.195740-2-tanureal@opensource.cirrus.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/cs42l42.c | 20 ++++++++------------
+ sound/soc/codecs/cs42l42.h | 11 ++++++-----
+ 2 files changed, 14 insertions(+), 17 deletions(-)
+
+diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c
+index 210fcbedf241..df0d5fec0287 100644
+--- a/sound/soc/codecs/cs42l42.c
++++ b/sound/soc/codecs/cs42l42.c
+@@ -797,27 +797,23 @@ static int cs42l42_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
+       /* Bitclock/frame inversion */
+       switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+       case SND_SOC_DAIFMT_NB_NF:
++              asp_cfg_val |= CS42L42_ASP_SCPOL_NOR << CS42L42_ASP_SCPOL_SHIFT;
+               break;
+       case SND_SOC_DAIFMT_NB_IF:
+-              asp_cfg_val |= CS42L42_ASP_POL_INV <<
+-                              CS42L42_ASP_LCPOL_IN_SHIFT;
++              asp_cfg_val |= CS42L42_ASP_SCPOL_NOR << CS42L42_ASP_SCPOL_SHIFT;
++              asp_cfg_val |= CS42L42_ASP_LCPOL_INV << CS42L42_ASP_LCPOL_SHIFT;
+               break;
+       case SND_SOC_DAIFMT_IB_NF:
+-              asp_cfg_val |= CS42L42_ASP_POL_INV <<
+-                              CS42L42_ASP_SCPOL_IN_DAC_SHIFT;
+               break;
+       case SND_SOC_DAIFMT_IB_IF:
+-              asp_cfg_val |= CS42L42_ASP_POL_INV <<
+-                              CS42L42_ASP_LCPOL_IN_SHIFT;
+-              asp_cfg_val |= CS42L42_ASP_POL_INV <<
+-                              CS42L42_ASP_SCPOL_IN_DAC_SHIFT;
++              asp_cfg_val |= CS42L42_ASP_LCPOL_INV << CS42L42_ASP_LCPOL_SHIFT;
+               break;
+       }
+-      snd_soc_component_update_bits(component, CS42L42_ASP_CLK_CFG,
+-                              CS42L42_ASP_MODE_MASK |
+-                              CS42L42_ASP_SCPOL_IN_DAC_MASK |
+-                              CS42L42_ASP_LCPOL_IN_MASK, asp_cfg_val);
++      snd_soc_component_update_bits(component, CS42L42_ASP_CLK_CFG, CS42L42_ASP_MODE_MASK |
++                                                                    CS42L42_ASP_SCPOL_MASK |
++                                                                    CS42L42_ASP_LCPOL_MASK,
++                                                                    asp_cfg_val);
+       return 0;
+ }
+diff --git a/sound/soc/codecs/cs42l42.h b/sound/soc/codecs/cs42l42.h
+index 9e3cc528dcff..1f0d67c95a9a 100644
+--- a/sound/soc/codecs/cs42l42.h
++++ b/sound/soc/codecs/cs42l42.h
+@@ -258,11 +258,12 @@
+ #define CS42L42_ASP_SLAVE_MODE                0x00
+ #define CS42L42_ASP_MODE_SHIFT                4
+ #define CS42L42_ASP_MODE_MASK         (1 << CS42L42_ASP_MODE_SHIFT)
+-#define CS42L42_ASP_SCPOL_IN_DAC_SHIFT        2
+-#define CS42L42_ASP_SCPOL_IN_DAC_MASK (1 << CS42L42_ASP_SCPOL_IN_DAC_SHIFT)
+-#define CS42L42_ASP_LCPOL_IN_SHIFT    0
+-#define CS42L42_ASP_LCPOL_IN_MASK     (1 << CS42L42_ASP_LCPOL_IN_SHIFT)
+-#define CS42L42_ASP_POL_INV           1
++#define CS42L42_ASP_SCPOL_SHIFT               2
++#define CS42L42_ASP_SCPOL_MASK                (3 << CS42L42_ASP_SCPOL_SHIFT)
++#define CS42L42_ASP_SCPOL_NOR         3
++#define CS42L42_ASP_LCPOL_SHIFT               0
++#define CS42L42_ASP_LCPOL_MASK                (3 << CS42L42_ASP_LCPOL_SHIFT)
++#define CS42L42_ASP_LCPOL_INV         3
+ #define CS42L42_ASP_FRM_CFG           (CS42L42_PAGE_12 + 0x08)
+ #define CS42L42_ASP_STP_SHIFT         4
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-cs42l42-fix-channel-width-support.patch b/queue-5.10/asoc-cs42l42-fix-channel-width-support.patch
new file mode 100644 (file)
index 0000000..9bf7c92
--- /dev/null
@@ -0,0 +1,112 @@
+From d19f71b49e98dc9674a6e85e1ceb7e445a4cd5f8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 5 Mar 2021 17:34:29 +0000
+Subject: ASoC: cs42l42: Fix channel width support
+
+From: Lucas Tanure <tanureal@opensource.cirrus.com>
+
+[ Upstream commit 2bdc4f5c6838f7c3feb4fe68e4edbeea158ec0a2 ]
+
+Remove the hard coded 32 bits width and replace with the correct width
+calculated by params_width.
+
+Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
+Link: https://lore.kernel.org/r/20210305173442.195740-3-tanureal@opensource.cirrus.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/cs42l42.c | 47 ++++++++++++++++++--------------------
+ sound/soc/codecs/cs42l42.h |  1 -
+ 2 files changed, 22 insertions(+), 26 deletions(-)
+
+diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c
+index df0d5fec0287..4f9ad9547929 100644
+--- a/sound/soc/codecs/cs42l42.c
++++ b/sound/soc/codecs/cs42l42.c
+@@ -691,24 +691,6 @@ static int cs42l42_pll_config(struct snd_soc_component *component)
+                                       CS42L42_CLK_OASRC_SEL_MASK,
+                                       CS42L42_CLK_OASRC_SEL_12 <<
+                                       CS42L42_CLK_OASRC_SEL_SHIFT);
+-                      /* channel 1 on low LRCLK, 32 bit */
+-                      snd_soc_component_update_bits(component,
+-                                      CS42L42_ASP_RX_DAI0_CH1_AP_RES,
+-                                      CS42L42_ASP_RX_CH_AP_MASK |
+-                                      CS42L42_ASP_RX_CH_RES_MASK,
+-                                      (CS42L42_ASP_RX_CH_AP_LOW <<
+-                                      CS42L42_ASP_RX_CH_AP_SHIFT) |
+-                                      (CS42L42_ASP_RX_CH_RES_32 <<
+-                                      CS42L42_ASP_RX_CH_RES_SHIFT));
+-                      /* Channel 2 on high LRCLK, 32 bit */
+-                      snd_soc_component_update_bits(component,
+-                                      CS42L42_ASP_RX_DAI0_CH2_AP_RES,
+-                                      CS42L42_ASP_RX_CH_AP_MASK |
+-                                      CS42L42_ASP_RX_CH_RES_MASK,
+-                                      (CS42L42_ASP_RX_CH_AP_HI <<
+-                                      CS42L42_ASP_RX_CH_AP_SHIFT) |
+-                                      (CS42L42_ASP_RX_CH_RES_32 <<
+-                                      CS42L42_ASP_RX_CH_RES_SHIFT));
+                       if (pll_ratio_table[i].mclk_src_sel == 0) {
+                               /* Pass the clock straight through */
+                               snd_soc_component_update_bits(component,
+@@ -824,14 +806,29 @@ static int cs42l42_pcm_hw_params(struct snd_pcm_substream *substream,
+ {
+       struct snd_soc_component *component = dai->component;
+       struct cs42l42_private *cs42l42 = snd_soc_component_get_drvdata(component);
+-      int retval;
++      unsigned int width = (params_width(params) / 8) - 1;
++      unsigned int val = 0;
+       cs42l42->srate = params_rate(params);
+-      cs42l42->swidth = params_width(params);
+-      retval = cs42l42_pll_config(component);
++      switch(substream->stream) {
++      case SNDRV_PCM_STREAM_PLAYBACK:
++              val |= width << CS42L42_ASP_RX_CH_RES_SHIFT;
++              /* channel 1 on low LRCLK */
++              snd_soc_component_update_bits(component, CS42L42_ASP_RX_DAI0_CH1_AP_RES,
++                                                       CS42L42_ASP_RX_CH_AP_MASK |
++                                                       CS42L42_ASP_RX_CH_RES_MASK, val);
++              /* Channel 2 on high LRCLK */
++              val |= CS42L42_ASP_RX_CH_AP_HI << CS42L42_ASP_RX_CH_AP_SHIFT;
++              snd_soc_component_update_bits(component, CS42L42_ASP_RX_DAI0_CH2_AP_RES,
++                                                       CS42L42_ASP_RX_CH_AP_MASK |
++                                                       CS42L42_ASP_RX_CH_RES_MASK, val);
++              break;
++      default:
++              break;
++      }
+-      return retval;
++      return cs42l42_pll_config(component);
+ }
+ static int cs42l42_set_sysclk(struct snd_soc_dai *dai,
+@@ -896,9 +893,9 @@ static int cs42l42_mute(struct snd_soc_dai *dai, int mute, int direction)
+       return 0;
+ }
+-#define CS42L42_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE | \
+-                      SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE | \
+-                      SNDRV_PCM_FMTBIT_S32_LE)
++#define CS42L42_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
++                       SNDRV_PCM_FMTBIT_S24_LE |\
++                       SNDRV_PCM_FMTBIT_S32_LE )
+ static const struct snd_soc_dai_ops cs42l42_ops = {
+diff --git a/sound/soc/codecs/cs42l42.h b/sound/soc/codecs/cs42l42.h
+index 1f0d67c95a9a..9b017b76828a 100644
+--- a/sound/soc/codecs/cs42l42.h
++++ b/sound/soc/codecs/cs42l42.h
+@@ -757,7 +757,6 @@ struct  cs42l42_private {
+       struct completion pdn_done;
+       u32 sclk;
+       u32 srate;
+-      u32 swidth;
+       u8 plug_state;
+       u8 hs_type;
+       u8 ts_inv;
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-cs42l42-fix-mixer-volume-control.patch b/queue-5.10/asoc-cs42l42-fix-mixer-volume-control.patch
new file mode 100644 (file)
index 0000000..1447539
--- /dev/null
@@ -0,0 +1,44 @@
+From 5ce2b6035db13af7fb868588d517bf5fd4b4834a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 5 Mar 2021 17:34:30 +0000
+Subject: ASoC: cs42l42: Fix mixer volume control
+
+From: Lucas Tanure <tanureal@opensource.cirrus.com>
+
+[ Upstream commit 72d904763ae6a8576e7ad034f9da4f0e3c44bf24 ]
+
+The minimum value is 0x3f (-63dB), which also is mute
+
+Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
+Link: https://lore.kernel.org/r/20210305173442.195740-4-tanureal@opensource.cirrus.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/cs42l42.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c
+index 4f9ad9547929..d5078ce79fad 100644
+--- a/sound/soc/codecs/cs42l42.c
++++ b/sound/soc/codecs/cs42l42.c
+@@ -401,7 +401,7 @@ static const struct regmap_config cs42l42_regmap = {
+ };
+ static DECLARE_TLV_DB_SCALE(adc_tlv, -9600, 100, false);
+-static DECLARE_TLV_DB_SCALE(mixer_tlv, -6200, 100, false);
++static DECLARE_TLV_DB_SCALE(mixer_tlv, -6300, 100, true);
+ static const char * const cs42l42_hpf_freq_text[] = {
+       "1.86Hz", "120Hz", "235Hz", "466Hz"
+@@ -458,7 +458,7 @@ static const struct snd_kcontrol_new cs42l42_snd_controls[] = {
+                               CS42L42_DAC_HPF_EN_SHIFT, true, false),
+       SOC_DOUBLE_R_TLV("Mixer Volume", CS42L42_MIXER_CHA_VOL,
+                        CS42L42_MIXER_CHB_VOL, CS42L42_MIXER_CH_VOL_SHIFT,
+-                              0x3e, 1, mixer_tlv)
++                              0x3f, 1, mixer_tlv)
+ };
+ static int cs42l42_hpdrv_evt(struct snd_soc_dapm_widget *w,
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-es8316-simplify-adc_pga_gain_tlv-table.patch b/queue-5.10/asoc-es8316-simplify-adc_pga_gain_tlv-table.patch
new file mode 100644 (file)
index 0000000..06a65cb
--- /dev/null
@@ -0,0 +1,48 @@
+From 6cec4a111ca56c5eccfb8d56d837d003c1856ae8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 28 Feb 2021 17:04:41 +0100
+Subject: ASoC: es8316: Simplify adc_pga_gain_tlv table
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit bb18c678754ce1514100fb4c0bf6113b5af36c48 ]
+
+Most steps in this table are steps of 3dB (300 centi-dB), so we can
+simplify the table.
+
+This not only reduces the amount of space it takes inside the kernel,
+this also makes alsa-lib's mixer code actually accept the table, where
+as before this change alsa-lib saw the "ADC PGA Gain" control as a
+control without a dB scale.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20210228160441.241110-1-hdegoede@redhat.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/es8316.c | 9 ++-------
+ 1 file changed, 2 insertions(+), 7 deletions(-)
+
+diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c
+index bd5d230c5df2..609459077f9d 100644
+--- a/sound/soc/codecs/es8316.c
++++ b/sound/soc/codecs/es8316.c
+@@ -63,13 +63,8 @@ static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(adc_pga_gain_tlv,
+       1, 1, TLV_DB_SCALE_ITEM(0, 0, 0),
+       2, 2, TLV_DB_SCALE_ITEM(250, 0, 0),
+       3, 3, TLV_DB_SCALE_ITEM(450, 0, 0),
+-      4, 4, TLV_DB_SCALE_ITEM(700, 0, 0),
+-      5, 5, TLV_DB_SCALE_ITEM(1000, 0, 0),
+-      6, 6, TLV_DB_SCALE_ITEM(1300, 0, 0),
+-      7, 7, TLV_DB_SCALE_ITEM(1600, 0, 0),
+-      8, 8, TLV_DB_SCALE_ITEM(1800, 0, 0),
+-      9, 9, TLV_DB_SCALE_ITEM(2100, 0, 0),
+-      10, 10, TLV_DB_SCALE_ITEM(2400, 0, 0),
++      4, 7, TLV_DB_SCALE_ITEM(700, 300, 0),
++      8, 10, TLV_DB_SCALE_ITEM(1800, 300, 0),
+ );
+ static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(hpout_vol_tlv,
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-rt1015-fix-i2c-communication-error.patch b/queue-5.10/asoc-rt1015-fix-i2c-communication-error.patch
new file mode 100644 (file)
index 0000000..f7d021d
--- /dev/null
@@ -0,0 +1,34 @@
+From 521ec94233e863c2a61f7340eea2d568cd8053a9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 22 Feb 2021 17:00:56 +0800
+Subject: ASoC: rt1015: fix i2c communication error
+
+From: Jack Yu <jack.yu@realtek.com>
+
+[ Upstream commit 9e0bdaa9fcb8c64efc1487a7fba07722e7bc515e ]
+
+Remove 0x100 cache re-sync to solve i2c communication error.
+
+Signed-off-by: Jack Yu <jack.yu@realtek.com>
+Link: https://lore.kernel.org/r/20210222090057.29532-1-jack.yu@realtek.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/rt1015.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sound/soc/codecs/rt1015.c b/sound/soc/codecs/rt1015.c
+index 3db07293c70b..2627910060dc 100644
+--- a/sound/soc/codecs/rt1015.c
++++ b/sound/soc/codecs/rt1015.c
+@@ -209,6 +209,7 @@ static bool rt1015_volatile_register(struct device *dev, unsigned int reg)
+       case RT1015_VENDOR_ID:
+       case RT1015_DEVICE_ID:
+       case RT1015_PRO_ALT:
++      case RT1015_MAN_I2C:
+       case RT1015_DAC3:
+       case RT1015_VBAT_TEST_OUT1:
+       case RT1015_VBAT_TEST_OUT2:
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-rt5640-fix-dac-and-adc-vol-tlv-values-being-off.patch b/queue-5.10/asoc-rt5640-fix-dac-and-adc-vol-tlv-values-being-off.patch
new file mode 100644 (file)
index 0000000..f52ac14
--- /dev/null
@@ -0,0 +1,54 @@
+From 4ab45b64f9f597c1fc7ec2c82bc9b3cbae9633ba Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 26 Feb 2021 15:38:13 +0100
+Subject: ASoC: rt5640: Fix dac- and adc- vol-tlv values being off by a factor
+ of 10
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit cfa26ed1f9f885c2fd8f53ca492989d1e16d0199 ]
+
+The adc_vol_tlv volume-control has a range from -17.625 dB to +30 dB,
+not -176.25 dB to + 300 dB. This wrong scale is esp. a problem in userspace
+apps which translate the dB scale to a linear scale. With the logarithmic
+dB scale being of by a factor of 10 we loose all precision in the lower
+area of the range when apps translate things to a linear scale.
+
+E.g. the 0 dB default, which corresponds with a value of 47 of the
+0 - 127 range for the control, would be shown as 0/100 in alsa-mixer.
+
+Since the centi-dB values used in the TLV struct cannot represent the
+0.375 dB step size used by these controls, change the TLV definition
+for them to specify a min and max value instead of min + stepsize.
+
+Note this mirrors commit 3f31f7d9b540 ("ASoC: rt5670: Fix dac- and adc-
+vol-tlv values being off by a factor of 10") which made the exact same
+change to the rt5670 codec driver.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20210226143817.84287-2-hdegoede@redhat.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/rt5640.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c
+index 1414ad15d01c..a5674c227b3a 100644
+--- a/sound/soc/codecs/rt5640.c
++++ b/sound/soc/codecs/rt5640.c
+@@ -339,9 +339,9 @@ static bool rt5640_readable_register(struct device *dev, unsigned int reg)
+ }
+ static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
+-static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0);
++static const DECLARE_TLV_DB_MINMAX(dac_vol_tlv, -6562, 0);
+ static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
+-static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
++static const DECLARE_TLV_DB_MINMAX(adc_vol_tlv, -1762, 3000);
+ static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
+ /* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-rt5651-fix-dac-and-adc-vol-tlv-values-being-off.patch b/queue-5.10/asoc-rt5651-fix-dac-and-adc-vol-tlv-values-being-off.patch
new file mode 100644 (file)
index 0000000..4825937
--- /dev/null
@@ -0,0 +1,54 @@
+From 15990428a579154a6fc67478ab8f2427db0ca607 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 26 Feb 2021 15:38:14 +0100
+Subject: ASoC: rt5651: Fix dac- and adc- vol-tlv values being off by a factor
+ of 10
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit eee51df776bd6cac10a76b2779a9fdee3f622b2b ]
+
+The adc_vol_tlv volume-control has a range from -17.625 dB to +30 dB,
+not -176.25 dB to + 300 dB. This wrong scale is esp. a problem in userspace
+apps which translate the dB scale to a linear scale. With the logarithmic
+dB scale being of by a factor of 10 we loose all precision in the lower
+area of the range when apps translate things to a linear scale.
+
+E.g. the 0 dB default, which corresponds with a value of 47 of the
+0 - 127 range for the control, would be shown as 0/100 in alsa-mixer.
+
+Since the centi-dB values used in the TLV struct cannot represent the
+0.375 dB step size used by these controls, change the TLV definition
+for them to specify a min and max value instead of min + stepsize.
+
+Note this mirrors commit 3f31f7d9b540 ("ASoC: rt5670: Fix dac- and adc-
+vol-tlv values being off by a factor of 10") which made the exact same
+change to the rt5670 codec driver.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20210226143817.84287-3-hdegoede@redhat.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/rt5651.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
+index d198e191fb0c..e59fdc81dbd4 100644
+--- a/sound/soc/codecs/rt5651.c
++++ b/sound/soc/codecs/rt5651.c
+@@ -285,9 +285,9 @@ static bool rt5651_readable_register(struct device *dev, unsigned int reg)
+ }
+ static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
+-static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0);
++static const DECLARE_TLV_DB_MINMAX(dac_vol_tlv, -6562, 0);
+ static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
+-static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
++static const DECLARE_TLV_DB_MINMAX(adc_vol_tlv, -1762, 3000);
+ static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
+ /* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-rt5659-update-mclk-rate-in-set_sysclk.patch b/queue-5.10/asoc-rt5659-update-mclk-rate-in-set_sysclk.patch
new file mode 100644 (file)
index 0000000..7ff9fc1
--- /dev/null
@@ -0,0 +1,49 @@
+From 58cbaab7f5b55f32b54e47148a20e1e160b4fc14 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 15 Mar 2021 23:01:32 +0530
+Subject: ASoC: rt5659: Update MCLK rate in set_sysclk()
+
+From: Sameer Pujar <spujar@nvidia.com>
+
+[ Upstream commit dbf54a9534350d6aebbb34f5c1c606b81a4f35dd ]
+
+Simple-card/audio-graph-card drivers do not handle MCLK clock when it
+is specified in the codec device node. The expectation here is that,
+the codec should actually own up the MCLK clock and do necessary setup
+in the driver.
+
+Suggested-by: Mark Brown <broonie@kernel.org>
+Suggested-by: Michael Walle <michael@walle.cc>
+Signed-off-by: Sameer Pujar <spujar@nvidia.com>
+Link: https://lore.kernel.org/r/1615829492-8972-3-git-send-email-spujar@nvidia.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/rt5659.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/sound/soc/codecs/rt5659.c b/sound/soc/codecs/rt5659.c
+index 41e5917b16a5..91a4ef7f620c 100644
+--- a/sound/soc/codecs/rt5659.c
++++ b/sound/soc/codecs/rt5659.c
+@@ -3426,12 +3426,17 @@ static int rt5659_set_component_sysclk(struct snd_soc_component *component, int
+ {
+       struct rt5659_priv *rt5659 = snd_soc_component_get_drvdata(component);
+       unsigned int reg_val = 0;
++      int ret;
+       if (freq == rt5659->sysclk && clk_id == rt5659->sysclk_src)
+               return 0;
+       switch (clk_id) {
+       case RT5659_SCLK_S_MCLK:
++              ret = clk_set_rate(rt5659->mclk, freq);
++              if (ret)
++                      return ret;
++
+               reg_val |= RT5659_SCLK_SRC_MCLK;
+               break;
+       case RT5659_SCLK_S_PLL1:
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-rt711-add-snd_soc_component-remove-callback.patch b/queue-5.10/asoc-rt711-add-snd_soc_component-remove-callback.patch
new file mode 100644 (file)
index 0000000..869d8b2
--- /dev/null
@@ -0,0 +1,55 @@
+From 26ff99bc014fef3a00167ad14ccb85d163d46864 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 Mar 2021 08:52:54 +0800
+Subject: ASoC: rt711: add snd_soc_component remove callback
+
+From: Bard Liao <yung-chuan.liao@linux.intel.com>
+
+[ Upstream commit 899b12542b0897f92de9ba30944937c39ebb246d ]
+
+We do some IO operations in the snd_soc_component_set_jack callback
+function and snd_soc_component_set_jack() will be called when soc
+component is removed. However, we should not access SoundWire registers
+when the bus is suspended.
+So set regcache_cache_only(regmap, true) to avoid accessing in the
+soc component removal process.
+
+Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
+Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
+Reviewed-by: Rander Wang <rander.wang@intel.com>
+Link: https://lore.kernel.org/r/20210316005254.29699-1-yung-chuan.liao@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/rt711.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/sound/soc/codecs/rt711.c b/sound/soc/codecs/rt711.c
+index a9b1b4180c47..93d86f7558e0 100644
+--- a/sound/soc/codecs/rt711.c
++++ b/sound/soc/codecs/rt711.c
+@@ -895,6 +895,13 @@ static int rt711_probe(struct snd_soc_component *component)
+       return 0;
+ }
++static void rt711_remove(struct snd_soc_component *component)
++{
++      struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
++
++      regcache_cache_only(rt711->regmap, true);
++}
++
+ static const struct snd_soc_component_driver soc_codec_dev_rt711 = {
+       .probe = rt711_probe,
+       .set_bias_level = rt711_set_bias_level,
+@@ -905,6 +912,7 @@ static const struct snd_soc_component_driver soc_codec_dev_rt711 = {
+       .dapm_routes = rt711_audio_map,
+       .num_dapm_routes = ARRAY_SIZE(rt711_audio_map),
+       .set_jack = rt711_set_jack_detect,
++      .remove = rt711_remove,
+ };
+ static int rt711_set_sdw_stream(struct snd_soc_dai *dai, void *sdw_stream,
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-sgtl5000-set-dap_avc_ctrl-register-to-correct-d.patch b/queue-5.10/asoc-sgtl5000-set-dap_avc_ctrl-register-to-correct-d.patch
new file mode 100644 (file)
index 0000000..76942aa
--- /dev/null
@@ -0,0 +1,72 @@
+From b0309f12b570870800105929b36373713a6a8e7c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 19 Feb 2021 13:33:08 -0500
+Subject: ASoC: sgtl5000: set DAP_AVC_CTRL register to correct default value on
+ probe
+
+From: Benjamin Rood <benjaminjrood@gmail.com>
+
+[ Upstream commit f86f58e3594fb0ab1993d833d3b9a2496f3c928c ]
+
+According to the SGTL5000 datasheet [1], the DAP_AVC_CTRL register has
+the following bit field definitions:
+
+| BITS  | FIELD       | RW | RESET | DEFINITION                        |
+| 15    | RSVD        | RO | 0x0   | Reserved                          |
+| 14    | RSVD        | RW | 0x1   | Reserved                          |
+| 13:12 | MAX_GAIN    | RW | 0x1   | Max Gain of AVC in expander mode  |
+| 11:10 | RSVD        | RO | 0x0   | Reserved                          |
+| 9:8   | LBI_RESP    | RW | 0x1   | Integrator Response               |
+| 7:6   | RSVD        | RO | 0x0   | Reserved                          |
+| 5     | HARD_LMT_EN | RW | 0x0   | Enable hard limiter mode          |
+| 4:1   | RSVD        | RO | 0x0   | Reserved                          |
+| 0     | EN          | RW | 0x0   | Enable/Disable AVC                |
+
+The original default value written to the DAP_AVC_CTRL register during
+sgtl5000_i2c_probe() was 0x0510.  This would incorrectly write values to
+bits 4 and 10, which are defined as RESERVED.  It would also not set
+bits 12 and 14 to their correct RESET values of 0x1, and instead set
+them to 0x0.  While the DAP_AVC module is effectively disabled because
+the EN bit is 0, this default value is still writing invalid values to
+registers that are marked as read-only and RESERVED as well as not
+setting bits 12 and 14 to their correct default values as defined by the
+datasheet.
+
+The correct value that should be written to the DAP_AVC_CTRL register is
+0x5100, which configures the register bits to the default values defined
+by the datasheet, and prevents any writes to bits defined as
+'read-only'.  Generally speaking, it is best practice to NOT attempt to
+write values to registers/bits defined as RESERVED, as it generally
+produces unwanted/undefined behavior, or errors.
+
+Also, all credit for this patch should go to my colleague Dan MacDonald
+<dmacdonald@curbellmedical.com> for finding this error in the first
+place.
+
+[1] https://www.nxp.com/docs/en/data-sheet/SGTL5000.pdf
+
+Signed-off-by: Benjamin Rood <benjaminjrood@gmail.com>
+Reviewed-by: Fabio Estevam <festevam@gmail.com>
+Link: https://lore.kernel.org/r/20210219183308.GA2117@ubuntu-dev
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/sgtl5000.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
+index 4d6ff8114622..4c0e87e22b97 100644
+--- a/sound/soc/codecs/sgtl5000.c
++++ b/sound/soc/codecs/sgtl5000.c
+@@ -71,7 +71,7 @@ static const struct reg_default sgtl5000_reg_defaults[] = {
+       { SGTL5000_DAP_EQ_BASS_BAND4,           0x002f },
+       { SGTL5000_DAP_MAIN_CHAN,               0x8000 },
+       { SGTL5000_DAP_MIX_CHAN,                0x0000 },
+-      { SGTL5000_DAP_AVC_CTRL,                0x0510 },
++      { SGTL5000_DAP_AVC_CTRL,                0x5100 },
+       { SGTL5000_DAP_AVC_THRESHOLD,           0x1473 },
+       { SGTL5000_DAP_AVC_ATTACK,              0x0028 },
+       { SGTL5000_DAP_AVC_DECAY,               0x0050 },
+-- 
+2.30.1
+
diff --git a/queue-5.10/asoc-soc-core-prevent-warning-if-no-dmi-table-is-pre.patch b/queue-5.10/asoc-soc-core-prevent-warning-if-no-dmi-table-is-pre.patch
new file mode 100644 (file)
index 0000000..3535c97
--- /dev/null
@@ -0,0 +1,54 @@
+From 0992a3b16767f7933a03f8cc509e2aad1f4947f9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 3 Mar 2021 11:55:26 +0000
+Subject: ASoC: soc-core: Prevent warning if no DMI table is present
+
+From: Jon Hunter <jonathanh@nvidia.com>
+
+[ Upstream commit 7de14d581dbed57c2b3c6afffa2c3fdc6955a3cd ]
+
+Many systems do not use ACPI and hence do not provide a DMI table. On
+non-ACPI systems a warning, such as the following, is printed on boot.
+
+ WARNING KERN tegra-audio-graph-card sound: ASoC: no DMI vendor name!
+
+The variable 'dmi_available' is not exported and so currently cannot be
+used by kernel modules without adding an accessor. However, it is
+possible to use the function is_acpi_device_node() to determine if the
+sound card is an ACPI device and hence indicate if we expect a DMI table
+to be present. Therefore, call is_acpi_device_node() to see if we are
+using ACPI and only parse the DMI table if we are booting with ACPI.
+
+Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
+Link: https://lore.kernel.org/r/20210303115526.419458-1-jonathanh@nvidia.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/soc-core.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
+index 05a085f6dc7c..bf65cba232e6 100644
+--- a/sound/soc/soc-core.c
++++ b/sound/soc/soc-core.c
+@@ -31,6 +31,7 @@
+ #include <linux/of.h>
+ #include <linux/of_graph.h>
+ #include <linux/dmi.h>
++#include <linux/acpi.h>
+ #include <sound/core.h>
+ #include <sound/jack.h>
+ #include <sound/pcm.h>
+@@ -1581,6 +1582,9 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
+       if (card->long_name)
+               return 0; /* long name already set by driver or from DMI */
++      if (!is_acpi_device_node(card->dev->fwnode))
++              return 0;
++
+       /* make up dmi long name as: vendor-product-version-board */
+       vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
+       if (!vendor || !is_dmi_valid(vendor)) {
+-- 
+2.30.1
+
diff --git a/queue-5.10/ext4-do-not-iput-inode-under-running-transaction-in-.patch b/queue-5.10/ext4-do-not-iput-inode-under-running-transaction-in-.patch
new file mode 100644 (file)
index 0000000..294fe7c
--- /dev/null
@@ -0,0 +1,90 @@
+From bde03edd540c23c350f822902957298ce7fff97c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 3 Mar 2021 21:17:03 +0800
+Subject: ext4: do not iput inode under running transaction in ext4_rename()
+
+From: zhangyi (F) <yi.zhang@huawei.com>
+
+[ Upstream commit 5dccdc5a1916d4266edd251f20bbbb113a5c495f ]
+
+In ext4_rename(), when RENAME_WHITEOUT failed to add new entry into
+directory, it ends up dropping new created whiteout inode under the
+running transaction. After commit <9b88f9fb0d2> ("ext4: Do not iput inode
+under running transaction"), we follow the assumptions that evict() does
+not get called from a transaction context but in ext4_rename() it breaks
+this suggestion. Although it's not a real problem, better to obey it, so
+this patch add inode to orphan list and stop transaction before final
+iput().
+
+Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
+Link: https://lore.kernel.org/r/20210303131703.330415-2-yi.zhang@huawei.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/namei.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
+index 6c7eba426a67..ab7baf529917 100644
+--- a/fs/ext4/namei.c
++++ b/fs/ext4/namei.c
+@@ -3788,14 +3788,14 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
+        */
+       retval = -ENOENT;
+       if (!old.bh || le32_to_cpu(old.de->inode) != old.inode->i_ino)
+-              goto end_rename;
++              goto release_bh;
+       new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
+                                &new.de, &new.inlined);
+       if (IS_ERR(new.bh)) {
+               retval = PTR_ERR(new.bh);
+               new.bh = NULL;
+-              goto end_rename;
++              goto release_bh;
+       }
+       if (new.bh) {
+               if (!new.inode) {
+@@ -3812,15 +3812,13 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
+               handle = ext4_journal_start(old.dir, EXT4_HT_DIR, credits);
+               if (IS_ERR(handle)) {
+                       retval = PTR_ERR(handle);
+-                      handle = NULL;
+-                      goto end_rename;
++                      goto release_bh;
+               }
+       } else {
+               whiteout = ext4_whiteout_for_rename(&old, credits, &handle);
+               if (IS_ERR(whiteout)) {
+                       retval = PTR_ERR(whiteout);
+-                      whiteout = NULL;
+-                      goto end_rename;
++                      goto release_bh;
+               }
+       }
+@@ -3957,16 +3955,18 @@ end_rename:
+                       ext4_resetent(handle, &old,
+                                     old.inode->i_ino, old_file_type);
+                       drop_nlink(whiteout);
++                      ext4_orphan_add(handle, whiteout);
+               }
+               unlock_new_inode(whiteout);
++              ext4_journal_stop(handle);
+               iput(whiteout);
+-
++      } else {
++              ext4_journal_stop(handle);
+       }
++release_bh:
+       brelse(old.dir_bh);
+       brelse(old.bh);
+       brelse(new.bh);
+-      if (handle)
+-              ext4_journal_stop(handle);
+       return retval;
+ }
+-- 
+2.30.1
+
diff --git a/queue-5.10/ext4-fix-bh-ref-count-on-error-paths.patch b/queue-5.10/ext4-fix-bh-ref-count-on-error-paths.patch
new file mode 100644 (file)
index 0000000..492f189
--- /dev/null
@@ -0,0 +1,43 @@
+From b96abaeda90b899116e5fb289f119897846afd8f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 2 Mar 2021 17:42:31 +0800
+Subject: ext4: fix bh ref count on error paths
+
+From: Zhaolong Zhang <zhangzl2013@126.com>
+
+[ Upstream commit c915fb80eaa6194fa9bd0a4487705cd5b0dda2f1 ]
+
+__ext4_journalled_writepage should drop bhs' ref count on error paths
+
+Signed-off-by: Zhaolong Zhang <zhangzl2013@126.com>
+Link: https://lore.kernel.org/r/1614678151-70481-1-git-send-email-zhangzl2013@126.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/inode.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
+index c2b8ba343bb4..3f11c948feb0 100644
+--- a/fs/ext4/inode.c
++++ b/fs/ext4/inode.c
+@@ -1937,13 +1937,13 @@ static int __ext4_journalled_writepage(struct page *page,
+       if (!ret)
+               ret = err;
+-      if (!ext4_has_inline_data(inode))
+-              ext4_walk_page_buffers(NULL, page_bufs, 0, len,
+-                                     NULL, bput_one);
+       ext4_set_inode_state(inode, EXT4_STATE_JDATA);
+ out:
+       unlock_page(page);
+ out_no_pagelock:
++      if (!inline_data && page_bufs)
++              ext4_walk_page_buffers(NULL, page_bufs, 0, len,
++                                     NULL, bput_one);
+       brelse(inode_bh);
+       return ret;
+ }
+-- 
+2.30.1
+
diff --git a/queue-5.10/ext4-shrink-race-window-in-ext4_should_retry_alloc.patch b/queue-5.10/ext4-shrink-race-window-in-ext4_should_retry_alloc.patch
new file mode 100644 (file)
index 0000000..49d3a05
--- /dev/null
@@ -0,0 +1,199 @@
+From 867ddf9b45ec3a76104725634df87806c1a31c93 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 18 Feb 2021 10:11:32 -0500
+Subject: ext4: shrink race window in ext4_should_retry_alloc()
+
+From: Eric Whitney <enwlinux@gmail.com>
+
+[ Upstream commit efc61345274d6c7a46a0570efbc916fcbe3e927b ]
+
+When generic/371 is run on kvm-xfstests using 5.10 and 5.11 kernels, it
+fails at significant rates on the two test scenarios that disable
+delayed allocation (ext3conv and data_journal) and force actual block
+allocation for the fallocate and pwrite functions in the test.  The
+failure rate on 5.10 for both ext3conv and data_journal on one test
+system typically runs about 85%.  On 5.11, the failure rate on ext3conv
+sometimes drops to as low as 1% while the rate on data_journal
+increases to nearly 100%.
+
+The observed failures are largely due to ext4_should_retry_alloc()
+cutting off block allocation retries when s_mb_free_pending (used to
+indicate that a transaction in progress will free blocks) is 0.
+However, free space is usually available when this occurs during runs
+of generic/371.  It appears that a thread attempting to allocate
+blocks is just missing transaction commits in other threads that
+increase the free cluster count and reset s_mb_free_pending while
+the allocating thread isn't running.  Explicitly testing for free space
+availability avoids this race.
+
+The current code uses a post-increment operator in the conditional
+expression that determines whether the retry limit has been exceeded.
+This means that the conditional expression uses the value of the
+retry counter before it's increased, resulting in an extra retry cycle.
+The current code actually retries twice before hitting its retry limit
+rather than once.
+
+Increasing the retry limit to 3 from the current actual maximum retry
+count of 2 in combination with the change described above reduces the
+observed failure rate to less that 0.1% on both ext3conv and
+data_journal with what should be limited impact on users sensitive to
+the overhead caused by retries.
+
+A per filesystem percpu counter exported via sysfs is added to allow
+users or developers to track the number of times the retry limit is
+exceeded without resorting to debugging methods.  This should provide
+some insight into worst case retry behavior.
+
+Signed-off-by: Eric Whitney <enwlinux@gmail.com>
+Link: https://lore.kernel.org/r/20210218151132.19678-1-enwlinux@gmail.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/balloc.c | 38 ++++++++++++++++++++++++++------------
+ fs/ext4/ext4.h   |  1 +
+ fs/ext4/super.c  |  5 +++++
+ fs/ext4/sysfs.c  |  7 +++++++
+ 4 files changed, 39 insertions(+), 12 deletions(-)
+
+diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
+index 1d640b145637..1afd60fcd772 100644
+--- a/fs/ext4/balloc.c
++++ b/fs/ext4/balloc.c
+@@ -626,27 +626,41 @@ int ext4_claim_free_clusters(struct ext4_sb_info *sbi,
+ /**
+  * ext4_should_retry_alloc() - check if a block allocation should be retried
+- * @sb:                       super block
+- * @retries:          number of attemps has been made
++ * @sb:                       superblock
++ * @retries:          number of retry attempts made so far
+  *
+- * ext4_should_retry_alloc() is called when ENOSPC is returned, and if
+- * it is profitable to retry the operation, this function will wait
+- * for the current or committing transaction to complete, and then
+- * return TRUE.  We will only retry once.
++ * ext4_should_retry_alloc() is called when ENOSPC is returned while
++ * attempting to allocate blocks.  If there's an indication that a pending
++ * journal transaction might free some space and allow another attempt to
++ * succeed, this function will wait for the current or committing transaction
++ * to complete and then return TRUE.
+  */
+ int ext4_should_retry_alloc(struct super_block *sb, int *retries)
+ {
+-      if (!ext4_has_free_clusters(EXT4_SB(sb), 1, 0) ||
+-          (*retries)++ > 1 ||
+-          !EXT4_SB(sb)->s_journal)
++      struct ext4_sb_info *sbi = EXT4_SB(sb);
++
++      if (!sbi->s_journal)
+               return 0;
+-      smp_mb();
+-      if (EXT4_SB(sb)->s_mb_free_pending == 0)
++      if (++(*retries) > 3) {
++              percpu_counter_inc(&sbi->s_sra_exceeded_retry_limit);
+               return 0;
++      }
++      /*
++       * if there's no indication that blocks are about to be freed it's
++       * possible we just missed a transaction commit that did so
++       */
++      smp_mb();
++      if (sbi->s_mb_free_pending == 0)
++              return ext4_has_free_clusters(sbi, 1, 0);
++
++      /*
++       * it's possible we've just missed a transaction commit here,
++       * so ignore the returned status
++       */
+       jbd_debug(1, "%s: retrying operation after ENOSPC\n", sb->s_id);
+-      jbd2_journal_force_commit_nested(EXT4_SB(sb)->s_journal);
++      (void) jbd2_journal_force_commit_nested(sbi->s_journal);
+       return 1;
+ }
+diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
+index b92acb660313..7cae226b000f 100644
+--- a/fs/ext4/ext4.h
++++ b/fs/ext4/ext4.h
+@@ -1474,6 +1474,7 @@ struct ext4_sb_info {
+       struct percpu_counter s_freeinodes_counter;
+       struct percpu_counter s_dirs_counter;
+       struct percpu_counter s_dirtyclusters_counter;
++      struct percpu_counter s_sra_exceeded_retry_limit;
+       struct blockgroup_lock *s_blockgroup_lock;
+       struct proc_dir_entry *s_proc;
+       struct kobject s_kobj;
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index e30bf8f342c2..594300d315ef 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -1226,6 +1226,7 @@ static void ext4_put_super(struct super_block *sb)
+       percpu_counter_destroy(&sbi->s_freeinodes_counter);
+       percpu_counter_destroy(&sbi->s_dirs_counter);
+       percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
++      percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
+       percpu_free_rwsem(&sbi->s_writepages_rwsem);
+ #ifdef CONFIG_QUOTA
+       for (i = 0; i < EXT4_MAXQUOTAS; i++)
+@@ -5019,6 +5020,9 @@ no_journal:
+       if (!err)
+               err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0,
+                                         GFP_KERNEL);
++      if (!err)
++              err = percpu_counter_init(&sbi->s_sra_exceeded_retry_limit, 0,
++                                        GFP_KERNEL);
+       if (!err)
+               err = percpu_init_rwsem(&sbi->s_writepages_rwsem);
+@@ -5131,6 +5135,7 @@ failed_mount6:
+       percpu_counter_destroy(&sbi->s_freeinodes_counter);
+       percpu_counter_destroy(&sbi->s_dirs_counter);
+       percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
++      percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
+       percpu_free_rwsem(&sbi->s_writepages_rwsem);
+ failed_mount5:
+       ext4_ext_release(sb);
+diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
+index 4e27fe6ed3ae..f24bef3be48a 100644
+--- a/fs/ext4/sysfs.c
++++ b/fs/ext4/sysfs.c
+@@ -24,6 +24,7 @@ typedef enum {
+       attr_session_write_kbytes,
+       attr_lifetime_write_kbytes,
+       attr_reserved_clusters,
++      attr_sra_exceeded_retry_limit,
+       attr_inode_readahead,
+       attr_trigger_test_error,
+       attr_first_error_time,
+@@ -208,6 +209,7 @@ EXT4_ATTR_FUNC(delayed_allocation_blocks, 0444);
+ EXT4_ATTR_FUNC(session_write_kbytes, 0444);
+ EXT4_ATTR_FUNC(lifetime_write_kbytes, 0444);
+ EXT4_ATTR_FUNC(reserved_clusters, 0644);
++EXT4_ATTR_FUNC(sra_exceeded_retry_limit, 0444);
+ EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, inode_readahead,
+                ext4_sb_info, s_inode_readahead_blks);
+@@ -257,6 +259,7 @@ static struct attribute *ext4_attrs[] = {
+       ATTR_LIST(session_write_kbytes),
+       ATTR_LIST(lifetime_write_kbytes),
+       ATTR_LIST(reserved_clusters),
++      ATTR_LIST(sra_exceeded_retry_limit),
+       ATTR_LIST(inode_readahead_blks),
+       ATTR_LIST(inode_goal),
+       ATTR_LIST(mb_stats),
+@@ -380,6 +383,10 @@ static ssize_t ext4_attr_show(struct kobject *kobj,
+               return snprintf(buf, PAGE_SIZE, "%llu\n",
+                               (unsigned long long)
+                               atomic64_read(&sbi->s_resv_clusters));
++      case attr_sra_exceeded_retry_limit:
++              return snprintf(buf, PAGE_SIZE, "%llu\n",
++                              (unsigned long long)
++                      percpu_counter_sum(&sbi->s_sra_exceeded_retry_limit));
+       case attr_inode_readahead:
+       case attr_pointer_ui:
+               if (!ptr)
+-- 
+2.30.1
+
diff --git a/queue-5.10/fs-nfsd-fix-kconfig-dependency-warning-for-nfsd_v4.patch b/queue-5.10/fs-nfsd-fix-kconfig-dependency-warning-for-nfsd_v4.patch
new file mode 100644 (file)
index 0000000..7c30b56
--- /dev/null
@@ -0,0 +1,48 @@
+From 8d5ecda00e601a748fc3672d07be44ec1cff8d33 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 19 Feb 2021 16:56:10 -0500
+Subject: fs: nfsd: fix kconfig dependency warning for NFSD_V4
+
+From: Julian Braha <julianbraha@gmail.com>
+
+[ Upstream commit 7005227369079963d25fb2d5d736d0feb2c44cf6 ]
+
+When NFSD_V4 is enabled and CRYPTO is disabled,
+Kbuild gives the following warning:
+
+WARNING: unmet direct dependencies detected for CRYPTO_SHA256
+  Depends on [n]: CRYPTO [=n]
+  Selected by [y]:
+  - NFSD_V4 [=y] && NETWORK_FILESYSTEMS [=y] && NFSD [=y] && PROC_FS [=y]
+
+WARNING: unmet direct dependencies detected for CRYPTO_MD5
+  Depends on [n]: CRYPTO [=n]
+  Selected by [y]:
+  - NFSD_V4 [=y] && NETWORK_FILESYSTEMS [=y] && NFSD [=y] && PROC_FS [=y]
+
+This is because NFSD_V4 selects CRYPTO_MD5 and CRYPTO_SHA256,
+without depending on or selecting CRYPTO, despite those config options
+being subordinate to CRYPTO.
+
+Signed-off-by: Julian Braha <julianbraha@gmail.com>
+Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfsd/Kconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig
+index dbbc583d6273..248f1459c039 100644
+--- a/fs/nfsd/Kconfig
++++ b/fs/nfsd/Kconfig
+@@ -73,6 +73,7 @@ config NFSD_V4
+       select NFSD_V3
+       select FS_POSIX_ACL
+       select SUNRPC_GSS
++      select CRYPTO
+       select CRYPTO_MD5
+       select CRYPTO_SHA256
+       select GRACE_PERIOD
+-- 
+2.30.1
+
diff --git a/queue-5.10/io_uring-call-req_set_fail_links-on-short-send-msg-r.patch b/queue-5.10/io_uring-call-req_set_fail_links-on-short-send-msg-r.patch
new file mode 100644 (file)
index 0000000..83bf2b3
--- /dev/null
@@ -0,0 +1,175 @@
+From c19d640eb199fbf27cbcd6e9a45bbf4210b9ac2e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 20 Mar 2021 20:33:36 +0100
+Subject: io_uring: call req_set_fail_links() on short send[msg]()/recv[msg]()
+ with MSG_WAITALL
+
+From: Stefan Metzmacher <metze@samba.org>
+
+[ Upstream commit 0031275d119efe16711cd93519b595e6f9b4b330 ]
+
+Without that it's not safe to use them in a linked combination with
+others.
+
+Now combinations like IORING_OP_SENDMSG followed by IORING_OP_SPLICE
+should be possible.
+
+We already handle short reads and writes for the following opcodes:
+
+- IORING_OP_READV
+- IORING_OP_READ_FIXED
+- IORING_OP_READ
+- IORING_OP_WRITEV
+- IORING_OP_WRITE_FIXED
+- IORING_OP_WRITE
+- IORING_OP_SPLICE
+- IORING_OP_TEE
+
+Now we have it for these as well:
+
+- IORING_OP_SENDMSG
+- IORING_OP_SEND
+- IORING_OP_RECVMSG
+- IORING_OP_RECV
+
+For IORING_OP_RECVMSG we also check for the MSG_TRUNC and MSG_CTRUNC
+flags in order to call req_set_fail_links().
+
+There might be applications arround depending on the behavior
+that even short send[msg]()/recv[msg]() retuns continue an
+IOSQE_IO_LINK chain.
+
+It's very unlikely that such applications pass in MSG_WAITALL,
+which is only defined in 'man 2 recvmsg', but not in 'man 2 sendmsg'.
+
+It's expected that the low level sock_sendmsg() call just ignores
+MSG_WAITALL, as MSG_ZEROCOPY is also ignored without explicitly set
+SO_ZEROCOPY.
+
+We also expect the caller to know about the implicit truncation to
+MAX_RW_COUNT, which we don't detect.
+
+cc: netdev@vger.kernel.org
+Link: https://lore.kernel.org/r/c4e1a4cc0d905314f4d5dc567e65a7b09621aab3.1615908477.git.metze@samba.org
+Signed-off-by: Stefan Metzmacher <metze@samba.org>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/io_uring.c | 24 ++++++++++++++++++++----
+ 1 file changed, 20 insertions(+), 4 deletions(-)
+
+diff --git a/fs/io_uring.c b/fs/io_uring.c
+index fe2dfdab0acd..4ccf99cb8cdc 100644
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -4401,6 +4401,7 @@ static int io_sendmsg(struct io_kiocb *req, bool force_nonblock,
+       struct io_async_msghdr iomsg, *kmsg;
+       struct socket *sock;
+       unsigned flags;
++      int min_ret = 0;
+       int ret;
+       sock = sock_from_file(req->file, &ret);
+@@ -4427,6 +4428,9 @@ static int io_sendmsg(struct io_kiocb *req, bool force_nonblock,
+       else if (force_nonblock)
+               flags |= MSG_DONTWAIT;
++      if (flags & MSG_WAITALL)
++              min_ret = iov_iter_count(&kmsg->msg.msg_iter);
++
+       ret = __sys_sendmsg_sock(sock, &kmsg->msg, flags);
+       if (force_nonblock && ret == -EAGAIN)
+               return io_setup_async_msg(req, kmsg);
+@@ -4436,7 +4440,7 @@ static int io_sendmsg(struct io_kiocb *req, bool force_nonblock,
+       if (kmsg->iov != kmsg->fast_iov)
+               kfree(kmsg->iov);
+       req->flags &= ~REQ_F_NEED_CLEANUP;
+-      if (ret < 0)
++      if (ret < min_ret)
+               req_set_fail_links(req);
+       __io_req_complete(req, ret, 0, cs);
+       return 0;
+@@ -4450,6 +4454,7 @@ static int io_send(struct io_kiocb *req, bool force_nonblock,
+       struct iovec iov;
+       struct socket *sock;
+       unsigned flags;
++      int min_ret = 0;
+       int ret;
+       sock = sock_from_file(req->file, &ret);
+@@ -4471,6 +4476,9 @@ static int io_send(struct io_kiocb *req, bool force_nonblock,
+       else if (force_nonblock)
+               flags |= MSG_DONTWAIT;
++      if (flags & MSG_WAITALL)
++              min_ret = iov_iter_count(&msg.msg_iter);
++
+       msg.msg_flags = flags;
+       ret = sock_sendmsg(sock, &msg);
+       if (force_nonblock && ret == -EAGAIN)
+@@ -4478,7 +4486,7 @@ static int io_send(struct io_kiocb *req, bool force_nonblock,
+       if (ret == -ERESTARTSYS)
+               ret = -EINTR;
+-      if (ret < 0)
++      if (ret < min_ret)
+               req_set_fail_links(req);
+       __io_req_complete(req, ret, 0, cs);
+       return 0;
+@@ -4630,6 +4638,7 @@ static int io_recvmsg(struct io_kiocb *req, bool force_nonblock,
+       struct socket *sock;
+       struct io_buffer *kbuf;
+       unsigned flags;
++      int min_ret = 0;
+       int ret, cflags = 0;
+       sock = sock_from_file(req->file, &ret);
+@@ -4665,6 +4674,9 @@ static int io_recvmsg(struct io_kiocb *req, bool force_nonblock,
+       else if (force_nonblock)
+               flags |= MSG_DONTWAIT;
++      if (flags & MSG_WAITALL)
++              min_ret = iov_iter_count(&kmsg->msg.msg_iter);
++
+       ret = __sys_recvmsg_sock(sock, &kmsg->msg, req->sr_msg.umsg,
+                                       kmsg->uaddr, flags);
+       if (force_nonblock && ret == -EAGAIN)
+@@ -4677,7 +4689,7 @@ static int io_recvmsg(struct io_kiocb *req, bool force_nonblock,
+       if (kmsg->iov != kmsg->fast_iov)
+               kfree(kmsg->iov);
+       req->flags &= ~REQ_F_NEED_CLEANUP;
+-      if (ret < 0)
++      if (ret < min_ret || ((flags & MSG_WAITALL) && (kmsg->msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC))))
+               req_set_fail_links(req);
+       __io_req_complete(req, ret, cflags, cs);
+       return 0;
+@@ -4693,6 +4705,7 @@ static int io_recv(struct io_kiocb *req, bool force_nonblock,
+       struct socket *sock;
+       struct iovec iov;
+       unsigned flags;
++      int min_ret = 0;
+       int ret, cflags = 0;
+       sock = sock_from_file(req->file, &ret);
+@@ -4723,6 +4736,9 @@ static int io_recv(struct io_kiocb *req, bool force_nonblock,
+       else if (force_nonblock)
+               flags |= MSG_DONTWAIT;
++      if (flags & MSG_WAITALL)
++              min_ret = iov_iter_count(&msg.msg_iter);
++
+       ret = sock_recvmsg(sock, &msg, flags);
+       if (force_nonblock && ret == -EAGAIN)
+               return -EAGAIN;
+@@ -4731,7 +4747,7 @@ static int io_recv(struct io_kiocb *req, bool force_nonblock,
+ out_free:
+       if (req->flags & REQ_F_BUFFER_SELECTED)
+               cflags = io_put_recv_kbuf(req);
+-      if (ret < 0)
++      if (ret < min_ret || ((flags & MSG_WAITALL) && (msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC))))
+               req_set_fail_links(req);
+       __io_req_complete(req, ret, cflags, cs);
+       return 0;
+-- 
+2.30.1
+
diff --git a/queue-5.10/io_uring-fix-flags-races-by-linked-timeouts.patch b/queue-5.10/io_uring-fix-flags-races-by-linked-timeouts.patch
new file mode 100644 (file)
index 0000000..ea4e825
--- /dev/null
@@ -0,0 +1,38 @@
+From 161d51abea77616fcc3ac8fbc16bfec5ee7a44fc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 14 Mar 2021 20:57:08 +0000
+Subject: io_uring: fix ->flags races by linked timeouts
+
+From: Pavel Begunkov <asml.silence@gmail.com>
+
+[ Upstream commit efe814a471e0e58f28f1efaf430c8784a4f36626 ]
+
+It's racy to modify req->flags from a not owning context, e.g. linked
+timeout calling req_set_fail_links() for the master request might race
+with that request setting/clearing flags while being executed
+concurrently. Just remove req_set_fail_links(prev) from
+io_link_timeout_fn(), io_async_find_and_cancel() and functions down the
+line take care of setting the fail bit.
+
+Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/io_uring.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/fs/io_uring.c b/fs/io_uring.c
+index dde290eb7dd0..4e53445db73f 100644
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -6242,7 +6242,6 @@ static enum hrtimer_restart io_link_timeout_fn(struct hrtimer *timer)
+       spin_unlock_irqrestore(&ctx->completion_lock, flags);
+       if (prev) {
+-              req_set_fail_links(prev);
+               io_async_find_and_cancel(ctx, req, prev->user_data, -ETIME);
+               io_put_req_deferred(prev, 1);
+       } else {
+-- 
+2.30.1
+
diff --git a/queue-5.10/io_uring-imply-msg_nosignal-for-send-msg-recv-msg-ca.patch b/queue-5.10/io_uring-imply-msg_nosignal-for-send-msg-recv-msg-ca.patch
new file mode 100644 (file)
index 0000000..161a342
--- /dev/null
@@ -0,0 +1,62 @@
+From a4ae55c92dc57b08282f993c22bc0dbb57e363bd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 Mar 2021 16:33:27 +0100
+Subject: io_uring: imply MSG_NOSIGNAL for send[msg]()/recv[msg]() calls
+
+From: Stefan Metzmacher <metze@samba.org>
+
+[ Upstream commit 76cd979f4f38a27df22efb5773a0d567181a9392 ]
+
+We never want to generate any SIGPIPE, -EPIPE only is much better.
+
+Signed-off-by: Stefan Metzmacher <metze@samba.org>
+Link: https://lore.kernel.org/r/38961085c3ec49fd21550c7788f214d1ff02d2d4.1615908477.git.metze@samba.org
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/io_uring.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/fs/io_uring.c b/fs/io_uring.c
+index 4e53445db73f..fe2dfdab0acd 100644
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -4421,7 +4421,7 @@ static int io_sendmsg(struct io_kiocb *req, bool force_nonblock,
+               kmsg = &iomsg;
+       }
+-      flags = req->sr_msg.msg_flags;
++      flags = req->sr_msg.msg_flags | MSG_NOSIGNAL;
+       if (flags & MSG_DONTWAIT)
+               req->flags |= REQ_F_NOWAIT;
+       else if (force_nonblock)
+@@ -4465,7 +4465,7 @@ static int io_send(struct io_kiocb *req, bool force_nonblock,
+       msg.msg_controllen = 0;
+       msg.msg_namelen = 0;
+-      flags = req->sr_msg.msg_flags;
++      flags = req->sr_msg.msg_flags | MSG_NOSIGNAL;
+       if (flags & MSG_DONTWAIT)
+               req->flags |= REQ_F_NOWAIT;
+       else if (force_nonblock)
+@@ -4659,7 +4659,7 @@ static int io_recvmsg(struct io_kiocb *req, bool force_nonblock,
+                               1, req->sr_msg.len);
+       }
+-      flags = req->sr_msg.msg_flags;
++      flags = req->sr_msg.msg_flags | MSG_NOSIGNAL;
+       if (flags & MSG_DONTWAIT)
+               req->flags |= REQ_F_NOWAIT;
+       else if (force_nonblock)
+@@ -4717,7 +4717,7 @@ static int io_recv(struct io_kiocb *req, bool force_nonblock,
+       msg.msg_iocb = NULL;
+       msg.msg_flags = 0;
+-      flags = req->sr_msg.msg_flags;
++      flags = req->sr_msg.msg_flags | MSG_NOSIGNAL;
+       if (flags & MSG_DONTWAIT)
+               req->flags |= REQ_F_NOWAIT;
+       else if (force_nonblock)
+-- 
+2.30.1
+
diff --git a/queue-5.10/iomap-fix-negative-assignment-to-unsigned-sis-pages-.patch b/queue-5.10/iomap-fix-negative-assignment-to-unsigned-sis-pages-.patch
new file mode 100644 (file)
index 0000000..09d0346
--- /dev/null
@@ -0,0 +1,91 @@
+From ee645fbaf69d76d470ed0e1937707147494737d9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 9 Mar 2021 09:29:11 -0800
+Subject: iomap: Fix negative assignment to unsigned sis->pages in
+ iomap_swapfile_activate
+
+From: Ritesh Harjani <riteshh@linux.ibm.com>
+
+[ Upstream commit 5808fecc572391867fcd929662b29c12e6d08d81 ]
+
+In case if isi.nr_pages is 0, we are making sis->pages (which is
+unsigned int) a huge value in iomap_swapfile_activate() by assigning -1.
+This could cause a kernel crash in kernel v4.18 (with below signature).
+Or could lead to unknown issues on latest kernel if the fake big swap gets
+used.
+
+Fix this issue by returning -EINVAL in case of nr_pages is 0, since it
+is anyway a invalid swapfile. Looks like this issue will be hit when
+we have pagesize < blocksize type of configuration.
+
+I was able to hit the issue in case of a tiny swap file with below
+test script.
+https://raw.githubusercontent.com/riteshharjani/LinuxStudy/master/scripts/swap-issue.sh
+
+kernel crash analysis on v4.18
+==============================
+On v4.18 kernel, it causes a kernel panic, since sis->pages becomes
+a huge value and isi.nr_extents is 0. When 0 is returned it is
+considered as a swapfile over NFS and SWP_FILE is set (sis->flags |= SWP_FILE).
+Then when swapoff was getting called it was calling a_ops->swap_deactivate()
+if (sis->flags & SWP_FILE) is true. Since a_ops->swap_deactivate() is
+NULL in case of XFS, it causes below panic.
+
+Panic signature on v4.18 kernel:
+=======================================
+root@qemu:/home/qemu# [ 8291.723351] XFS (loop2): Unmounting Filesystem
+[ 8292.123104] XFS (loop2): Mounting V5 Filesystem
+[ 8292.132451] XFS (loop2): Ending clean mount
+[ 8292.263362] Adding 4294967232k swap on /mnt1/test/swapfile.  Priority:-2 extents:1 across:274877906880k
+[ 8292.277834] Unable to handle kernel paging request for instruction fetch
+[ 8292.278677] Faulting instruction address: 0x00000000
+cpu 0x19: Vector: 400 (Instruction Access) at [c0000009dd5b7ad0]
+    pc: 0000000000000000
+    lr: c0000000003eb9dc: destroy_swap_extents+0xfc/0x120
+    sp: c0000009dd5b7d50
+   msr: 8000000040009033
+  current = 0xc0000009b6710080
+  paca    = 0xc00000003ffcb280   irqmask: 0x03   irq_happened: 0x01
+    pid   = 5604, comm = swapoff
+Linux version 4.18.0 (riteshh@xxxxxxx) (gcc version 8.4.0 (Ubuntu 8.4.0-1ubuntu1~18.04)) #57 SMP Wed Mar 3 01:33:04 CST 2021
+enter ? for help
+[link register   ] c0000000003eb9dc destroy_swap_extents+0xfc/0x120
+[c0000009dd5b7d50] c0000000025a7058 proc_poll_event+0x0/0x4 (unreliable)
+[c0000009dd5b7da0] c0000000003f0498 sys_swapoff+0x3f8/0x910
+[c0000009dd5b7e30] c00000000000bbe4 system_call+0x5c/0x70
+Exception: c01 (System Call) at 00007ffff7d208d8
+
+Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>
+[djwong: rework the comment to provide more details]
+Reviewed-by: Darrick J. Wong <djwong@kernel.org>
+Signed-off-by: Darrick J. Wong <djwong@kernel.org>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/iomap/swapfile.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/fs/iomap/swapfile.c b/fs/iomap/swapfile.c
+index a648dbf6991e..a5e478de1417 100644
+--- a/fs/iomap/swapfile.c
++++ b/fs/iomap/swapfile.c
+@@ -170,6 +170,16 @@ int iomap_swapfile_activate(struct swap_info_struct *sis,
+                       return ret;
+       }
++      /*
++       * If this swapfile doesn't contain even a single page-aligned
++       * contiguous range of blocks, reject this useless swapfile to
++       * prevent confusion later on.
++       */
++      if (isi.nr_pages == 0) {
++              pr_warn("swapon: Cannot find a single usable page in file.\n");
++              return -EINVAL;
++      }
++
+       *pagespan = 1 + isi.highest_ppage - isi.lowest_ppage;
+       sis->max = isi.nr_pages;
+       sis->pages = isi.nr_pages - 1;
+-- 
+2.30.1
+
diff --git a/queue-5.10/kernel-freezer-should-treat-pf_io_worker-like-pf_kth.patch b/queue-5.10/kernel-freezer-should-treat-pf_io_worker-like-pf_kth.patch
new file mode 100644 (file)
index 0000000..2a68db8
--- /dev/null
@@ -0,0 +1,37 @@
+From df9cef25459db8d79438d07ede75db815d4175d6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 12 Mar 2021 20:20:42 -0700
+Subject: kernel: freezer should treat PF_IO_WORKER like PF_KTHREAD for
+ freezing
+
+From: Jens Axboe <axboe@kernel.dk>
+
+[ Upstream commit 15b2219facadec583c24523eed40fa45865f859f ]
+
+Don't send fake signals to PF_IO_WORKER threads, they don't accept
+signals. Just treat them like kthreads in this regard, all they need
+is a wakeup as no forced kernel/user transition is needed.
+
+Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/freezer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/kernel/freezer.c b/kernel/freezer.c
+index dc520f01f99d..1a2d57d1327c 100644
+--- a/kernel/freezer.c
++++ b/kernel/freezer.c
+@@ -134,7 +134,7 @@ bool freeze_task(struct task_struct *p)
+               return false;
+       }
+-      if (!(p->flags & PF_KTHREAD))
++      if (!(p->flags & (PF_KTHREAD | PF_IO_WORKER)))
+               fake_signal_wake_up(p);
+       else
+               wake_up_state(p, TASK_INTERRUPTIBLE);
+-- 
+2.30.1
+
diff --git a/queue-5.10/locking-ww_mutex-fix-acquire-release-imbalance-in-ww.patch b/queue-5.10/locking-ww_mutex-fix-acquire-release-imbalance-in-ww.patch
new file mode 100644 (file)
index 0000000..db55814
--- /dev/null
@@ -0,0 +1,47 @@
+From fb408fa9142019edd305240a6c8eadbf70cf638c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 Mar 2021 11:31:17 -0400
+Subject: locking/ww_mutex: Fix acquire/release imbalance in
+ ww_acquire_init()/ww_acquire_fini()
+
+From: Waiman Long <longman@redhat.com>
+
+[ Upstream commit bee645788e07eea63055d261d2884ea45c2ba857 ]
+
+In ww_acquire_init(), mutex_acquire() is gated by CONFIG_DEBUG_LOCK_ALLOC.
+The dep_map in the ww_acquire_ctx structure is also gated by the
+same config. However mutex_release() in ww_acquire_fini() is gated by
+CONFIG_DEBUG_MUTEXES. It is possible to set CONFIG_DEBUG_MUTEXES without
+setting CONFIG_DEBUG_LOCK_ALLOC though it is an unlikely configuration.
+That may cause a compilation error as dep_map isn't defined in this
+case. Fix this potential problem by enclosing mutex_release() inside
+CONFIG_DEBUG_LOCK_ALLOC.
+
+Signed-off-by: Waiman Long <longman@redhat.com>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Link: https://lore.kernel.org/r/20210316153119.13802-3-longman@redhat.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/ww_mutex.h | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/include/linux/ww_mutex.h b/include/linux/ww_mutex.h
+index 850424e5d030..6ecf2a0220db 100644
+--- a/include/linux/ww_mutex.h
++++ b/include/linux/ww_mutex.h
+@@ -173,9 +173,10 @@ static inline void ww_acquire_done(struct ww_acquire_ctx *ctx)
+  */
+ static inline void ww_acquire_fini(struct ww_acquire_ctx *ctx)
+ {
+-#ifdef CONFIG_DEBUG_MUTEXES
++#ifdef CONFIG_DEBUG_LOCK_ALLOC
+       mutex_release(&ctx->dep_map, _THIS_IP_);
+-
++#endif
++#ifdef CONFIG_DEBUG_MUTEXES
+       DEBUG_LOCKS_WARN_ON(ctx->acquired);
+       if (!IS_ENABLED(CONFIG_PROVE_LOCKING))
+               /*
+-- 
+2.30.1
+
diff --git a/queue-5.10/locking-ww_mutex-simplify-use_ww_ctx-ww_ctx-handling.patch b/queue-5.10/locking-ww_mutex-simplify-use_ww_ctx-ww_ctx-handling.patch
new file mode 100644 (file)
index 0000000..5ea1e01
--- /dev/null
@@ -0,0 +1,138 @@
+From 4c143900e59c6168be89617334b4735822a234cd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 Mar 2021 11:31:16 -0400
+Subject: locking/ww_mutex: Simplify use_ww_ctx & ww_ctx handling
+
+From: Waiman Long <longman@redhat.com>
+
+[ Upstream commit 5de2055d31ea88fd9ae9709ac95c372a505a60fa ]
+
+The use_ww_ctx flag is passed to mutex_optimistic_spin(), but the
+function doesn't use it. The frequent use of the (use_ww_ctx && ww_ctx)
+combination is repetitive.
+
+In fact, ww_ctx should not be used at all if !use_ww_ctx.  Simplify
+ww_mutex code by dropping use_ww_ctx from mutex_optimistic_spin() an
+clear ww_ctx if !use_ww_ctx. In this way, we can replace (use_ww_ctx &&
+ww_ctx) by just (ww_ctx).
+
+Signed-off-by: Waiman Long <longman@redhat.com>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Acked-by: Davidlohr Bueso <dbueso@suse.de>
+Link: https://lore.kernel.org/r/20210316153119.13802-2-longman@redhat.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/locking/mutex.c | 25 ++++++++++++++-----------
+ 1 file changed, 14 insertions(+), 11 deletions(-)
+
+diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
+index 5352ce50a97e..2c25b830203c 100644
+--- a/kernel/locking/mutex.c
++++ b/kernel/locking/mutex.c
+@@ -636,7 +636,7 @@ static inline int mutex_can_spin_on_owner(struct mutex *lock)
+  */
+ static __always_inline bool
+ mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
+-                    const bool use_ww_ctx, struct mutex_waiter *waiter)
++                    struct mutex_waiter *waiter)
+ {
+       if (!waiter) {
+               /*
+@@ -712,7 +712,7 @@ fail:
+ #else
+ static __always_inline bool
+ mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
+-                    const bool use_ww_ctx, struct mutex_waiter *waiter)
++                    struct mutex_waiter *waiter)
+ {
+       return false;
+ }
+@@ -932,6 +932,9 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
+       struct ww_mutex *ww;
+       int ret;
++      if (!use_ww_ctx)
++              ww_ctx = NULL;
++
+       might_sleep();
+ #ifdef CONFIG_DEBUG_MUTEXES
+@@ -939,7 +942,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
+ #endif
+       ww = container_of(lock, struct ww_mutex, base);
+-      if (use_ww_ctx && ww_ctx) {
++      if (ww_ctx) {
+               if (unlikely(ww_ctx == READ_ONCE(ww->ctx)))
+                       return -EALREADY;
+@@ -956,10 +959,10 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
+       mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, ip);
+       if (__mutex_trylock(lock) ||
+-          mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, NULL)) {
++          mutex_optimistic_spin(lock, ww_ctx, NULL)) {
+               /* got the lock, yay! */
+               lock_acquired(&lock->dep_map, ip);
+-              if (use_ww_ctx && ww_ctx)
++              if (ww_ctx)
+                       ww_mutex_set_context_fastpath(ww, ww_ctx);
+               preempt_enable();
+               return 0;
+@@ -970,7 +973,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
+        * After waiting to acquire the wait_lock, try again.
+        */
+       if (__mutex_trylock(lock)) {
+-              if (use_ww_ctx && ww_ctx)
++              if (ww_ctx)
+                       __ww_mutex_check_waiters(lock, ww_ctx);
+               goto skip_wait;
+@@ -1023,7 +1026,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
+                       goto err;
+               }
+-              if (use_ww_ctx && ww_ctx) {
++              if (ww_ctx) {
+                       ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx);
+                       if (ret)
+                               goto err;
+@@ -1036,7 +1039,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
+                * ww_mutex needs to always recheck its position since its waiter
+                * list is not FIFO ordered.
+                */
+-              if ((use_ww_ctx && ww_ctx) || !first) {
++              if (ww_ctx || !first) {
+                       first = __mutex_waiter_is_first(lock, &waiter);
+                       if (first)
+                               __mutex_set_flag(lock, MUTEX_FLAG_HANDOFF);
+@@ -1049,7 +1052,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
+                * or we must see its unlock and acquire.
+                */
+               if (__mutex_trylock(lock) ||
+-                  (first && mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, &waiter)))
++                  (first && mutex_optimistic_spin(lock, ww_ctx, &waiter)))
+                       break;
+               spin_lock(&lock->wait_lock);
+@@ -1058,7 +1061,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
+ acquired:
+       __set_current_state(TASK_RUNNING);
+-      if (use_ww_ctx && ww_ctx) {
++      if (ww_ctx) {
+               /*
+                * Wound-Wait; we stole the lock (!first_waiter), check the
+                * waiters as anyone might want to wound us.
+@@ -1078,7 +1081,7 @@ skip_wait:
+       /* got the lock - cleanup and rejoice! */
+       lock_acquired(&lock->dep_map, ip);
+-      if (use_ww_ctx && ww_ctx)
++      if (ww_ctx)
+               ww_mutex_lock_acquired(ww, ww_ctx);
+       spin_unlock(&lock->wait_lock);
+-- 
+2.30.1
+
diff --git a/queue-5.10/nfsd-fix-error-handling-in-nfsv4.0-callbacks.patch b/queue-5.10/nfsd-fix-error-handling-in-nfsv4.0-callbacks.patch
new file mode 100644 (file)
index 0000000..cd6fe58
--- /dev/null
@@ -0,0 +1,38 @@
+From 55a854874261990034526e01d34e54a52fb882ce Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 11 Mar 2021 10:55:00 -0500
+Subject: NFSD: fix error handling in NFSv4.0 callbacks
+
+From: Olga Kornievskaia <kolga@netapp.com>
+
+[ Upstream commit b4250dd868d1b42c0a65de11ef3afbee67ba5d2f ]
+
+When the server tries to do a callback and a client fails it due to
+authentication problems, we need the server to set callback down
+flag in RENEW so that client can recover.
+
+Suggested-by: Bruce Fields <bfields@redhat.com>
+Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
+Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
+Tested-by: Benjamin Coddington <bcodding@redhat.com>
+Link: https://lore.kernel.org/linux-nfs/FB84E90A-1A03-48B3-8BF7-D9D10AC2C9FE@oracle.com/T/#t
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfsd/nfs4callback.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
+index 052be5bf9ef5..7325592b456e 100644
+--- a/fs/nfsd/nfs4callback.c
++++ b/fs/nfsd/nfs4callback.c
+@@ -1189,6 +1189,7 @@ static void nfsd4_cb_done(struct rpc_task *task, void *calldata)
+               switch (task->tk_status) {
+               case -EIO:
+               case -ETIMEDOUT:
++              case -EACCES:
+                       nfsd4_mark_cb_down(clp, task->tk_status);
+               }
+               break;
+-- 
+2.30.1
+
diff --git a/queue-5.10/nvmet-tcp-fix-kmap-leak-when-data-digest-in-use.patch b/queue-5.10/nvmet-tcp-fix-kmap-leak-when-data-digest-in-use.patch
new file mode 100644 (file)
index 0000000..b449dab
--- /dev/null
@@ -0,0 +1,40 @@
+From f12048ecdd36cbc03edc56c09633fe9405a95d6c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 Mar 2021 17:44:25 +0200
+Subject: nvmet-tcp: fix kmap leak when data digest in use
+
+From: Elad Grupi <elad.grupi@dell.com>
+
+[ Upstream commit bac04454ef9fada009f0572576837548b190bf94 ]
+
+When data digest is enabled we should unmap pdu iovec before handling
+the data digest pdu.
+
+Signed-off-by: Elad Grupi <elad.grupi@dell.com>
+Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/target/tcp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
+index 8b0485ada315..d658c6e8263a 100644
+--- a/drivers/nvme/target/tcp.c
++++ b/drivers/nvme/target/tcp.c
+@@ -1098,11 +1098,11 @@ static int nvmet_tcp_try_recv_data(struct nvmet_tcp_queue *queue)
+               cmd->rbytes_done += ret;
+       }
++      nvmet_tcp_unmap_pdu_iovec(cmd);
+       if (queue->data_digest) {
+               nvmet_tcp_prep_recv_ddgst(cmd);
+               return 0;
+       }
+-      nvmet_tcp_unmap_pdu_iovec(cmd);
+       if (!(cmd->flags & NVMET_TCP_F_INIT_FAILED) &&
+           cmd->rbytes_done == cmd->req.transfer_len) {
+-- 
+2.30.1
+
diff --git a/queue-5.10/rpc-fix-null-dereference-on-kmalloc-failure.patch b/queue-5.10/rpc-fix-null-dereference-on-kmalloc-failure.patch
new file mode 100644 (file)
index 0000000..51cc4fb
--- /dev/null
@@ -0,0 +1,64 @@
+From 9ea5daef5d51416f74d92986bca6cd3ef926660c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 2 Mar 2021 10:48:38 -0500
+Subject: rpc: fix NULL dereference on kmalloc failure
+
+From: J. Bruce Fields <bfields@redhat.com>
+
+[ Upstream commit 0ddc942394013f08992fc379ca04cffacbbe3dae ]
+
+I think this is unlikely but possible:
+
+svc_authenticate sets rq_authop and calls svcauth_gss_accept.  The
+kmalloc(sizeof(*svcdata), GFP_KERNEL) fails, leaving rq_auth_data NULL,
+and returning SVC_DENIED.
+
+This causes svc_process_common to go to err_bad_auth, and eventually
+call svc_authorise.  That calls ->release == svcauth_gss_release, which
+tries to dereference rq_auth_data.
+
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+Link: https://lore.kernel.org/linux-nfs/3F1B347F-B809-478F-A1E9-0BE98E22B0F0@oracle.com/T/#t
+Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sunrpc/auth_gss/svcauth_gss.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
+index bd4678db9d76..6dff64374bfe 100644
+--- a/net/sunrpc/auth_gss/svcauth_gss.c
++++ b/net/sunrpc/auth_gss/svcauth_gss.c
+@@ -1825,11 +1825,14 @@ static int
+ svcauth_gss_release(struct svc_rqst *rqstp)
+ {
+       struct gss_svc_data *gsd = (struct gss_svc_data *)rqstp->rq_auth_data;
+-      struct rpc_gss_wire_cred *gc = &gsd->clcred;
++      struct rpc_gss_wire_cred *gc;
+       struct xdr_buf *resbuf = &rqstp->rq_res;
+       int stat = -EINVAL;
+       struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
++      if (!gsd)
++              goto out;
++      gc = &gsd->clcred;
+       if (gc->gc_proc != RPC_GSS_PROC_DATA)
+               goto out;
+       /* Release can be called twice, but we only wrap once. */
+@@ -1870,10 +1873,10 @@ out_err:
+       if (rqstp->rq_cred.cr_group_info)
+               put_group_info(rqstp->rq_cred.cr_group_info);
+       rqstp->rq_cred.cr_group_info = NULL;
+-      if (gsd->rsci)
++      if (gsd && gsd->rsci) {
+               cache_put(&gsd->rsci->h, sn->rsc_cache);
+-      gsd->rsci = NULL;
+-
++              gsd->rsci = NULL;
++      }
+       return stat;
+ }
+-- 
+2.30.1
+
diff --git a/queue-5.10/scsi-qla2xxx-fix-broken-endif-placement.patch b/queue-5.10/scsi-qla2xxx-fix-broken-endif-placement.patch
new file mode 100644 (file)
index 0000000..1a48c12
--- /dev/null
@@ -0,0 +1,44 @@
+From fb65e7c241f4d746e726db11ce52d66c77e7a14b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 14 Mar 2021 18:32:46 +0300
+Subject: scsi: qla2xxx: Fix broken #endif placement
+
+From: Alexey Dobriyan <adobriyan@gmail.com>
+
+[ Upstream commit 5999b9e5b1f8a2f5417b755130919b3ac96f5550 ]
+
+Only half of the file is under include guard because terminating #endif
+is placed too early.
+
+Link: https://lore.kernel.org/r/YE4snvoW1SuwcXAn@localhost.localdomain
+Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
+Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/qla2xxx/qla_target.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h
+index 1cff7c69d448..1e94586c7eb2 100644
+--- a/drivers/scsi/qla2xxx/qla_target.h
++++ b/drivers/scsi/qla2xxx/qla_target.h
+@@ -116,7 +116,6 @@
+       (min(1270, ((ql) > 0) ? (QLA_TGT_DATASEGS_PER_CMD_24XX + \
+               QLA_TGT_DATASEGS_PER_CONT_24XX*((ql) - 1)) : 0))
+ #endif
+-#endif
+ #define GET_TARGET_ID(ha, iocb) ((HAS_EXTENDED_IDS(ha))                       \
+                        ? le16_to_cpu((iocb)->u.isp2x.target.extended) \
+@@ -244,6 +243,7 @@ struct ctio_to_2xxx {
+ #ifndef CTIO_RET_TYPE
+ #define CTIO_RET_TYPE 0x17            /* CTIO return entry */
+ #define ATIO_TYPE7 0x06 /* Accept target I/O entry for 24xx */
++#endif
+ struct fcp_hdr {
+       uint8_t  r_ctl;
+-- 
+2.30.1
+
diff --git a/queue-5.10/scsi-st-fix-a-use-after-free-in-st_open.patch b/queue-5.10/scsi-st-fix-a-use-after-free-in-st_open.patch
new file mode 100644 (file)
index 0000000..48696a2
--- /dev/null
@@ -0,0 +1,42 @@
+From e6471f569f9dd4d93fc08bebefe6fd4d84595111 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 10 Mar 2021 22:46:36 -0800
+Subject: scsi: st: Fix a use after free in st_open()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Lv Yunlong <lyl2019@mail.ustc.edu.cn>
+
+[ Upstream commit c8c165dea4c8f5ad67b1240861e4f6c5395fa4ac ]
+
+In st_open(), if STp->in_use is true, STp will be freed by
+scsi_tape_put(). However, STp is still used by DEBC_printk() after. It is
+better to DEBC_printk() before scsi_tape_put().
+
+Link: https://lore.kernel.org/r/20210311064636.10522-1-lyl2019@mail.ustc.edu.cn
+Acked-by: Kai Mäkisara <kai.makisara@kolumbus.fi>
+Signed-off-by: Lv Yunlong <lyl2019@mail.ustc.edu.cn>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/st.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
+index e2e5356a997d..19bc8c923fce 100644
+--- a/drivers/scsi/st.c
++++ b/drivers/scsi/st.c
+@@ -1269,8 +1269,8 @@ static int st_open(struct inode *inode, struct file *filp)
+       spin_lock(&st_use_lock);
+       if (STp->in_use) {
+               spin_unlock(&st_use_lock);
+-              scsi_tape_put(STp);
+               DEBC_printk(STp, "Device already in use.\n");
++              scsi_tape_put(STp);
+               return (-EBUSY);
+       }
+-- 
+2.30.1
+
index 343c4ecaa42eec9323f36815594700a0705bb428..7091e94fdf97a4c79e66c2b849312a1e948438ab 100644 (file)
@@ -1,2 +1,36 @@
 arm64-mm-correct-the-inside-linear-map-range-during-.patch
 bpf-fix-fexit-trampoline.patch
+virtiofs-fail-dax-mount-if-device-does-not-support-i.patch
+ext4-shrink-race-window-in-ext4_should_retry_alloc.patch
+ext4-fix-bh-ref-count-on-error-paths.patch
+fs-nfsd-fix-kconfig-dependency-warning-for-nfsd_v4.patch
+rpc-fix-null-dereference-on-kmalloc-failure.patch
+iomap-fix-negative-assignment-to-unsigned-sis-pages-.patch
+asoc-rt1015-fix-i2c-communication-error.patch
+asoc-rt5640-fix-dac-and-adc-vol-tlv-values-being-off.patch
+asoc-rt5651-fix-dac-and-adc-vol-tlv-values-being-off.patch
+asoc-sgtl5000-set-dap_avc_ctrl-register-to-correct-d.patch
+asoc-es8316-simplify-adc_pga_gain_tlv-table.patch
+asoc-soc-core-prevent-warning-if-no-dmi-table-is-pre.patch
+asoc-cs42l42-fix-bitclock-polarity-inversion.patch
+asoc-cs42l42-fix-channel-width-support.patch
+asoc-cs42l42-fix-mixer-volume-control.patch
+asoc-cs42l42-always-wait-at-least-3ms-after-reset.patch
+nfsd-fix-error-handling-in-nfsv4.0-callbacks.patch
+kernel-freezer-should-treat-pf_io_worker-like-pf_kth.patch
+vhost-fix-vhost_vq_reset.patch
+io_uring-fix-flags-races-by-linked-timeouts.patch
+scsi-st-fix-a-use-after-free-in-st_open.patch
+scsi-qla2xxx-fix-broken-endif-placement.patch
+staging-comedi-cb_pcidas-fix-request_irq-warn.patch
+staging-comedi-cb_pcidas64-fix-request_irq-warn.patch
+asoc-rt5659-update-mclk-rate-in-set_sysclk.patch
+asoc-rt711-add-snd_soc_component-remove-callback.patch
+thermal-core-add-null-pointer-check-before-using-coo.patch
+locking-ww_mutex-simplify-use_ww_ctx-ww_ctx-handling.patch
+locking-ww_mutex-fix-acquire-release-imbalance-in-ww.patch
+nvmet-tcp-fix-kmap-leak-when-data-digest-in-use.patch
+io_uring-imply-msg_nosignal-for-send-msg-recv-msg-ca.patch
+static_call-align-static_call_is_init-patching-condi.patch
+ext4-do-not-iput-inode-under-running-transaction-in-.patch
+io_uring-call-req_set_fail_links-on-short-send-msg-r.patch
diff --git a/queue-5.10/staging-comedi-cb_pcidas-fix-request_irq-warn.patch b/queue-5.10/staging-comedi-cb_pcidas-fix-request_irq-warn.patch
new file mode 100644 (file)
index 0000000..6ca15be
--- /dev/null
@@ -0,0 +1,49 @@
+From bbdff8f848535c98c58884a466207d18329e3688 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 15 Mar 2021 15:59:14 -0400
+Subject: staging: comedi: cb_pcidas: fix request_irq() warn
+
+From: Tong Zhang <ztong0001@gmail.com>
+
+[ Upstream commit 2e5848a3d86f03024ae096478bdb892ab3d79131 ]
+
+request_irq() wont accept a name which contains slash so we need to
+repalce it with something else -- otherwise it will trigger a warning
+and the entry in /proc/irq/ will not be created
+since the .name might be used by userspace and we don't want to break
+userspace, so we are changing the parameters passed to request_irq()
+
+[    1.630764] name 'pci-das1602/16'
+[    1.630950] WARNING: CPU: 0 PID: 181 at fs/proc/generic.c:180 __xlate_proc_name+0x93/0xb0
+[    1.634009] RIP: 0010:__xlate_proc_name+0x93/0xb0
+[    1.639441] Call Trace:
+[    1.639976]  proc_mkdir+0x18/0x20
+[    1.641946]  request_threaded_irq+0xfe/0x160
+[    1.642186]  cb_pcidas_auto_attach+0xf4/0x610 [cb_pcidas]
+
+Suggested-by: Ian Abbott <abbotti@mev.co.uk>
+Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
+Signed-off-by: Tong Zhang <ztong0001@gmail.com>
+Link: https://lore.kernel.org/r/20210315195914.4801-1-ztong0001@gmail.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/staging/comedi/drivers/cb_pcidas.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/comedi/drivers/cb_pcidas.c b/drivers/staging/comedi/drivers/cb_pcidas.c
+index d740c4782775..2f20bd56ec6c 100644
+--- a/drivers/staging/comedi/drivers/cb_pcidas.c
++++ b/drivers/staging/comedi/drivers/cb_pcidas.c
+@@ -1281,7 +1281,7 @@ static int cb_pcidas_auto_attach(struct comedi_device *dev,
+            devpriv->amcc + AMCC_OP_REG_INTCSR);
+       ret = request_irq(pcidev->irq, cb_pcidas_interrupt, IRQF_SHARED,
+-                        dev->board_name, dev);
++                        "cb_pcidas", dev);
+       if (ret) {
+               dev_dbg(dev->class_dev, "unable to allocate irq %d\n",
+                       pcidev->irq);
+-- 
+2.30.1
+
diff --git a/queue-5.10/staging-comedi-cb_pcidas64-fix-request_irq-warn.patch b/queue-5.10/staging-comedi-cb_pcidas64-fix-request_irq-warn.patch
new file mode 100644 (file)
index 0000000..4880953
--- /dev/null
@@ -0,0 +1,49 @@
+From e912b9ef9062ff7a246c0ff02f7c74bd1d854f5c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 15 Mar 2021 15:58:12 -0400
+Subject: staging: comedi: cb_pcidas64: fix request_irq() warn
+
+From: Tong Zhang <ztong0001@gmail.com>
+
+[ Upstream commit d2d106fe3badfc3bf0dd3899d1c3f210c7203eab ]
+
+request_irq() wont accept a name which contains slash so we need to
+repalce it with something else -- otherwise it will trigger a warning
+and the entry in /proc/irq/ will not be created
+since the .name might be used by userspace and we don't want to break
+userspace, so we are changing the parameters passed to request_irq()
+
+[    1.565966] name 'pci-das6402/16'
+[    1.566149] WARNING: CPU: 0 PID: 184 at fs/proc/generic.c:180 __xlate_proc_name+0x93/0xb0
+[    1.568923] RIP: 0010:__xlate_proc_name+0x93/0xb0
+[    1.574200] Call Trace:
+[    1.574722]  proc_mkdir+0x18/0x20
+[    1.576629]  request_threaded_irq+0xfe/0x160
+[    1.576859]  auto_attach+0x60a/0xc40 [cb_pcidas64]
+
+Suggested-by: Ian Abbott <abbotti@mev.co.uk>
+Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
+Signed-off-by: Tong Zhang <ztong0001@gmail.com>
+Link: https://lore.kernel.org/r/20210315195814.4692-1-ztong0001@gmail.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/staging/comedi/drivers/cb_pcidas64.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c
+index fa987bb0e7cd..6d3ba399a7f0 100644
+--- a/drivers/staging/comedi/drivers/cb_pcidas64.c
++++ b/drivers/staging/comedi/drivers/cb_pcidas64.c
+@@ -4035,7 +4035,7 @@ static int auto_attach(struct comedi_device *dev,
+       init_stc_registers(dev);
+       retval = request_irq(pcidev->irq, handle_interrupt, IRQF_SHARED,
+-                           dev->board_name, dev);
++                           "cb_pcidas64", dev);
+       if (retval) {
+               dev_dbg(dev->class_dev, "unable to allocate irq %u\n",
+                       pcidev->irq);
+-- 
+2.30.1
+
diff --git a/queue-5.10/static_call-align-static_call_is_init-patching-condi.patch b/queue-5.10/static_call-align-static_call_is_init-patching-condi.patch
new file mode 100644 (file)
index 0000000..973a487
--- /dev/null
@@ -0,0 +1,69 @@
+From 258be26fa624f5e4677a8fea361af37477cf536e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 18 Mar 2021 11:29:56 +0100
+Subject: static_call: Align static_call_is_init() patching condition
+
+From: Peter Zijlstra <peterz@infradead.org>
+
+[ Upstream commit 698bacefe993ad2922c9d3b1380591ad489355e9 ]
+
+The intent is to avoid writing init code after init (because the text
+might have been freed). The code is needlessly different between
+jump_label and static_call and not obviously correct.
+
+The existing code relies on the fact that the module loader clears the
+init layout, such that within_module_init() always fails, while
+jump_label relies on the module state which is more obvious and
+matches the kernel logic.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Acked-by: Jarkko Sakkinen <jarkko@kernel.org>
+Tested-by: Sumit Garg <sumit.garg@linaro.org>
+Link: https://lkml.kernel.org/r/20210318113610.636651340@infradead.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/static_call.c | 14 ++++----------
+ 1 file changed, 4 insertions(+), 10 deletions(-)
+
+diff --git a/kernel/static_call.c b/kernel/static_call.c
+index 49efbdc5b480..f59089a12231 100644
+--- a/kernel/static_call.c
++++ b/kernel/static_call.c
+@@ -149,6 +149,7 @@ void __static_call_update(struct static_call_key *key, void *tramp, void *func)
+       };
+       for (site_mod = &first; site_mod; site_mod = site_mod->next) {
++              bool init = system_state < SYSTEM_RUNNING;
+               struct module *mod = site_mod->mod;
+               if (!site_mod->sites) {
+@@ -168,6 +169,7 @@ void __static_call_update(struct static_call_key *key, void *tramp, void *func)
+               if (mod) {
+                       stop = mod->static_call_sites +
+                              mod->num_static_call_sites;
++                      init = mod->state == MODULE_STATE_COMING;
+               }
+ #endif
+@@ -175,16 +177,8 @@ void __static_call_update(struct static_call_key *key, void *tramp, void *func)
+                    site < stop && static_call_key(site) == key; site++) {
+                       void *site_addr = static_call_addr(site);
+-                      if (static_call_is_init(site)) {
+-                              /*
+-                               * Don't write to call sites which were in
+-                               * initmem and have since been freed.
+-                               */
+-                              if (!mod && system_state >= SYSTEM_RUNNING)
+-                                      continue;
+-                              if (mod && !within_module_init((unsigned long)site_addr, mod))
+-                                      continue;
+-                      }
++                      if (!init && static_call_is_init(site))
++                              continue;
+                       if (!kernel_text_address((unsigned long)site_addr)) {
+                               /*
+-- 
+2.30.1
+
diff --git a/queue-5.10/thermal-core-add-null-pointer-check-before-using-coo.patch b/queue-5.10/thermal-core-add-null-pointer-check-before-using-coo.patch
new file mode 100644 (file)
index 0000000..332cdbb
--- /dev/null
@@ -0,0 +1,61 @@
+From 53fe7e60069c87f9d89c9bc0486646a446978870 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Dec 2020 00:23:01 +0530
+Subject: thermal/core: Add NULL pointer check before using cooling device
+ stats
+
+From: Manaf Meethalavalappu Pallikunhi <manafm@codeaurora.org>
+
+[ Upstream commit 2046a24ae121cd107929655a6aaf3b8c5beea01f ]
+
+There is a possible chance that some cooling device stats buffer
+allocation fails due to very high cooling device max state value.
+Later cooling device update sysfs can try to access stats data
+for the same cooling device. It will lead to NULL pointer
+dereference issue.
+
+Add a NULL pointer check before accessing thermal cooling device
+stats data. It fixes the following bug
+
+[ 26.812833] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
+[ 27.122960] Call trace:
+[ 27.122963] do_raw_spin_lock+0x18/0xe8
+[ 27.122966] _raw_spin_lock+0x24/0x30
+[ 27.128157] thermal_cooling_device_stats_update+0x24/0x98
+[ 27.128162] cur_state_store+0x88/0xb8
+[ 27.128166] dev_attr_store+0x40/0x58
+[ 27.128169] sysfs_kf_write+0x50/0x68
+[ 27.133358] kernfs_fop_write+0x12c/0x1c8
+[ 27.133362] __vfs_write+0x54/0x160
+[ 27.152297] vfs_write+0xcc/0x188
+[ 27.157132] ksys_write+0x78/0x108
+[ 27.162050] ksys_write+0xf8/0x108
+[ 27.166968] __arm_smccc_hvc+0x158/0x4b0
+[ 27.166973] __arm_smccc_hvc+0x9c/0x4b0
+[ 27.186005] el0_svc+0x8/0xc
+
+Signed-off-by: Manaf Meethalavalappu Pallikunhi <manafm@codeaurora.org>
+Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+Link: https://lore.kernel.org/r/1607367181-24589-1-git-send-email-manafm@codeaurora.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/thermal/thermal_sysfs.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
+index a6f371fc9af2..f52708f310e0 100644
+--- a/drivers/thermal/thermal_sysfs.c
++++ b/drivers/thermal/thermal_sysfs.c
+@@ -754,6 +754,9 @@ void thermal_cooling_device_stats_update(struct thermal_cooling_device *cdev,
+ {
+       struct cooling_dev_stats *stats = cdev->stats;
++      if (!stats)
++              return;
++
+       spin_lock(&stats->lock);
+       if (stats->state == new_state)
+-- 
+2.30.1
+
diff --git a/queue-5.10/vhost-fix-vhost_vq_reset.patch b/queue-5.10/vhost-fix-vhost_vq_reset.patch
new file mode 100644 (file)
index 0000000..2f6efc7
--- /dev/null
@@ -0,0 +1,49 @@
+From 66c070bacc094b14601da175e8a700e4b09bad41 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 12 Mar 2021 15:09:13 +0100
+Subject: vhost: Fix vhost_vq_reset()
+
+From: Laurent Vivier <lvivier@redhat.com>
+
+[ Upstream commit beb691e69f4dec7bfe8b81b509848acfd1f0dbf9 ]
+
+vhost_reset_is_le() is vhost_init_is_le(), and in the case of
+cross-endian legacy, vhost_init_is_le() depends on vq->user_be.
+
+vq->user_be is set by vhost_disable_cross_endian().
+
+But in vhost_vq_reset(), we have:
+
+    vhost_reset_is_le(vq);
+    vhost_disable_cross_endian(vq);
+
+And so user_be is used before being set.
+
+To fix that, reverse the lines order as there is no other dependency
+between them.
+
+Signed-off-by: Laurent Vivier <lvivier@redhat.com>
+Link: https://lore.kernel.org/r/20210312140913.788592-1-lvivier@redhat.com
+Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/vhost/vhost.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
+index a262e12c6dc2..5ccb0705beae 100644
+--- a/drivers/vhost/vhost.c
++++ b/drivers/vhost/vhost.c
+@@ -332,8 +332,8 @@ static void vhost_vq_reset(struct vhost_dev *dev,
+       vq->error_ctx = NULL;
+       vq->kick = NULL;
+       vq->log_ctx = NULL;
+-      vhost_reset_is_le(vq);
+       vhost_disable_cross_endian(vq);
++      vhost_reset_is_le(vq);
+       vq->busyloop_timeout = 0;
+       vq->umem = NULL;
+       vq->iotlb = NULL;
+-- 
+2.30.1
+
diff --git a/queue-5.10/virtiofs-fail-dax-mount-if-device-does-not-support-i.patch b/queue-5.10/virtiofs-fail-dax-mount-if-device-does-not-support-i.patch
new file mode 100644 (file)
index 0000000..cd21126
--- /dev/null
@@ -0,0 +1,51 @@
+From 2de4cf0d54aa57b530f3f8825915625673eeea0c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 9 Feb 2021 17:47:54 -0500
+Subject: virtiofs: Fail dax mount if device does not support it
+
+From: Vivek Goyal <vgoyal@redhat.com>
+
+[ Upstream commit 3f9b9efd82a84f27e95d0414f852caf1fa839e83 ]
+
+Right now "mount -t virtiofs -o dax myfs /mnt/virtiofs" succeeds even
+if filesystem deivce does not have a cache window and hence DAX can't
+be supported.
+
+This gives a false sense to user that they are using DAX with virtiofs
+but fact of the matter is that they are not.
+
+Fix this by returning error if dax can't be supported and user has asked
+for it.
+
+Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
+Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
+Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/fuse/virtio_fs.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c
+index d2c0e58c6416..3d83c9e12848 100644
+--- a/fs/fuse/virtio_fs.c
++++ b/fs/fuse/virtio_fs.c
+@@ -1324,8 +1324,15 @@ static int virtio_fs_fill_super(struct super_block *sb, struct fs_context *fsc)
+       /* virtiofs allocates and installs its own fuse devices */
+       ctx->fudptr = NULL;
+-      if (ctx->dax)
++      if (ctx->dax) {
++              if (!fs->dax_dev) {
++                      err = -EINVAL;
++                      pr_err("virtio-fs: dax can't be enabled as filesystem"
++                             " device does not support it.\n");
++                      goto err_free_fuse_devs;
++              }
+               ctx->dax_dev = fs->dax_dev;
++      }
+       err = fuse_fill_super_common(sb, ctx);
+       if (err < 0)
+               goto err_free_fuse_devs;
+-- 
+2.30.1
+