Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3669870pxv; Mon, 26 Jul 2021 09:05:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyndq3R3WWyispomGz8U8BjMzg+ZJKBK1eFTHFz0LT0HhfGzHx8SG1MX9gGSEUGwh5VQyrg X-Received: by 2002:a5d:5305:: with SMTP id e5mr7454926wrv.243.1627315520322; Mon, 26 Jul 2021 09:05:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627315520; cv=none; d=google.com; s=arc-20160816; b=DgNVV3HDV0giqEDKK46hd2HuLECjClFa6ceAKgp6C82YS59teKmroxo9HkNwLZTtoE Xz4b6Pquu2MDkAPSaYNDDKUrnvnNc0xjCK+d9UCtxIwYS1QKkW5W7EG3Z2umJrXESSkE jIdQ3tBPup552Sf5clF1FWBA4WhBO8iJ5I1OWiK3jUGI0dTwa8g9ipgy9PPYwAg2Z453 bZNu3o0zAC4ku88qSKdsoJr9Xcb03UskZsXh0QAgjg6UnJjPlcFgU2RVx7vTRRTUa3kU pBvvv7pV0/ac98Gr+ntbqyVninaJUOURaQqEREjVyFGnQXHUzsFv6p5bgEKPIBILP8a1 WNtQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=5KgwV47qJlqJJ8P88iiuWG8skFuo4Ohpi0bFMJATVBI=; b=YxLs8BNSthrRLHMmdjgXVtVWEiv7KKmTgza9foTfQMfIqzQL/tmwZDp5uwa13+98K0 Ki2HWX2mVUNOTg0zNRt+sGZEiY22CSLQCQyeDK6pUVHYvywKw/sVN7sEEUyv541G1Ul3 8FpMqYx01N4WSpZY75oNA4D/ot83uhcvqRaWSc7EMvb2WNhVk3doLQavkkSZ/nSZr1Fk 0Ex4Ux2wWunvsm4fJMcu/wUZ//C5GbCPdVB/goQsSEwrObVb/XJSiALFAoxvZEKi/6hf jZaU+4SB/uWNf55VGzMO9abVVQs/UYkhmkglLtN/CtsdnjXkJzCAFgKgI9v1IAEoyDVJ XxNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=TYkjvHBL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t15si241856ejd.275.2021.07.26.09.04.57; Mon, 26 Jul 2021 09:05:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=TYkjvHBL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236963AbhGZPV3 (ORCPT + 99 others); Mon, 26 Jul 2021 11:21:29 -0400 Received: from mail.kernel.org ([198.145.29.99]:52760 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236599AbhGZPLo (ORCPT ); Mon, 26 Jul 2021 11:11:44 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 740576056C; Mon, 26 Jul 2021 15:52:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627314732; bh=Ux1H0St56avHHzq9SAdKMjvg6hQevOm4gS/CGOgDzBo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TYkjvHBLV0QBec738MxcR60Dub+ZAxeeZMWJAC8ZNBppuHiG2/3d5fG2SlfLDvFmY c0iHpAIIZRCaVkM1ocwpFhtjs0Gp3fHLKpMms3YL52zgpig1UOhYvS/5q7PtG2WJ3b Kx73d4KUjymySg6mt6U5IYOeAdRjphucetEGKduY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Mikulas Patocka , Mike Snitzer Subject: [PATCH 4.19 036/120] dm writecache: fix writing beyond end of underlying device when shrinking Date: Mon, 26 Jul 2021 17:38:08 +0200 Message-Id: <20210726153833.554907713@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210726153832.339431936@linuxfoundation.org> References: <20210726153832.339431936@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mikulas Patocka commit 4134455f2aafdfeab50cabb4cccb35e916034b93 upstream. Do not attempt to write any data beyond the end of the underlying data device while shrinking it. The DM writecache device must be suspended when the underlying data device is shrunk. Signed-off-by: Mikulas Patocka Cc: stable@vger.kernel.org Signed-off-by: Mike Snitzer Signed-off-by: Greg Kroah-Hartman --- drivers/md/dm-writecache.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) --- a/drivers/md/dm-writecache.c +++ b/drivers/md/dm-writecache.c @@ -142,6 +142,7 @@ struct dm_writecache { size_t metadata_sectors; size_t n_blocks; uint64_t seq_count; + sector_t data_device_sectors; void *block_start; struct wc_entry *entries; unsigned block_size; @@ -929,6 +930,8 @@ static void writecache_resume(struct dm_ wc_lock(wc); + wc->data_device_sectors = i_size_read(wc->dev->bdev->bd_inode) >> SECTOR_SHIFT; + if (WC_MODE_PMEM(wc)) { persistent_memory_invalidate_cache(wc->memory_map, wc->memory_map_size); } else { @@ -1499,6 +1502,10 @@ static bool wc_add_block(struct writebac void *address = memory_data(wc, e); persistent_memory_flush_cache(address, block_size); + + if (unlikely(bio_end_sector(&wb->bio) >= wc->data_device_sectors)) + return true; + return bio_add_page(&wb->bio, persistent_memory_page(address), block_size, persistent_memory_page_offset(address)) != 0; } @@ -1571,6 +1578,9 @@ static void __writecache_writeback_pmem( if (writecache_has_error(wc)) { bio->bi_status = BLK_STS_IOERR; bio_endio(&wb->bio); + } else if (unlikely(!bio_sectors(&wb->bio))) { + bio->bi_status = BLK_STS_OK; + bio_endio(&wb->bio); } else { submit_bio(&wb->bio); } @@ -1614,6 +1624,14 @@ static void __writecache_writeback_ssd(s e = f; } + if (unlikely(to.sector + to.count > wc->data_device_sectors)) { + if (to.sector >= wc->data_device_sectors) { + writecache_copy_endio(0, 0, c); + continue; + } + from.count = to.count = wc->data_device_sectors - to.sector; + } + dm_kcopyd_copy(wc->dm_kcopyd, &from, 1, &to, 0, writecache_copy_endio, c); __writeback_throttle(wc, wbl);