From patchwork Fri Nov 30 16:56:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jens Axboe X-Patchwork-Id: 10706747 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E28F113A4 for ; Fri, 30 Nov 2018 16:57:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D0F95303EA for ; Fri, 30 Nov 2018 16:57:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C52783041C; Fri, 30 Nov 2018 16:57:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7D482303EA for ; Fri, 30 Nov 2018 16:57:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726830AbeLAEGy (ORCPT ); Fri, 30 Nov 2018 23:06:54 -0500 Received: from mail-it1-f195.google.com ([209.85.166.195]:39266 "EHLO mail-it1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727013AbeLAEGy (ORCPT ); Fri, 30 Nov 2018 23:06:54 -0500 Received: by mail-it1-f195.google.com with SMTP id a6so10217209itl.4 for ; Fri, 30 Nov 2018 08:56:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel-dk.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0Qn86S9IysAhUjs5lPwgSM110FSlNFVglHplsagyxFA=; b=PnnqyejQfl3Y1Sx27UmSfYpY6XtRSsUkDvCBqF32TA7W8fVFAuIoTBWfJd6XPDavIR D7CEkQR8B35dmNB9vmJtSno1X0r/F9MkeHCazLVp9DGTES8W7VyqCSe5fGV+XcFGZqrH HZ4ieXxta9CZL/MgpkenNLTjzqJdAlxS2ologaO9S+/8shR+Gw6giCFN471CuoxhOIC/ 2Pkuf0a8cmF5Yy0sbrBvugVOKvBY0/anggkKLjU0C/Uehq+q15KWZMdc4QNpqDOwA82W PxLQhQ+hioHgoWbm3Si8URsnLMQnDyhVuME7SvIqv8a8oZD6LuPsjaQdOEKVhT6m4iMb 1tAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0Qn86S9IysAhUjs5lPwgSM110FSlNFVglHplsagyxFA=; b=PWm7vN43CeuNJRPzX64vzS6eouP52YuV1pYrjA/8X/balBVEv9L0Y3Bo/w/i+DnfL+ beG3sA6RY0WZ/zLYaaDxP8d9ygkKAEEZ/RSEoCeA+vtB4nQ8VyZQbX9I8iS1HuROyDfw CVIlnyrieB+/YRaleyGG2SNTiZOexMCkZdqVkKAbAPELJu4VfihQXspjNPqsOsY9rWpc gUKJo2K7rJe9BaG12Qj0r/cJXUXb+ZJhI4lOum8PYIPk9ou3abua5no1HnuNO2/hz3Tj ROrko1X1e3jQ0MMWrPsIQyNuxHhaAQ5QIEZeQLwK9DACyao4aTnRs4vG947DkEXKXdE0 u2fA== X-Gm-Message-State: AA+aEWYEQ73SqstcPSE418sKkM3AHLk7T/p4SPy1R+hN2hlH/B2KU/2W kdx/MEX4fv0nfLc/8ZWBydDFDJ606M4= X-Google-Smtp-Source: AFSGD/VUg1tqk5zm1omAZOdspM+84VPskzax56AznGHgAnyPgdIrhavsyYAjV6LJaxwuP1fTkpaueg== X-Received: by 2002:a02:9281:: with SMTP id b1mr5893855jah.86.1543597018129; Fri, 30 Nov 2018 08:56:58 -0800 (PST) Received: from localhost.localdomain ([216.160.245.98]) by smtp.gmail.com with ESMTPSA id j133sm2979447itj.16.2018.11.30.08.56.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 Nov 2018 08:56:57 -0800 (PST) From: Jens Axboe To: linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-aio@kvack.org Cc: hch@lst.de, Jens Axboe Subject: [PATCH 05/27] block: ensure that async polled IO is marked REQ_NOWAIT Date: Fri, 30 Nov 2018 09:56:24 -0700 Message-Id: <20181130165646.27341-6-axboe@kernel.dk> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181130165646.27341-1-axboe@kernel.dk> References: <20181130165646.27341-1-axboe@kernel.dk> Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP We can't wait for polled events to complete, as they may require active polling from whoever submitted it. If that is the same task that is submitting new IO, we could deadlock waiting for IO to complete that this task is supposed to be completing itself. Signed-off-by: Jens Axboe --- fs/block_dev.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/fs/block_dev.c b/fs/block_dev.c index 6de8d35f6e41..ebc3d5a0f424 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -402,8 +402,16 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages) nr_pages = iov_iter_npages(iter, BIO_MAX_PAGES); if (!nr_pages) { - if (iocb->ki_flags & IOCB_HIPRI) + if (iocb->ki_flags & IOCB_HIPRI) { bio->bi_opf |= REQ_HIPRI; + /* + * For async polled IO, we can't wait for + * requests to complete, as they may also be + * polled and require active reaping. + */ + if (!is_sync) + bio->bi_opf |= REQ_NOWAIT; + } qc = submit_bio(bio); WRITE_ONCE(iocb->ki_cookie, qc);