Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp1148765ybe; Fri, 13 Sep 2019 11:49:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqyWsbe4k6tAM5yizhxprcr4YPTflPKymL+atgZi470XBSMZII6MoQGFYwffInvN1dO4SksV X-Received: by 2002:a17:906:c72d:: with SMTP id fj13mr41385501ejb.36.1568400550197; Fri, 13 Sep 2019 11:49:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568400550; cv=none; d=google.com; s=arc-20160816; b=nehb/Ljyv35rx1UpmzUTvPEhnlsj1QzyIjOkW4yzabXBUmJerOIAI0GixXWsMk28E6 OV861vUfdsoJS8he4p4HMtq9zwlcn4hwdiDYdu+uJ+v+/yDHUBtftuFfExl4hulxd5tO 9DZwbstJWKlNJhMHQ12WLtw8RQshlxs276sjvgsVUtnmA3JMWZZ6dxwPO8pNEGEQnaIh a0OgA1pPeuKaK29AUSxajt/zKASoZILygXp+C8tP3O06+FvQ2NK4pFbkdMU/WcVKyF+x hoqN/Iru1KK+QZYjHa6WqRTYth5AgahTVo0akVvXHR1B0D2AYbMw/tZcqW+EhCnbUL99 S93g== 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=qrwQZhtwZDVsJJyObUe4/dTr5kix/xlAlCSJ1SSyZTY=; b=wN8y2cdFsYhrS3Hpq1aKj7ZTaZceHawmwL7Q19IksoBT2uzW9GkJmv7kPQU79kmT3J ir304Hpa7VQ6UNao9LWrtuXlSZ+y2spECTsdkyXVKal+Gzyyf9XvbwofB2rret4L751P 8MHgPxJgdU656bHQa3yPu1A6mMi6jiDp6Z9UxiyhHEGvnkx+Q4FEHkxJT0RYQ0bGu9sl qbWyqNz+p4w8jFCkqt3ICygnkYlPMd4tvueFX12i5rCp9V2ETCqH1a7U7FaKpCHOHQ81 xWwhXFO33GwXMW0exjknR2NPr54YF1VECqPcWQscT+JapzdmzL4piOKQjBi7wfUWNuvI jY3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oC3NMZqR; 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 b1si16846415edm.271.2019.09.13.11.48.46; Fri, 13 Sep 2019 11:49:10 -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=oC3NMZqR; 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 S2389809AbfIMNQL (ORCPT + 99 others); Fri, 13 Sep 2019 09:16:11 -0400 Received: from mail.kernel.org ([198.145.29.99]:42786 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389787AbfIMNQK (ORCPT ); Fri, 13 Sep 2019 09:16:10 -0400 Received: from localhost (unknown [104.132.45.99]) (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 12F40206A5; Fri, 13 Sep 2019 13:16:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568380569; bh=2MotSDzYBMQnVbaO4Ad5yPeQ1EQWWXr5aIP3vatel6c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oC3NMZqRztwqB+6/DJVplgH+kemDq0lF16RPUS7eHsdoLRfRdpkA0aiGe0Gud1YJO 0Y/WsdeoRp5IK0v8+qrVCsx0V1pyrtyQ2MrEqwqPPD00Wdgiv8bMHR3wwwZUKXgY0V 8T2Jytg6IRgDt6zc3J99hVczmywUbs75Xub+KHug= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Pavel Shilovsky , Steve French , Sasha Levin Subject: [PATCH 4.19 107/190] CIFS: Fix leaking locked VFS cache pages in writeback retry Date: Fri, 13 Sep 2019 14:06:02 +0100 Message-Id: <20190913130608.245039576@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190913130559.669563815@linuxfoundation.org> References: <20190913130559.669563815@linuxfoundation.org> User-Agent: quilt/0.66 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 [ Upstream commit 165df9a080b6863ae286fa01780c13d87cd81076 ] 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: Sasha Levin --- fs/cifs/cifssmb.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index a5cb7b2d1ac5d..86a54b809c484 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c @@ -2033,12 +2033,13 @@ cifs_writev_requeue(struct cifs_writedata *wdata) 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]); @@ -2053,6 +2054,7 @@ cifs_writev_requeue(struct cifs_writedata *wdata) kref_put(&wdata2->refcount, cifs_writedata_release); if (is_retryable_error(rc)) continue; + i += nr_pages; break; } @@ -2060,6 +2062,13 @@ cifs_writev_requeue(struct cifs_writedata *wdata) 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); -- 2.20.1