Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp408674pxu; Tue, 1 Dec 2020 14:32:02 -0800 (PST) X-Google-Smtp-Source: ABdhPJyGtOlot/0Pl6cv9piyHcKpyiVZftoVnlFFE0qxBouu8wCfAksQOsZGdhWD7U0HpZ5Nsilq X-Received: by 2002:a17:906:d96c:: with SMTP id rp12mr5108394ejb.346.1606861922225; Tue, 01 Dec 2020 14:32:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606861922; cv=none; d=google.com; s=arc-20160816; b=eXzRDjSr0xgoMs6XIbUE/9rtB6WldUwZFetfjMm+aG1eCg3/TNCIT3MWI9oq/v14Eb 8Sjk92uaO0RDG2eOSbxAtzyd5dTNimZ7697g8qadgSGd/SyX0h0j5huTu5nQD8lijqv4 9Uf+WGSd2w4YmEV9em9u5I0sxW4KKEhMdT8Uq0YNWWt7TLyowpYG0/GrGSq9A6XXEa0S fHV0oxBdIekvQONz/ZD67es7+6RbJ2CPtr18MuGNbTo29j32/PVmKsfv2j+YsqwRtgay dDR3Ji5NSaeBNigxTO5+g9p9Me3ayQO1doL5MR1Eq/lVjP1+Es9NjDCkE4Z3PVREAr2N 3nUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=U0Rr3nYAoPAkL4roo13qLHOutinToF1IYQgbcmGMbyg=; b=MFdTFCsPqWvq2fLSBCOPG1qNVnkWXqIXjmps/aZzLAlaNUZwYw2iwNElR6Sn4YMC3W 3FzS5XvH/4VLpULLCZF0k8owff2kjTdcnYD18DaLgLOu5dY1dKYZnQw8o0NYB2wuNLvP TIJJTB84hU0KvM1XdVWAqgqqFJJUXIJlWmX/+cHhhbe7bFP+6A/L5jzmbjZts5okQ5Lq u4sa62d8LP8O1vb8+XqNHVUNYirsFl+Rzdyl0gEAG4DpFQrx2xltbJEeKWzTf+mAHtQF t9WBd/7aRUdXOXGLKL6FxJMZn9A5mHOMJ7jNaHWDnI9gqkAUmFYvEqrdCbvTWWx/tOjV v3cg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=aHEUdwUz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j7si908070ejm.476.2020.12.01.14.31.39; Tue, 01 Dec 2020 14:32:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=aHEUdwUz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388721AbgLAJTf (ORCPT + 99 others); Tue, 1 Dec 2020 04:19:35 -0500 Received: from mail.kernel.org ([198.145.29.99]:47718 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389644AbgLAJKS (ORCPT ); Tue, 1 Dec 2020 04:10:18 -0500 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (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 0E0F9221FF; Tue, 1 Dec 2020 09:09:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1606813771; bh=IBKo153u6tCyF/G1i86IGoLG+Sjwvg5SFXRm9IGDGj0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aHEUdwUzWNRuYkhInCWDHOYhXji1sdh0McWHnUkULkTAkHMa76ZjQh2xO8qIWgUat Q1geRIH/+pDS9JoRSsjKH1TJJiUVD+SGMrEWAlEc2W6x1iESrjvT0sAAS2ClqEUemq DQCUqJw8657bLKWTURjLD+Yl19fnXbsVvi0bvHYc= 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.9 054/152] io_uring: handle -EOPNOTSUPP on path resolution Date: Tue, 1 Dec 2020 09:52:49 +0100 Message-Id: <20201201084719.013832675@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201201084711.707195422@linuxfoundation.org> References: <20201201084711.707195422@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jens Axboe [ Upstream commit 944d1444d53f5a213457e5096db370cfd06923d4 ] Any attempt to do path resolution on /proc/self from an async worker will yield -EOPNOTSUPP. We can safely do that resolution from the task itself, and without blocking, so retry it from there. Ideally io_uring would know this upfront and not have to go through the worker thread to find out, but that doesn't currently seem feasible. Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- fs/io_uring.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index 185c206e5683f..5d9f8e40b93d3 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -436,6 +436,7 @@ struct io_sr_msg { struct io_open { struct file *file; int dfd; + bool ignore_nonblock; struct filename *filename; struct open_how how; unsigned long nofile; @@ -3591,6 +3592,7 @@ static int __io_openat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe return ret; } req->open.nofile = rlimit(RLIMIT_NOFILE); + req->open.ignore_nonblock = false; req->flags |= REQ_F_NEED_CLEANUP; return 0; } @@ -3638,7 +3640,7 @@ static int io_openat2(struct io_kiocb *req, bool force_nonblock) struct file *file; int ret; - if (force_nonblock) + if (force_nonblock && !req->open.ignore_nonblock) return -EAGAIN; ret = build_open_flags(&req->open.how, &op); @@ -3653,6 +3655,21 @@ static int io_openat2(struct io_kiocb *req, bool force_nonblock) if (IS_ERR(file)) { put_unused_fd(ret); ret = PTR_ERR(file); + /* + * A work-around to ensure that /proc/self works that way + * that it should - if we get -EOPNOTSUPP back, then assume + * that proc_self_get_link() failed us because we're in async + * context. We should be safe to retry this from the task + * itself with force_nonblock == false set, as it should not + * block on lookup. Would be nice to know this upfront and + * avoid the async dance, but doesn't seem feasible. + */ + if (ret == -EOPNOTSUPP && io_wq_current_is_worker()) { + req->open.ignore_nonblock = true; + refcount_inc(&req->refs); + io_req_task_queue(req); + return 0; + } } else { fsnotify_open(file); fd_install(ret, file); -- 2.27.0