Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp3130464ybi; Thu, 18 Jul 2019 21:37:27 -0700 (PDT) X-Google-Smtp-Source: APXvYqwPcuExHWYR5kWX4B2ykDKj+Y+WWVbpFTp+uyunbMTTDlG+vZ4JOOHemNJu+o+47LgIDAun X-Received: by 2002:a17:90a:d998:: with SMTP id d24mr28367808pjv.89.1563511047076; Thu, 18 Jul 2019 21:37:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563511047; cv=none; d=google.com; s=arc-20160816; b=s9fcHMlw8KtaYhiUMiPTWmXqIg+fEOBBeTYI0aXqMgMMaqjapvCaXhHymLJR08STz5 tt4RI7UypQQg3wRY5Gjq8u8mkWfXhbNn+3j5QkfdxZJIjLiwS92pMmGX4Pi9jQkoLF3C vOn2Pm+/xxe6lK+cJ5uTACa/n8nDZZtqm5uFmntkfXPoNpCWrEngzBQ4LvXAktHgcZD6 hUBvrU20z7ovi1M2tQKfKxozg1wytLx/eyNnpqGYLY3dUHEzXH6HyTBrf4voyDMh9sgF fAxpqUAUmdiGcgie92ul+zK2bIzG1UW/kwZxoHgW/X+KPyXJgDBjzUJeejz22NDjEG5t 0kug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=VzTXysE1EvJOg1OEoyeq2uag6WXQLOwlnPH0gbp9vEw=; b=c34RUtYjuu2cMXe3lFkBD5xzjmvSHhYSmmggaHuAX3dVGRMyYhdPlYZOeD3MB5Nhow uKfxscd9RlZY2i3+3j2swqR/W7xlg/F4nInntIAHCFv3YLD3ENOZ5YvZw7Wx/+3kq0tg j2QrhiJkNao/MuxF9R+kKn9/E2sN7VYp1+R8icUIQFX+Osucd+cpP5BglUkMwBR2z5BQ DH+BXVy5YfEc78mngmTECRhbWygq3pT1jWwpLlk/rO1RFnAuvCnQZbwdd2aNhIx6kki6 2bFzi2H/NqkbJ12OSqmcStPjDRdGvfhJBgsnyjjYk8h7i9/9qlt8efqvCzb3DENxEFby 2v1Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=xRZvywWr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c8si689560pfo.42.2019.07.18.21.37.11; Thu, 18 Jul 2019 21:37:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=xRZvywWr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387497AbfGSEe4 (ORCPT + 99 others); Fri, 19 Jul 2019 00:34:56 -0400 Received: from mail.kernel.org ([198.145.29.99]:33442 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729620AbfGSEBm (ORCPT ); Fri, 19 Jul 2019 00:01:42 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F1A5D218A6; Fri, 19 Jul 2019 04:01:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1563508901; bh=q6ZwduEz3SIA3cGQ9kT7ctMqIpIL+dpMb15m/DyQLtw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=xRZvywWrvV8Ak412507F0CDIeAErd04wnZUZDEAwhywVKiHrgpDyKK6z0qSMglYr1 gOuSB86Fs8TPT0ysBTXsXPF1ETTUPQDzvdcUNXKvKJ1WoSNhg1dMGNcbosq9WtRv19 HrNPeIQ2S9X7F733cRjxwdKZCYPujk6jel3HQNoo= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: =?UTF-8?q?Jan=20H=C3=B6ppner?= , Stefan Haberland , Vasily Gorbik , Sasha Levin , linux-s390@vger.kernel.org Subject: [PATCH AUTOSEL 5.2 149/171] s390/dasd: Make layout analysis ESE compatible Date: Thu, 18 Jul 2019 23:56:20 -0400 Message-Id: <20190719035643.14300-149-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190719035643.14300-1-sashal@kernel.org> References: <20190719035643.14300-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jan Höppner [ Upstream commit ce6915f5343f5f2a2a937b683d8ffbf12dab3ad4 ] The disk layout and volume information of a DASD reside in the first two tracks of cylinder 0. When a DASD is set online, currently the first three tracks are read and analysed to confirm an expected layout. For CDL (Compatible Disk Layout) only count area data of the first track is evaluated and checked against expected key and data lengths. For LDL (Linux Disk Layout) the first and third track is evaluated. However, an LDL formatted volume is expected to be in the same format across all tracks. Checking the third track therefore doesn't have any more value than checking any other track at random. Now, an Extent Space Efficient (ESE) DASD is initialised by only formatting the first two tracks, as those tracks always contain all information necessarry. Checking the third track on an ESE volume will therefore most likely fail with a record not found error, as the third track will be empty. This in turn leads to the device being recognised with a volume size of 0. Attempts to write volume information on the first two tracks then fail with "no space left on device" errors. Initialising the first three tracks for an ESE volume is not a viable solution, because the third track is already a regular track and could contain user data. With that there is potential for data corruption. Instead, always only analyse the first two tracks, as it is sufficiant for both CDL and LDL, and allow ESE volumes to be recognised as well. Signed-off-by: Jan Höppner Reviewed-by: Stefan Haberland Signed-off-by: Vasily Gorbik Signed-off-by: Sasha Levin --- drivers/s390/block/dasd_eckd.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index c09039eea707..c7aec1b44b7c 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c @@ -157,7 +157,7 @@ static const int sizes_trk0[] = { 28, 148, 84 }; #define LABEL_SIZE 140 /* head and record addresses of count_area read in analysis ccw */ -static const int count_area_head[] = { 0, 0, 0, 0, 2 }; +static const int count_area_head[] = { 0, 0, 0, 0, 1 }; static const int count_area_rec[] = { 1, 2, 3, 4, 1 }; static inline unsigned int @@ -1823,8 +1823,8 @@ dasd_eckd_analysis_ccw(struct dasd_device *device) if (IS_ERR(cqr)) return cqr; ccw = cqr->cpaddr; - /* Define extent for the first 3 tracks. */ - define_extent(ccw++, cqr->data, 0, 2, + /* Define extent for the first 2 tracks. */ + define_extent(ccw++, cqr->data, 0, 1, DASD_ECKD_CCW_READ_COUNT, device, 0); LO_data = cqr->data + sizeof(struct DE_eckd_data); /* Locate record for the first 4 records on track 0. */ @@ -1843,9 +1843,9 @@ dasd_eckd_analysis_ccw(struct dasd_device *device) count_data++; } - /* Locate record for the first record on track 2. */ + /* Locate record for the first record on track 1. */ ccw[-1].flags |= CCW_FLAG_CC; - locate_record(ccw++, LO_data++, 2, 0, 1, + locate_record(ccw++, LO_data++, 1, 0, 1, DASD_ECKD_CCW_READ_COUNT, device, 0); /* Read count ccw. */ ccw[-1].flags |= CCW_FLAG_CC; @@ -1967,7 +1967,7 @@ static int dasd_eckd_end_analysis(struct dasd_block *block) } } if (i == 3) - count_area = &private->count_area[4]; + count_area = &private->count_area[3]; if (private->uses_cdl == 0) { for (i = 0; i < 5; i++) { -- 2.20.1