stable.vger.kernel.org archive mirror
 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, Joe Thornber <ejt@redhat.com>,
	Mike Snitzer <snitzer@redhat.com>
Subject: [PATCH 3.10 18/54] dm btree: add ref counting ops for the leaves of top level btrees
Date: Sat, 17 Oct 2015 19:05:22 -0700	[thread overview]
Message-ID: <20151018020314.875120470@linuxfoundation.org> (raw)
In-Reply-To: <20151018020314.063429128@linuxfoundation.org>

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

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

From: Joe Thornber <ejt@redhat.com>

commit b0dc3c8bc157c60b1d470163882be8c13e1950af upstream.

When using nested btrees, the top leaves of the top levels contain
block addresses for the root of the next tree down.  If we shadow a
shared leaf node the leaf values (sub tree roots) should be incremented
accordingly.

This is only an issue if there is metadata sharing in the top levels.
Which only occurs if metadata snapshots are being used (as is possible
with dm-thinp).  And could result in a block from the thinp metadata
snap being reused early, thus corrupting the thinp metadata snap.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/persistent-data/dm-btree-internal.h |    6 ++++
 drivers/md/persistent-data/dm-btree-remove.c   |   12 ++------
 drivers/md/persistent-data/dm-btree-spine.c    |   37 +++++++++++++++++++++++++
 drivers/md/persistent-data/dm-btree.c          |    7 ----
 4 files changed, 47 insertions(+), 15 deletions(-)

--- a/drivers/md/persistent-data/dm-btree-internal.h
+++ b/drivers/md/persistent-data/dm-btree-internal.h
@@ -138,4 +138,10 @@ int lower_bound(struct btree_node *n, ui
 
 extern struct dm_block_validator btree_node_validator;
 
+/*
+ * Value type for upper levels of multi-level btrees.
+ */
+extern void init_le64_type(struct dm_transaction_manager *tm,
+			   struct dm_btree_value_type *vt);
+
 #endif	/* DM_BTREE_INTERNAL_H */
--- a/drivers/md/persistent-data/dm-btree-remove.c
+++ b/drivers/md/persistent-data/dm-btree-remove.c
@@ -544,14 +544,6 @@ static int remove_raw(struct shadow_spin
 	return r;
 }
 
-static struct dm_btree_value_type le64_type = {
-	.context = NULL,
-	.size = sizeof(__le64),
-	.inc = NULL,
-	.dec = NULL,
-	.equal = NULL
-};
-
 int dm_btree_remove(struct dm_btree_info *info, dm_block_t root,
 		    uint64_t *keys, dm_block_t *new_root)
 {
@@ -559,12 +551,14 @@ int dm_btree_remove(struct dm_btree_info
 	int index = 0, r = 0;
 	struct shadow_spine spine;
 	struct btree_node *n;
+	struct dm_btree_value_type le64_vt;
 
+	init_le64_type(info->tm, &le64_vt);
 	init_shadow_spine(&spine, info);
 	for (level = 0; level < info->levels; level++) {
 		r = remove_raw(&spine, info,
 			       (level == last_level ?
-				&info->value_type : &le64_type),
+				&info->value_type : &le64_vt),
 			       root, keys[level], (unsigned *)&index);
 		if (r < 0)
 			break;
--- a/drivers/md/persistent-data/dm-btree-spine.c
+++ b/drivers/md/persistent-data/dm-btree-spine.c
@@ -249,3 +249,40 @@ int shadow_root(struct shadow_spine *s)
 {
 	return s->root;
 }
+
+static void le64_inc(void *context, const void *value_le)
+{
+	struct dm_transaction_manager *tm = context;
+	__le64 v_le;
+
+	memcpy(&v_le, value_le, sizeof(v_le));
+	dm_tm_inc(tm, le64_to_cpu(v_le));
+}
+
+static void le64_dec(void *context, const void *value_le)
+{
+	struct dm_transaction_manager *tm = context;
+	__le64 v_le;
+
+	memcpy(&v_le, value_le, sizeof(v_le));
+	dm_tm_dec(tm, le64_to_cpu(v_le));
+}
+
+static int le64_equal(void *context, const void *value1_le, const void *value2_le)
+{
+	__le64 v1_le, v2_le;
+
+	memcpy(&v1_le, value1_le, sizeof(v1_le));
+	memcpy(&v2_le, value2_le, sizeof(v2_le));
+	return v1_le == v2_le;
+}
+
+void init_le64_type(struct dm_transaction_manager *tm,
+		    struct dm_btree_value_type *vt)
+{
+	vt->context = tm;
+	vt->size = sizeof(__le64);
+	vt->inc = le64_inc;
+	vt->dec = le64_dec;
+	vt->equal = le64_equal;
+}
--- a/drivers/md/persistent-data/dm-btree.c
+++ b/drivers/md/persistent-data/dm-btree.c
@@ -651,12 +651,7 @@ static int insert(struct dm_btree_info *
 	struct btree_node *n;
 	struct dm_btree_value_type le64_type;
 
-	le64_type.context = NULL;
-	le64_type.size = sizeof(__le64);
-	le64_type.inc = NULL;
-	le64_type.dec = NULL;
-	le64_type.equal = NULL;
-
+	init_le64_type(info->tm, &le64_type);
 	init_shadow_spine(&spine, info);
 
 	for (level = 0; level < (info->levels - 1); level++) {



  parent reply	other threads:[~2015-10-18  2:51 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-18  2:05 [PATCH 3.10 00/54] 3.10.91-stable review Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 01/54] scsi: fix scsi_error_handler vs. scsi_host_dev_release race Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 02/54] perf header: Fixup reading of HEADER_NRCPUS feature Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 03/54] ARM: 8429/1: disable GCC SRA optimization Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 04/54] windfarm: decrement client count when unregistering Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 05/54] x86/apic: Serialize LVTT and TSC_DEADLINE writes Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 06/54] x86/platform: Fix Geode LX timekeeping in the generic x86 build Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 07/54] Use WARN_ON_ONCE for missing X86_FEATURE_NRIPS Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 08/54] x86/mm: Set NX on gap between __ex_table and rodata Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 09/54] x86/xen: Support kexec/kdump in HVM guests by doing a soft reset Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 10/54] spi: Fix documentation of spi_alloc_master() Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 11/54] spi: spi-pxa2xx: Check status register to determine if SSSR_TINT is disabled Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 12/54] mm: hugetlbfs: skip shared VMAs when unmapping private pages to satisfy a fault Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 13/54] ALSA: synth: Fix conflicting OSS device registration on AWE32 Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 14/54] ASoC: fix broken pxa SoC support Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 15/54] ASoC: dwc: correct irq clear method Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 16/54] btrfs: skip waiting on ordered range for special files Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 17/54] staging: comedi: adl_pci7x3x: fix digital output on PCI-7230 Greg Kroah-Hartman
