public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Eric Whitney <enwlinux@gmail.com>,
	"Theodore Tso" <tytso@mit.edu>
Subject: [PATCH 3.13 22/32] ext4: fix partial cluster handling for bigalloc file systems
Date: Sun, 20 Apr 2014 19:13:39 -0700	[thread overview]
Message-ID: <20140421021136.899280056@linuxfoundation.org> (raw)
In-Reply-To: <20140421021133.865086647@linuxfoundation.org>

3.13-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Eric Whitney <enwlinux@gmail.com>

commit c06344939422bbd032ac967223a7863de57496b5 upstream.

Commit 9cb00419fa, which enables hole punching for bigalloc file
systems, exposed a bug introduced by commit 6ae06ff51e in an earlier
release.  When run on a bigalloc file system, xfstests generic/013, 068,
075, 083, 091, 100, 112, 127, 263, 269, and 270 fail with e2fsck errors
or cause kernel error messages indicating that previously freed blocks
are being freed again.

The latter commit optimizes the selection of the starting extent in
ext4_ext_rm_leaf() when hole punching by beginning with the extent
supplied in the path argument rather than with the last extent in the
leaf node (as is still done when truncating).  However, the code in
rm_leaf that initially sets partial_cluster to track cluster sharing on
extent boundaries is only guaranteed to run if rm_leaf starts with the
last node in the leaf.  Consequently, partial_cluster is not correctly
initialized when hole punching, and a cluster on the boundary of a
punched region that should be retained may instead be deallocated.

Signed-off-by: Eric Whitney <enwlinux@gmail.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/ext4/extents.c |   21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -2585,6 +2585,27 @@ ext4_ext_rm_leaf(handle_t *handle, struc
 	ex_ee_block = le32_to_cpu(ex->ee_block);
 	ex_ee_len = ext4_ext_get_actual_len(ex);
 
+	/*
+	 * If we're starting with an extent other than the last one in the
+	 * node, we need to see if it shares a cluster with the extent to
+	 * the right (towards the end of the file). If its leftmost cluster
+	 * is this extent's rightmost cluster and it is not cluster aligned,
+	 * we'll mark it as a partial that is not to be deallocated.
+	 */
+
+	if (ex != EXT_LAST_EXTENT(eh)) {
+		ext4_fsblk_t current_pblk, right_pblk;
+		long long current_cluster, right_cluster;
+
+		current_pblk = ext4_ext_pblock(ex) + ex_ee_len - 1;
+		current_cluster = (long long)EXT4_B2C(sbi, current_pblk);
+		right_pblk = ext4_ext_pblock(ex + 1);
+		right_cluster = (long long)EXT4_B2C(sbi, right_pblk);
+		if (current_cluster == right_cluster &&
+			EXT4_PBLK_COFF(sbi, right_pblk))
+			*partial_cluster = -right_cluster;
+	}
+
 	trace_ext4_ext_rm_leaf(inode, start, ex, *partial_cluster);
 
 	while (ex >= EXT_FIRST_EXTENT(eh) &&



  parent reply	other threads:[~2014-04-21  4:37 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-21  2:13 [PATCH 3.13 00/32] 3.13.11-stable review Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 01/32] user namespace: fix incorrect memory barriers Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 02/32] Char: ipmi_bt_sm, fix infinite loop Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 03/32] x86, hyperv: Bypass the timer_irq_works() check Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 04/32] x86: Adjust irq remapping quirk for older revisions of 5500/5520 chipsets Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 05/32] PCI: designware: Fix RC BAR to be single 64-bit non-prefetchable memory BAR Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 06/32] PCI: designware: Fix iATU programming for cfg1, io and mem viewport Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 07/32] ACPI / button: Add ACPI Button event via netlink routine Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 08/32] PCI: Enable INTx in pci_reenable_device() only when MSI/MSI-X not enabled Greg Kroah-Hartman
2014-04-21 14:24   ` Ben Hutchings
2014-04-22 16:32     ` Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 09/32] staging: comedi: 8255_pci: initialize MITE data window Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 10/32] tty: Set correct tty name in active sysfs attribute Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 11/32] tty: Fix low_latency BUG Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 12/32] SCSI: sd: dont fail if the device doesnt recognize SYNCHRONIZE CACHE Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 14/32] Bluetooth: Fix removing Long Term Key Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 15/32] ima: restore the original behavior for sending data with ima template Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 16/32] backing_dev: fix hung task on sync Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 17/32] bdi: avoid oops on device removal Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 18/32] xfs: fix directory hash ordering bug Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 19/32] Btrfs: skip submitting barrier for missing device Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 20/32] Btrfs: fix deadlock with nested trans handles Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 21/32] ext4: fix error return from ext4_ext_handle_uninitialized_extents() Greg Kroah-Hartman
2014-04-21  2:13 ` Greg Kroah-Hartman [this message]
2014-04-21  2:13 ` [PATCH 3.13 23/32] ext4: fix premature freeing of partial clusters split across leaf blocks Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 24/32] jffs2: Fix segmentation fault found in stress test Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 25/32] jffs2: Fix crash due to truncation of csize Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 26/32] jffs2: avoid soft-lockup in jffs2_reserve_space_gc() Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 27/32] jffs2: remove from wait queue after schedule() Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 28/32] sparc32: fix build failure for arch_jump_label_transform Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 29/32] sparc64: dont treat 64-bit syscall return codes as 32-bit Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 30/32] sparc64: Make sure %pil interrupts are enabled during hypervisor yield Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 31/32] wait: fix reparent_leader() vs EXIT_DEAD->EXIT_ZOMBIE race Greg Kroah-Hartman
2014-04-21  2:13 ` [PATCH 3.13 32/32] exit: call disassociate_ctty() before exit_task_namespaces() Greg Kroah-Hartman
2014-04-21 13:25 ` [PATCH 3.13 00/32] 3.13.11-stable review Guenter Roeck
2014-04-21 19:03   ` Greg Kroah-Hartman
2014-04-22  1:06 ` Guenter Roeck
2014-04-22  1:14   ` Greg Kroah-Hartman
2014-04-22 15:48 ` Shuah Khan
2014-04-22 19:36   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140421021136.899280056@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=enwlinux@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox