Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp6209189ybv; Tue, 18 Feb 2020 12:04:27 -0800 (PST) X-Google-Smtp-Source: APXvYqwra3FN5+Ym3dGzly1jJjaJpmPaXR9d/h6nxUxE+RqkR2KShGTQQLJEt9Nbo0dvzHrcLybY X-Received: by 2002:aca:4d58:: with SMTP id a85mr1405213oib.166.1582056267725; Tue, 18 Feb 2020 12:04:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582056267; cv=none; d=google.com; s=arc-20160816; b=w4/A6MZ1xfpeQVrku9uUbf2Vhd2DfwfGC3DW+qsWkgnpBIh/xCUMOVvDVV84fH8SAe NNDiNfjmNwTQ/H6Hok1OKz4k39l8/n8P6big5npZuJPZJVVLoi6NvIWrqoofPQqnmPCq KuomtVI0O7VAJgh8HPyeozy4jNMKmyBCru6rbL6indIT8MMhy9dtq8fVAlh+Yyd1mRRU HrOOn85Ohw8K5BdDOe9Sc8hP8OMVsWtdxRuRLgJ/eNNOHhhM3WBw5ecpErIr8uxgpML8 uUlPOzrGnq3DltnRaazGFPr0Pd+Y8isQec9YjHLacnrJ0EUVepE2Imx5O9II2OfOzNXa ZV6A== 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=7ZaysuD72W0WnYLEsu2FHhj0pG7vD1xD2EUWHH29eKg=; b=c7MdrasnzVj8VZhCpQWnpvm0iKwbMx7S82O8zJuvHL2eZmKkkVpFkvqeS8+a7RhGyp qJDCGX2m8AAu6vk0KuQNFKG5NbqSxIpywX1Hbuy4H15/DqR/D3RSyv8v0WJ/KQA3m7eX vliXhf09Mgd2sxZcJ3Dw/6xuSqYmxbVHi77NTyGPgzYRzThxXCmzkqannDB7xdj06Ek0 EtZdCuKNrH04DJB0xH+6ZjIOKRx8T7IeYs5eFYM+4L3K4FBuGN6YZN2wKAibbgTX2xh6 7ElxXQqu4fPxL8I++0ghgwg5oVkAu0UCSLRIo3TXXpMu6MXcAQRZF8Kpn9hWMdpl2XDe kR9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=AwQce9GP; 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 b3si2266410otf.141.2020.02.18.12.04.15; Tue, 18 Feb 2020 12:04:27 -0800 (PST) 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=AwQce9GP; 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 S1728638AbgBRUD4 (ORCPT + 99 others); Tue, 18 Feb 2020 15:03:56 -0500 Received: from mail.kernel.org ([198.145.29.99]:45270 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729158AbgBRUDu (ORCPT ); Tue, 18 Feb 2020 15:03:50 -0500 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 CD1192464E; Tue, 18 Feb 2020 20:03:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582056230; bh=Gx1VSKNcxi/fkNRFLfAEH+vI9f4N0sq/0PmCBrWWOOA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AwQce9GP7MzrZkK/lRm8+SPLEqU4bOoN+E9mm8wXQrKi5notT3BPiN71ZQsfTG0CR vPo0syfhw0C3zAej26dUApzz9KFwSgWvbq2ETh+4hzBHrHix2PekohsAjVJ7tRzbIo pJ6b9xm4vg5590B7yevW8H8/KgwmERP05gdQvQrw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jens Axboe , Sasha Levin Subject: [PATCH 5.5 77/80] io-wq: add support for inheriting ->fs Date: Tue, 18 Feb 2020 20:55:38 +0100 Message-Id: <20200218190439.111549126@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200218190432.043414522@linuxfoundation.org> References: <20200218190432.043414522@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 From: Jens Axboe [ Upstream commit 9392a27d88b9707145d713654eb26f0c29789e50 ] Some work items need this for relative path lookup, make it available like the other inherited credentials/mm/etc. Cc: stable@vger.kernel.org # 5.3+ Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- fs/io-wq.c | 8 ++++++++ fs/io-wq.h | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/fs/io-wq.c b/fs/io-wq.c index 5147d2213b019..0dc4bb6de6566 100644 --- a/fs/io-wq.c +++ b/fs/io-wq.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "io-wq.h" @@ -58,6 +59,7 @@ struct io_worker { struct mm_struct *mm; const struct cred *creds; struct files_struct *restore_files; + struct fs_struct *restore_fs; }; #if BITS_PER_LONG == 64 @@ -150,6 +152,9 @@ static bool __io_worker_unuse(struct io_wqe *wqe, struct io_worker *worker) task_unlock(current); } + if (current->fs != worker->restore_fs) + current->fs = worker->restore_fs; + /* * If we have an active mm, we need to drop the wq lock before unusing * it. If we do, return true and let the caller retry the idle loop. @@ -310,6 +315,7 @@ static void io_worker_start(struct io_wqe *wqe, struct io_worker *worker) worker->flags |= (IO_WORKER_F_UP | IO_WORKER_F_RUNNING); worker->restore_files = current->files; + worker->restore_fs = current->fs; io_wqe_inc_running(wqe, worker); } @@ -456,6 +462,8 @@ static void io_worker_handle_work(struct io_worker *worker) } if (!worker->creds) worker->creds = override_creds(wq->creds); + if (work->fs && current->fs != work->fs) + current->fs = work->fs; if (test_bit(IO_WQ_BIT_CANCEL, &wq->state)) work->flags |= IO_WQ_WORK_CANCEL; if (worker->mm) diff --git a/fs/io-wq.h b/fs/io-wq.h index 3f5e356de9805..bbab98d1d328b 100644 --- a/fs/io-wq.h +++ b/fs/io-wq.h @@ -72,6 +72,7 @@ struct io_wq_work { }; void (*func)(struct io_wq_work **); struct files_struct *files; + struct fs_struct *fs; unsigned flags; }; @@ -79,8 +80,9 @@ struct io_wq_work { do { \ (work)->list.next = NULL; \ (work)->func = _func; \ - (work)->flags = 0; \ (work)->files = NULL; \ + (work)->fs = NULL; \ + (work)->flags = 0; \ } while (0) \ typedef void (get_work_fn)(struct io_wq_work *); -- 2.20.1