Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp725277ybb; Sat, 28 Mar 2020 08:35:57 -0700 (PDT) X-Google-Smtp-Source: ADFU+vt4BQ7FarK19wXuEnSM3JICkTgT/IS08kf2aDoCUXPbF+nv2MLDwuw02d7zCmM9jOsSIEc1 X-Received: by 2002:aca:5109:: with SMTP id f9mr2550573oib.14.1585409757073; Sat, 28 Mar 2020 08:35:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585409757; cv=none; d=google.com; s=arc-20160816; b=jnvXxKU5PxKPBpfgdTTYU1ZjNICrsfNXy0g3n14urVo1NBzEFD7YlERQ2N8SE0FydW XTKMEN70wX7jVkS7ISRPsPABYzJrXPd7h2nZf7xTlKQyWX7lHlRDJcBRqRBEpPMqTDht 8C0GdS3k6z/ONcHcBexA9GJP5o1pUGk5ZM453q4OZ7JiHv+O3PbrLCQBEiVtphoSO0TC mG2ylkkCin5HRaSL1UpQXyqCZOm1Xb8dOJLS5f1xVldhxQx/MQc028ZzU6xejzGkKcb+ rwmvxarTbggVQez+sko8vkyvwipZ9M/D8Ne+0uphtnwVys4vQLxstYyZEF7gZ+8FuHGo yJ3A== 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:to:from :dkim-signature; bh=FJndYzLlT4v0F3+7DPx5F0aoIqT5ifxpxxq+5TQgktA=; b=VJ5JsGuqsfLFO4zhiIO+uJA1uWLCSi3Mp+Nc/wggRSKTTwyVkUIOc5kmlnJVLvDZRI gJORVU114QmPvbrBuIHYZJ6oQkeMxFXhnouY4bX9g9B0dLMPo+MvQltAZWtMJHN6e227 G1BroRa6MX2tdJqK2+7aNwM9OGz1HUFYlY1Bd6DPiW66flBJ3h9MKQOPutjcld/FYMhL UA0SclhLTcfDUr6K9vmQhwf/oav6iNtB/EYtuIbAvI4mfpeoYZEGoEOA9TwMsSZ8u/wz FL8lqNe0bzZp603J8QezGLlPE8a2nAhKGhdy/EAr6eXy4nZj6k32jzlLVTSifG7gHkH2 1rew== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oypH7Ggj; spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-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 109si4143931otv.36.2020.03.28.08.35.45; Sat, 28 Mar 2020 08:35:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-nfs-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=oypH7Ggj; spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-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 S1727183AbgC1Pem (ORCPT + 99 others); Sat, 28 Mar 2020 11:34:42 -0400 Received: from mail.kernel.org ([198.145.29.99]:40346 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727178AbgC1Pel (ORCPT ); Sat, 28 Mar 2020 11:34:41 -0400 Received: from localhost.localdomain (c-68-36-133-222.hsd1.mi.comcast.net [68.36.133.222]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1C4CA2073B for ; Sat, 28 Mar 2020 15:34:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1585409681; bh=+SFShDxnoX+gVXJT4uPxAaGlDjkIaMd8lZ0ElJY57m0=; h=From:To:Subject:Date:In-Reply-To:References:From; b=oypH7GgjQyt+jYGpGipTemTdSliCmkNLEGUfdnxdNvrQjo0Q6gWhUrOYNcI77jnMT EZxvNeTMJXgm/v0HO7Xd+blFKearldO3IkvklyMy+104WBgYWpmEJEnVRvLou0mtJY 6rqQSdyZ4DuEA/vRlSrkyoSlQTq9qZusUFqOvOIQ= From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH v2 18/22] NFS/pNFS: Fix pnfs_layout_mark_request_commit() invalid layout segment handling Date: Sat, 28 Mar 2020 11:32:16 -0400 Message-Id: <20200328153220.1352010-19-trondmy@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200328153220.1352010-18-trondmy@kernel.org> References: <20200328153220.1352010-1-trondmy@kernel.org> <20200328153220.1352010-2-trondmy@kernel.org> <20200328153220.1352010-3-trondmy@kernel.org> <20200328153220.1352010-4-trondmy@kernel.org> <20200328153220.1352010-5-trondmy@kernel.org> <20200328153220.1352010-6-trondmy@kernel.org> <20200328153220.1352010-7-trondmy@kernel.org> <20200328153220.1352010-8-trondmy@kernel.org> <20200328153220.1352010-9-trondmy@kernel.org> <20200328153220.1352010-10-trondmy@kernel.org> <20200328153220.1352010-11-trondmy@kernel.org> <20200328153220.1352010-12-trondmy@kernel.org> <20200328153220.1352010-13-trondmy@kernel.org> <20200328153220.1352010-14-trondmy@kernel.org> <20200328153220.1352010-15-trondmy@kernel.org> <20200328153220.1352010-16-trondmy@kernel.org> <20200328153220.1352010-17-trondmy@kernel.org> <20200328153220.1352010-18-trondmy@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust Fix up pnfs_layout_mark_request_commit() to alway reschedule the write if the layout segment is invalid. Also minor cleanup. Signed-off-by: Trond Myklebust --- fs/nfs/pnfs_nfs.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c index abf16fc98346..25f135572fc8 100644 --- a/fs/nfs/pnfs_nfs.c +++ b/fs/nfs/pnfs_nfs.c @@ -1166,26 +1166,22 @@ pnfs_layout_mark_request_commit(struct nfs_page *req, { struct list_head *list; struct pnfs_commit_array *array; - struct pnfs_commit_bucket *buckets; + struct pnfs_commit_bucket *bucket; mutex_lock(&NFS_I(cinfo->inode)->commit_mutex); array = pnfs_lookup_commit_array(cinfo->ds, lseg); - if (!array) + if (!array || !pnfs_is_valid_lseg(lseg)) goto out_resched; - buckets = array->buckets; - list = &buckets[ds_commit_idx].written; - if (list_empty(list)) { - if (!pnfs_is_valid_lseg(lseg)) - goto out_resched; - /* Non-empty buckets hold a reference on the lseg. That ref - * is normally transferred to the COMMIT call and released - * there. It could also be released if the last req is pulled - * off due to a rewrite, in which case it will be done in - * pnfs_common_clear_request_commit - */ - if (!buckets[ds_commit_idx].lseg) - buckets[ds_commit_idx].lseg = pnfs_get_lseg(lseg); - } + bucket = &array->buckets[ds_commit_idx]; + list = &bucket->written; + /* Non-empty buckets hold a reference on the lseg. That ref + * is normally transferred to the COMMIT call and released + * there. It could also be released if the last req is pulled + * off due to a rewrite, in which case it will be done in + * pnfs_common_clear_request_commit + */ + if (!bucket->lseg) + bucket->lseg = pnfs_get_lseg(lseg); set_bit(PG_COMMIT_TO_DS, &req->wb_flags); cinfo->ds->nwritten++; -- 2.25.1