From: Greg Kroah-Hartman Date: Mon, 4 Dec 2017 12:21:19 +0000 (+0100) Subject: 4.4-stable patches X-Git-Tag: v3.18.86~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8637679e3d7eac01d220efa0aa73538c95348328;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: mtd-nand-fix-writing-mtdoops-to-nand-flash.patch nfs-revalidate-.-etc-correctly-on-open.patch --- diff --git a/queue-4.4/mtd-nand-fix-writing-mtdoops-to-nand-flash.patch b/queue-4.4/mtd-nand-fix-writing-mtdoops-to-nand-flash.patch new file mode 100644 index 00000000000..25d8fb4cfdf --- /dev/null +++ b/queue-4.4/mtd-nand-fix-writing-mtdoops-to-nand-flash.patch @@ -0,0 +1,51 @@ +From 30863e38ebeb500a31cecee8096fb5002677dd9b Mon Sep 17 00:00:00 2001 +From: Brent Taylor +Date: Mon, 30 Oct 2017 22:32:45 -0500 +Subject: mtd: nand: Fix writing mtdoops to nand flash. + +From: Brent Taylor + +commit 30863e38ebeb500a31cecee8096fb5002677dd9b upstream. + +When mtdoops calls mtd_panic_write(), it eventually calls +panic_nand_write() in nand_base.c. In order to properly wait for the +nand chip to be ready in panic_nand_wait(), the chip must first be +selected. + +When using the atmel nand flash controller, a panic would occur due to +a NULL pointer exception. + +Fixes: 2af7c6539931 ("mtd: Add panic_write for NAND flashes") +Cc: +Signed-off-by: Brent Taylor +Signed-off-by: Boris Brezillon +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mtd/nand/nand_base.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +--- a/drivers/mtd/nand/nand_base.c ++++ b/drivers/mtd/nand/nand_base.c +@@ -2663,15 +2663,18 @@ static int panic_nand_write(struct mtd_i + size_t *retlen, const uint8_t *buf) + { + struct nand_chip *chip = mtd->priv; ++ int chipnr = (int)(to >> chip->chip_shift); + struct mtd_oob_ops ops; + int ret; + +- /* Wait for the device to get ready */ +- panic_nand_wait(mtd, chip, 400); +- + /* Grab the device */ + panic_nand_get_device(chip, mtd, FL_WRITING); + ++ chip->select_chip(mtd, chipnr); ++ ++ /* Wait for the device to get ready */ ++ panic_nand_wait(mtd, chip, 400); ++ + memset(&ops, 0, sizeof(ops)); + ops.len = len; + ops.datbuf = (uint8_t *)buf; diff --git a/queue-4.4/nfs-revalidate-.-etc-correctly-on-open.patch b/queue-4.4/nfs-revalidate-.-etc-correctly-on-open.patch new file mode 100644 index 00000000000..f73cd803505 --- /dev/null +++ b/queue-4.4/nfs-revalidate-.-etc-correctly-on-open.patch @@ -0,0 +1,60 @@ +From b688741cb06695312f18b730653d6611e1bad28d Mon Sep 17 00:00:00 2001 +From: NeilBrown +Date: Fri, 25 Aug 2017 17:34:41 +1000 +Subject: NFS: revalidate "." etc correctly on "open". + +From: NeilBrown + +commit b688741cb06695312f18b730653d6611e1bad28d upstream. + +For correct close-to-open semantics, NFS must validate +the change attribute of a directory (or file) on open. + +Since commit ecf3d1f1aa74 ("vfs: kill FS_REVAL_DOT by adding a +d_weak_revalidate dentry op"), open() of "." or a path ending ".." is +not revalidated reliably (except when that direct is a mount point). + +Prior to that commit, "." was revalidated using nfs_lookup_revalidate() +which checks the LOOKUP_OPEN flag and forces revalidation if the flag is +set. +Since that commit, nfs_weak_revalidate() is used for NFSv3 (which +ignores the flags) and nothing is used for NFSv4. + +This is fixed by using nfs_lookup_verify_inode() in +nfs_weak_revalidate(). This does the revalidation exactly when needed. +Also, add a definition of .d_weak_revalidate for NFSv4. + +The incorrect behavior is easily demonstrated by running "echo *" in +some non-mountpoint NFS directory while watching network traffic. +Without this patch, "echo *" sometimes doesn't produce any traffic. +With the patch it always does. + +Fixes: ecf3d1f1aa74 ("vfs: kill FS_REVAL_DOT by adding a d_weak_revalidate dentry op") +cc: stable@vger.kernel.org (3.9+) +Signed-off-by: NeilBrown +Signed-off-by: Anna Schumaker +Signed-off-by: Greg Kroah-Hartman + +--- + fs/nfs/dir.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/fs/nfs/dir.c ++++ b/fs/nfs/dir.c +@@ -1260,7 +1260,7 @@ static int nfs_weak_revalidate(struct de + return 0; + } + +- error = nfs_revalidate_inode(NFS_SERVER(inode), inode); ++ error = nfs_lookup_verify_inode(inode, flags); + dfprintk(LOOKUPCACHE, "NFS: %s: inode %lu is %s\n", + __func__, inode->i_ino, error ? "invalid" : "valid"); + return !error; +@@ -1420,6 +1420,7 @@ static int nfs4_lookup_revalidate(struct + + const struct dentry_operations nfs4_dentry_operations = { + .d_revalidate = nfs4_lookup_revalidate, ++ .d_weak_revalidate = nfs_weak_revalidate, + .d_delete = nfs_dentry_delete, + .d_iput = nfs_dentry_iput, + .d_automount = nfs_d_automount, diff --git a/queue-4.4/series b/queue-4.4/series index 77a5c0270ee..be27457e1da 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -18,3 +18,5 @@ bcache-fix-building-error-on-mips.patch revert-drm-radeon-dont-switch-vt-on-suspend.patch drm-radeon-fix-atombios-on-big-endian.patch drm-panel-simple-add-missing-panel_simple_unprepare-calls.patch +mtd-nand-fix-writing-mtdoops-to-nand-flash.patch +nfs-revalidate-.-etc-correctly-on-open.patch