Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp633584img; Fri, 22 Mar 2019 05:34:50 -0700 (PDT) X-Google-Smtp-Source: APXvYqw5LuE8+au1R8sUp8wGu+KyoEoqUR+vVOQ8C0fXR6xt2QStkl6sAyDt0KN/goRLEaIhWoYJ X-Received: by 2002:a17:902:20e5:: with SMTP id v34mr9347166plg.319.1553258090198; Fri, 22 Mar 2019 05:34:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553258090; cv=none; d=google.com; s=arc-20160816; b=oq2EKeIo09tFoNwSsBNlkbyM7PXxOvXvf04FEZob2mEhqGdSuCQFQYXg2LKqyHE80Z brhiZfu110SxHXeLhLkM4EWapDv+FdZVMXybNJI4tN3ywqQwoC2ZZY2Quhovr59eeTaV xoECJU8c/YeuYmBCr5pDPpxQyMuu12WdSajBXWU3DuIRlQVHNF9lf8L9A88VSd30snke 61gAy3tyui9T0rIVhoQ7BJyU8FCvKjjAfoZCdchMl1niIhHbqcAnEm2N/s6qH9kW2NN7 zj9e1urdULAcE1iQ/FxtDTL/xSWoJm2b4W45zUopYxDJVlxI2PXeg3vWY067e4MM4FYq 2FZw== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=KIyruRCyyZVJalLYY021VgPr1GRZbudMPPy5CXmijdY=; b=GbXQ470l2LYR/mTv53Z+TSxbnV6H+h55RjrtfV1N6lSJ9cDlBQQK2fVE1QFIhm6xg/ RngG4Ns4um6hwyTkA4vaT+U5bGCSwqD+8h5w6CD5tzopKwzl54NVhYudq1SrSVNeMAzA YUmOi25nQwSdpTQatH9DnVtRQ+YQD6hAXs364NqD2m/DDMLnvLMvsNZj17hQ1S7dnIJg yPu75tNnB+7XOD83LmaJaJCLRgVl8ucxCcTxwbxzzMAgwZvUKfhjocNoJ/rOLZFsvAbn wfl8t5flvV14MpSw3kUJQ26TpGmW5PCRWmtIwLlnqXwTEjPOcVVIhV/GWa3yLS4Nktd4 oPIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=s7qBTbsK; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n4si6448270pgq.198.2019.03.22.05.34.34; Fri, 22 Mar 2019 05:34:50 -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=s7qBTbsK; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389845AbfCVMOD (ORCPT + 99 others); Fri, 22 Mar 2019 08:14:03 -0400 Received: from mail.kernel.org ([198.145.29.99]:52228 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389637AbfCVMN7 (ORCPT ); Fri, 22 Mar 2019 08:13:59 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 1BF6820830; Fri, 22 Mar 2019 12:13:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553256838; bh=5UBgb3ucyPTecMIazajYjVh/VbUOtV54elSjJEHVjjs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=s7qBTbsK1dHLxHaHYc3h7rcKrdomJvO4XEBEkMmB9NLnIvadOZc3ENkKG0marA3ZX bgnCkBQBLn3HZ+8ua3vPE17lNqnro0Y4QIgPwiwuHcGbw3ZpKfLWYW/6pgg9ukp8Qe 4k0KaNZC1VNx143+WL2vBcOEpbGBM3yNCtgbDvkg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Pavel Shilovsky , Steve French Subject: [PATCH 5.0 051/238] CIFS: Fix leaking locked VFS cache pages in writeback retry Date: Fri, 22 Mar 2019 12:14:30 +0100 Message-Id: <20190322111301.438582621@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190322111258.383569278@linuxfoundation.org> References: <20190322111258.383569278@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 5.0-stable review patch. If anyone has any objections, please let me know. ------------------ From: Pavel Shilovsky commit 165df9a080b6863ae286fa01780c13d87cd81076 upstream. If we don't find a writable file handle when retrying writepages we break of the loop and do not unlock and put pages neither from wdata2 nor from the original wdata. Fix this by walking through all the remaining pages and cleanup them properly. Cc: Signed-off-by: Pavel Shilovsky Signed-off-by: Steve French Signed-off-by: Greg Kroah-Hartman --- fs/cifs/cifssmb.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c @@ -2125,12 +2125,13 @@ cifs_writev_requeue(struct cifs_writedat wdata2->cfile = find_writable_file(CIFS_I(inode), false); if (!wdata2->cfile) { - cifs_dbg(VFS, "No writable handles for inode\n"); + cifs_dbg(VFS, "No writable handle to retry writepages\n"); rc = -EBADF; - break; + } else { + wdata2->pid = wdata2->cfile->pid; + rc = server->ops->async_writev(wdata2, + cifs_writedata_release); } - wdata2->pid = wdata2->cfile->pid; - rc = server->ops->async_writev(wdata2, cifs_writedata_release); for (j = 0; j < nr_pages; j++) { unlock_page(wdata2->pages[j]); @@ -2145,6 +2146,7 @@ cifs_writev_requeue(struct cifs_writedat kref_put(&wdata2->refcount, cifs_writedata_release); if (is_retryable_error(rc)) continue; + i += nr_pages; break; } @@ -2152,6 +2154,13 @@ cifs_writev_requeue(struct cifs_writedat i += nr_pages; } while (i < wdata->nr_pages); + /* cleanup remaining pages from the original wdata */ + for (; i < wdata->nr_pages; i++) { + SetPageError(wdata->pages[i]); + end_page_writeback(wdata->pages[i]); + put_page(wdata->pages[i]); + } + if (rc != 0 && !is_retryable_error(rc)) mapping_set_error(inode->i_mapping, rc); kref_put(&wdata->refcount, cifs_writedata_release);