2015-10-18  2:05 ` Greg Kroah-Hartman [this message]
2015-10-18  2:05 ` [PATCH 3.10 19/54] USB: option: add ZTE PIDs Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 20/54] dm raid: fix round up of default region size Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 21/54] netfilter: nf_conntrack: Support expectations in different zones Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 22/54] disabling oplocks/leases via module parm enable_oplocks broken for SMB3 Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 23/54] drm: Reject DRI1 hw lock ioctl functions for kms drivers Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 24/54] USB: whiteheat: fix potential null-deref at probe Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 25/54] usb: xhci: Clear XHCI_STATE_DYING on start Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 26/54] xhci: change xhci 1.0 only restrictions to support xhci 1.1 Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 27/54] usb: xhci: Add support for URB_ZERO_PACKET to bulk/sg transfers Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 28/54] Initialize msg/shm IPC objects before doing ipc_addid() Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 29/54] ipvs: do not use random local source address for tunnels Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 30/54] ipvs: fix crash with sync protocol v0 and FTP Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 31/54] udf: Check length of extended attributes and allocation descriptors Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 32/54] regmap: debugfs: Ensure we dont underflow when printing access masks Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 33/54] regmap: debugfs: Dont bother actually printing when calculating max length Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 34/54] security: fix typo in security_task_prctl Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 35/54] usb: Use the USB_SS_MULT() macro to get the burst multiplier Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 36/54] usb: Add device quirk for Logitech PTZ cameras Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 37/54] USB: Add reset-resume quirk for two Plantronics usb headphones Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 38/54] MIPS: dma-default: Fix 32-bit fall back to GFP_DMA Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 39/54] md: flush ->event_work before stopping array Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 40/54] powerpc/MSI: Fix race condition in tearing down MSI interrupts Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 41/54] UBI: Validate data_size Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 42/54] UBI: return ENOSPC if no enough space available Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 43/54] IB/qib: Change lkey table allocation to support more MRs Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 44/54] dcache: Handle escaped paths in prepend_path Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 45/54] vfs: Test for and handle paths that are unreachable from their mnt_root Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 46/54] arm64: readahead: fault retry breaks mmap file read random detection Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 47/54] m68k: Define asmlinkage_protect Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 48/54] bonding: correct the MAC address for "follow" fail_over_mac policy Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 49/54] fib_rules: Fix dump_rules() not to exit early Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 50/54] genirq: Fix race in register_irq_proc() Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 51/54] x86: Add 1/2/4/8 byte optimization to 64bit __copy_{from,to}_user_inatomic Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 52/54] dm cache: fix NULL pointer when switching from cleaner policy Greg Kroah-Hartman
2015-10-18  2:05 ` [PATCH 3.10 53/54] staging: speakup: fix speakup-r regression Greg Kroah-Hartman
2015-10-18  7:05 ` [PATCH 3.10 00/54] 3.10.91-stable review Willy Tarreau
2015-10-18 16:05   ` Greg Kroah-Hartman
2015-10-18 19:17     ` Willy Tarreau
2015-10-18 19:38       ` Greg Kroah-Hartman
2015-10-19  4:05 ` Guenter Roeck
2015-10-19 15:14   ` Greg Kroah-Hartman
2015-10-19 15:19 ` Shuah Khan
2015-10-22 21:35   ` 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=20151018020314.875120470@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=ejt@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=snitzer@redhat.com \
    --cc=stable@vger.kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).