]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 8 Jan 2019 07:46:59 +0000 (08:46 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 8 Jan 2019 07:46:59 +0000 (08:46 +0100)
added patches:
spi-bcm2835-unbreak-the-build-of-esoteric-configs.patch

queue-4.9/btrfs-fix-fsync-of-files-with-multiple-hard-links-in-new-directories.patch [deleted file]
queue-4.9/series
queue-4.9/spi-bcm2835-unbreak-the-build-of-esoteric-configs.patch [new file with mode: 0644]

diff --git a/queue-4.9/btrfs-fix-fsync-of-files-with-multiple-hard-links-in-new-directories.patch b/queue-4.9/btrfs-fix-fsync-of-files-with-multiple-hard-links-in-new-directories.patch
deleted file mode 100644 (file)
index eec7986..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-From 41bd60676923822de1df2c50b3f9a10171f4338a Mon Sep 17 00:00:00 2001
-From: Filipe Manana <fdmanana@suse.com>
-Date: Wed, 28 Nov 2018 14:54:28 +0000
-Subject: Btrfs: fix fsync of files with multiple hard links in new directories
-
-From: Filipe Manana <fdmanana@suse.com>
-
-commit 41bd60676923822de1df2c50b3f9a10171f4338a upstream.
-
-The log tree has a long standing problem that when a file is fsync'ed we
-only check for new ancestors, created in the current transaction, by
-following only the hard link for which the fsync was issued. We follow the
-ancestors using the VFS' dget_parent() API. This means that if we create a
-new link for a file in a directory that is new (or in an any other new
-ancestor directory) and then fsync the file using an old hard link, we end
-up not logging the new ancestor, and on log replay that new hard link and
-ancestor do not exist. In some cases, involving renames, the file will not
-exist at all.
-
-Example:
-
-  mkfs.btrfs -f /dev/sdb
-  mount /dev/sdb /mnt
-
-  mkdir /mnt/A
-  touch /mnt/foo
-  ln /mnt/foo /mnt/A/bar
-  xfs_io -c fsync /mnt/foo
-
-  <power failure>
-
-In this example after log replay only the hard link named 'foo' exists
-and directory A does not exist, which is unexpected. In other major linux
-filesystems, such as ext4, xfs and f2fs for example, both hard links exist
-and so does directory A after mounting again the filesystem.
-
-Checking if any new ancestors are new and need to be logged was added in
-2009 by commit 12fcfd22fe5b ("Btrfs: tree logging unlink/rename fixes"),
-however only for the ancestors of the hard link (dentry) for which the
-fsync was issued, instead of checking for all ancestors for all of the
-inode's hard links.
-
-So fix this by tracking the id of the last transaction where a hard link
-was created for an inode and then on fsync fallback to a full transaction
-commit when an inode has more than one hard link and at least one new hard
-link was created in the current transaction. This is the simplest solution
-since this is not a common use case (adding frequently hard links for
-which there's an ancestor created in the current transaction and then
-fsync the file). In case it ever becomes a common use case, a solution
-that consists of iterating the fs/subvol btree for each hard link and
-check if any ancestor is new, could be implemented.
-
-This solves many unexpected scenarios reported by Jayashree Mohan and
-Vijay Chidambaram, and for which there is a new test case for fstests
-under review.
-
-Fixes: 12fcfd22fe5b ("Btrfs: tree logging unlink/rename fixes")
-CC: stable@vger.kernel.org # 4.4+
-Reported-by: Vijay Chidambaram <vvijay03@gmail.com>
-Reported-by: Jayashree Mohan <jayashree2912@gmail.com>
-Signed-off-by: Filipe Manana <fdmanana@suse.com>
-Signed-off-by: David Sterba <dsterba@suse.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- fs/btrfs/btrfs_inode.h |    6 ++++++
- fs/btrfs/inode.c       |   17 +++++++++++++++++
- fs/btrfs/tree-log.c    |   16 ++++++++++++++++
- 3 files changed, 39 insertions(+)
-
---- a/fs/btrfs/btrfs_inode.h
-+++ b/fs/btrfs/btrfs_inode.h
-@@ -154,6 +154,12 @@ struct btrfs_inode {
-       u64 last_unlink_trans;
-       /*
-+       * Track the transaction id of the last transaction used to create a
-+       * hard link for the inode. This is used by the log tree (fsync).
-+       */
-+      u64 last_link_trans;
-+
-+      /*
-        * Number of bytes outstanding that are going to need csums.  This is
-        * used in ENOSPC accounting.
-        */
---- a/fs/btrfs/inode.c
-+++ b/fs/btrfs/inode.c
-@@ -3805,6 +3805,21 @@ cache_index:
-        * inode is not a directory, logging its parent unnecessarily.
-        */
-       BTRFS_I(inode)->last_unlink_trans = BTRFS_I(inode)->last_trans;
-+      /*
-+       * Similar reasoning for last_link_trans, needs to be set otherwise
-+       * for a case like the following:
-+       *
-+       * mkdir A
-+       * touch foo
-+       * ln foo A/bar
-+       * echo 2 > /proc/sys/vm/drop_caches
-+       * fsync foo
-+       * <power failure>
-+       *
-+       * Would result in link bar and directory A not existing after the power
-+       * failure.
-+       */
-+      BTRFS_I(inode)->last_link_trans = BTRFS_I(inode)->last_trans;
-       path->slots[0]++;
-       if (inode->i_nlink != 1 ||
-@@ -6670,6 +6685,7 @@ static int btrfs_link(struct dentry *old
-                       if (err)
-                               goto fail;
-               }
-+              BTRFS_I(inode)->last_link_trans = trans->transid;
-               d_instantiate(dentry, inode);
-               btrfs_log_new_name(trans, inode, NULL, parent);
-       }
-@@ -9383,6 +9399,7 @@ struct inode *btrfs_alloc_inode(struct s
-       ei->index_cnt = (u64)-1;
-       ei->dir_index = 0;
-       ei->last_unlink_trans = 0;
-+      ei->last_link_trans = 0;
-       ei->last_log_commit = 0;
-       ei->delayed_iput_count = 0;
---- a/fs/btrfs/tree-log.c
-+++ b/fs/btrfs/tree-log.c
-@@ -5549,6 +5549,22 @@ static int btrfs_log_inode_parent(struct
-                       goto end_trans;
-       }
-+      /*
-+       * If a new hard link was added to the inode in the current transaction
-+       * and its link count is now greater than 1, we need to fallback to a
-+       * transaction commit, otherwise we can end up not logging all its new
-+       * parents for all the hard links. Here just from the dentry used to
-+       * fsync, we can not visit the ancestor inodes for all the other hard
-+       * links to figure out if any is new, so we fallback to a transaction
-+       * commit (instead of adding a lot of complexity of scanning a btree,
-+       * since this scenario is not a common use case).
-+       */
-+      if (inode->vfs_inode.i_nlink > 1 &&
-+          inode->last_link_trans > last_committed) {
-+              ret = -EMLINK;
-+              goto end_trans;
-+      }
-+
-       while (1) {
-               if (!parent || d_really_is_negative(parent) || sb != parent->d_sb)
-                       break;
index 4dabc25820b842067d9336b080a140da622ec658..f49c8b0e7f19f27583a3db6217cc6a0e55d40155 100644 (file)
@@ -1,8 +1,6 @@
 nfc-nxp-nci-include-unaligned.h-instead-of-access_ok.h.patch
 ip6mr-fix-potential-spectre-v1-vulnerability.patch
 ipv4-fix-potential-spectre-v1-vulnerability.patch
-net-core-fix-spectre-v1-vulnerability.patch
-phonet-af_phonet-fix-spectre-v1-vulnerability.patch
 ax25-fix-a-use-after-free-in-ax25_fillin_cb.patch
 ibmveth-fix-dma-unmap-error-in-ibmveth_xmit_start-error-path.patch
 ieee802154-lowpan_header_create-check-must-check-daddr.patch
@@ -53,7 +51,6 @@ spi-bcm2835-fix-book-keeping-of-dma-termination.patch
 spi-bcm2835-avoid-finishing-transfer-prematurely-in-irq-mode.patch
 clk-rockchip-fix-typo-in-rk3188-spdif_frac-parent.patch
 cdc-acm-fix-abnormal-data-rx-issue-for-mediatek-preloader.patch
-btrfs-fix-fsync-of-files-with-multiple-hard-links-in-new-directories.patch
 powerpc-tm-set-msr-just-prior-to-recheckpoint.patch
 f2fs-fix-validation-of-the-block-count-in-sanity_check_raw_super.patch
 serial-uartps-fix-interrupt-mask-issue-to-handle-the-rx-interrupts-properly.patch
@@ -67,3 +64,4 @@ x86-kvm-vmx-do-not-use-vm-exit-instruction-length-for-fast-mmio-when-running-nes
 arm64-kvm-avoid-setting-the-upper-32-bits-of-vtcr_el2-to-1.patch
 rtc-m41t80-correct-alarm-month-range-with-rtc-reads.patch
 tpm-tpm_i2c_nuvoton-use-correct-command-duration-for-tpm-2.x.patch
+spi-bcm2835-unbreak-the-build-of-esoteric-configs.patch
diff --git a/queue-4.9/spi-bcm2835-unbreak-the-build-of-esoteric-configs.patch b/queue-4.9/spi-bcm2835-unbreak-the-build-of-esoteric-configs.patch
new file mode 100644 (file)
index 0000000..8bc04c1
--- /dev/null
@@ -0,0 +1,42 @@
+From 29bdedfd9cf40e59456110ca417a8cb672ac9b92 Mon Sep 17 00:00:00 2001
+From: Lukas Wunner <lukas@wunner.de>
+Date: Thu, 29 Nov 2018 15:14:49 +0100
+Subject: spi: bcm2835: Unbreak the build of esoteric configs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Lukas Wunner <lukas@wunner.de>
+
+commit 29bdedfd9cf40e59456110ca417a8cb672ac9b92 upstream.
+
+Commit e82b0b382845 ("spi: bcm2835: Fix race on DMA termination") broke
+the build with COMPILE_TEST=y on arches whose cmpxchg() requires 32-bit
+operands (xtensa, older arm ISAs).
+
+Fix by changing the dma_pending flag's type from bool to unsigned int.
+
+Fixes: e82b0b382845 ("spi: bcm2835: Fix race on DMA termination")
+Signed-off-by: Lukas Wunner <lukas@wunner.de>
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Cc: Frank Pavlic <f.pavlic@kunbus.de>
+Cc: Martin Sperl <kernel@martin.sperl.org>
+Cc: Noralf Trønnes <noralf@tronnes.org>
+Cc: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/spi/spi-bcm2835.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/spi/spi-bcm2835.c
++++ b/drivers/spi/spi-bcm2835.c
+@@ -88,7 +88,7 @@ struct bcm2835_spi {
+       u8 *rx_buf;
+       int tx_len;
+       int rx_len;
+-      bool dma_pending;
++      unsigned int dma_pending;
+ };
+ static inline u32 bcm2835_rd(struct bcm2835_spi *bs, unsigned reg)