From patchwork Mon Sep 12 19:27:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974036 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0397CC6FA83 for ; Mon, 12 Sep 2022 19:28:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 760616B0073; Mon, 12 Sep 2022 15:28:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6E9048D0002; Mon, 12 Sep 2022 15:28:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 588E08D0001; Mon, 12 Sep 2022 15:28:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 4C0226B0073 for ; Mon, 12 Sep 2022 15:28:04 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 1C3971A115E for ; Mon, 12 Sep 2022 19:28:04 +0000 (UTC) X-FDA: 79904418888.25.E70A3E6 Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf15.hostedemail.com (Postfix) with ESMTP id 92FD2A008F for ; Mon, 12 Sep 2022 19:28:03 +0000 (UTC) Received: from pps.filterd (m0044012.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CGHDCP008703 for ; Mon, 12 Sep 2022 12:28:02 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=tArxVrq0k2OSiB82LYYz96Za/5QZHxy2tKRMamgWKpw=; b=EyBgo4f6ZmsFOzw008tyGPunFAaCqWFa4NkT6J8ChAg8ixDHLbFSEV1bHJYT1nlJ1Iig 9djDC8xl9kLqJljYh66K3oQt1jorIgG5Oo+YZMW2+bxo7EtlIIEHBtuBF/f6kSCsHYgk HwJ0ChcLoqsPubVMjzi9/iIrLHcT+Bx4Cq0= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgr9smh73-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:02 -0700 Received: from twshared20183.05.prn5.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:83::4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:01 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id E68CB2085228; Mon, 12 Sep 2022 12:27:53 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , , kernel test robot Subject: [PATCH v3 01/12] mm: export balance_dirty_pages_ratelimited_flags() Date: Mon, 12 Sep 2022 12:27:41 -0700 Message-ID: <20220912192752.3785061-2-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: lBtqA6MdKQ52EYsA5QKtMPRJB04-GdKW X-Proofpoint-GUID: lBtqA6MdKQ52EYsA5QKtMPRJB04-GdKW X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_13,2022-09-12_02,2022-06-22_01 ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010883; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=tArxVrq0k2OSiB82LYYz96Za/5QZHxy2tKRMamgWKpw=; b=RcyISjKayIUblGaN7qPUq/6r4X3fyAvFzM9Oj+OoXYu5MgOo7teQ6ubZdYeiF/hL9ymWE+ LjR3AxUm7vCpWe4j4fb3dpbjw0P+otZaen1UVMchK6feMMdcRj7eC8gB6dY40d7sI+Pcv2 cCcOC4UrtM4jNAIE6lB+0KW4TJhVMJQ= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=EyBgo4f6; spf=pass (imf15.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010883; a=rsa-sha256; cv=none; b=DHuduvVCYAnhgouUA/LNPX8dCjVrpN2wcjPcm5oGBD8su2ENr0oqg0gLMdJHNmrkdJTbb5 I+J4AGfM3r8LcJDypyvkPMn00VicV07hYG2jk9+/uLD82/f40ljPXAFvCibwcrsq4XAtuQ J4eNg/0NMQoY9S+bW8X0MdRtlrirNNY= X-Rspam-User: X-Stat-Signature: 8rej9aaohe65d8yhqt6jxq4ge8knr6cw X-Rspamd-Queue-Id: 92FD2A008F Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=EyBgo4f6; spf=pass (imf15.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Rspamd-Server: rspam08 X-HE-Tag: 1663010883-255668 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Export the function balance_dirty_pages_ratelimited_flags(). It is now also called from btrfs. Signed-off-by: Stefan Roesch Reported-by: kernel test robot --- mm/page-writeback.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 032a7bf8d259..7e9d8d857ecc 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -1933,6 +1933,7 @@ int balance_dirty_pages_ratelimited_flags(struct address_space *mapping, wb_put(wb); return ret; } +EXPORT_SYMBOL_GPL(balance_dirty_pages_ratelimited_flags); /** * balance_dirty_pages_ratelimited - balance dirty memory state. From patchwork Mon Sep 12 19:27:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974039 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE655C6FA83 for ; Mon, 12 Sep 2022 19:28:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7B2A7940009; Mon, 12 Sep 2022 15:28:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6C347940008; Mon, 12 Sep 2022 15:28:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5150C940009; Mon, 12 Sep 2022 15:28:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 34CEA940007 for ; Mon, 12 Sep 2022 15:28:10 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 0F8AC14105C for ; Mon, 12 Sep 2022 19:28:10 +0000 (UTC) X-FDA: 79904419140.27.C4A9B6E Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf16.hostedemail.com (Postfix) with ESMTP id A7058180096 for ; Mon, 12 Sep 2022 19:28:09 +0000 (UTC) Received: from pps.filterd (m0109334.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CJHS21008123 for ; Mon, 12 Sep 2022 12:28:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=IijL+6ktEQVnC8jsLhUeVptj0sovDNKd9aG2PZkdZJQ=; b=TZgv9M9VotzTlHMsObD0ymTkVMFP9+dDptsr0cjMQN+SmCJgt4EkPBUn23rim0o5jM7H 3iE7cAk/MpS/7pUoz7RRSHTH8pfZt1NGFSTJQDK2qF+BwWP2Mm+LFmZgI/EEPMvTJhCV 9GRpmLf6aDeV8PO2TFf2TgAV6Ybm41QGWdU= Received: from mail.thefacebook.com ([163.114.132.120]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgsw4ccjb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:08 -0700 Received: from twshared6447.05.prn5.facebook.com (2620:10d:c085:208::11) by mail.thefacebook.com (2620:10d:c085:11d::4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:08 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id ED68F208522A; Mon, 12 Sep 2022 12:27:53 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 02/12] btrfs: implement a nowait option for tree searches Date: Mon, 12 Sep 2022 12:27:42 -0700 Message-ID: <20220912192752.3785061-3-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: HNHi8jsdZLYU9kPcEbb989ind4bFFxhx X-Proofpoint-GUID: HNHi8jsdZLYU9kPcEbb989ind4bFFxhx X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_12,2022-09-12_02,2022-06-22_01 ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010889; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=IijL+6ktEQVnC8jsLhUeVptj0sovDNKd9aG2PZkdZJQ=; b=T6/C1ajoAKC3gpNNiNYaF+p/mv7RWunIGtLdB5XF2Ln5KUxb62Z+6Di7HNaiY34RauqYvf e4nJSwtZVteiyy4tFQQ/9Pv8jzdUxJARjh4XIUrToNH2qZ9XRp48DDaflQnC/ynKg0Xjww iLv6HPOSSN3cxScvc7PDeNYBKXIJArE= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=TZgv9M9V; spf=pass (imf16.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010889; a=rsa-sha256; cv=none; b=Do2M7J5DrvzQ0zpDH5mJQU76iI+Q7KERFzlotHqD2buewkdDAmarRO5wKwmUTbCoEpQ79H pE4eRPQM+V4nitp8kdIRbmlf5h1o/AzzOQzPNeGDjoBc12LakUpXpUQnh/jrDDdncZff+1 bjkuQIWe3A4PDxj0pA3ej5k2BxWPpuI= X-Rspam-User: X-Stat-Signature: qek4d7fxoqys5mo79d9fx4cyqyq7zcgi X-Rspamd-Queue-Id: A7058180096 Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=TZgv9M9V; spf=pass (imf16.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Rspamd-Server: rspam08 X-HE-Tag: 1663010889-7926 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Josef Bacik For NOWAIT IOCB's we'll need a way to tell search to not wait on locks or anything. Accomplish this by adding a path->nowait flag that will use trylocks and skip reading of metadata, returning -EAGAIN in either of these cases. For now we only need this for reads, so only the read side is handled. Add an ASSERT() to catch anybody trying to use this for writes so they know they'll have to implement the write side. Signed-off-by: Josef Bacik Signed-off-by: Stefan Roesch --- fs/btrfs/ctree.c | 39 ++++++++++++++++++++++++++++++++++++--- fs/btrfs/ctree.h | 1 + fs/btrfs/locking.c | 23 +++++++++++++++++++++++ fs/btrfs/locking.h | 1 + 4 files changed, 61 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index ebfa35fe1c38..71b238364939 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -1447,6 +1447,11 @@ read_block_for_search(struct btrfs_root *root, struct btrfs_path *p, return 0; } + if (p->nowait) { + free_extent_buffer(tmp); + return -EAGAIN; + } + if (unlock_up) btrfs_unlock_up_safe(p, level + 1); @@ -1467,6 +1472,8 @@ read_block_for_search(struct btrfs_root *root, struct btrfs_path *p, ret = -EAGAIN; goto out; + } else if (p->nowait) { + return -EAGAIN; } if (unlock_up) { @@ -1634,7 +1641,13 @@ static struct extent_buffer *btrfs_search_slot_get_root(struct btrfs_root *root, * We don't know the level of the root node until we actually * have it read locked */ - b = btrfs_read_lock_root_node(root); + if (p->nowait) { + b = btrfs_try_read_lock_root_node(root); + if (IS_ERR(b)) + return b; + } else { + b = btrfs_read_lock_root_node(root); + } level = btrfs_header_level(b); if (level > write_lock_level) goto out; @@ -1910,6 +1923,13 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root, WARN_ON(p->nodes[0] != NULL); BUG_ON(!cow && ins_len); + /* + * For now only allow nowait for read only operations. There's no + * strict reason why we can't, we just only need it for reads so I'm + * only implementing it for reads right now. + */ + ASSERT(!p->nowait || !cow); + if (ins_len < 0) { lowest_unlock = 2; @@ -1936,7 +1956,12 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root, if (p->need_commit_sem) { ASSERT(p->search_commit_root); - down_read(&fs_info->commit_root_sem); + if (p->nowait) { + if (!down_read_trylock(&fs_info->commit_root_sem)) + return -EAGAIN; + } else { + down_read(&fs_info->commit_root_sem); + } } again: @@ -2082,7 +2107,15 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root, btrfs_tree_lock(b); p->locks[level] = BTRFS_WRITE_LOCK; } else { - btrfs_tree_read_lock(b); + if (p->nowait) { + if (!btrfs_try_tree_read_lock(b)) { + free_extent_buffer(b); + ret = -EAGAIN; + goto done; + } + } else { + btrfs_tree_read_lock(b); + } p->locks[level] = BTRFS_READ_LOCK; } p->nodes[level] = b; diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index df8c99c99df9..ca59ba6421a9 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -443,6 +443,7 @@ struct btrfs_path { * header (ie. sizeof(struct btrfs_item) is not included). */ unsigned int search_for_extension:1; + unsigned int nowait:1; }; #define BTRFS_MAX_EXTENT_ITEM_SIZE(r) ((BTRFS_LEAF_DATA_SIZE(r->fs_info) >> 4) - \ sizeof(struct btrfs_item)) diff --git a/fs/btrfs/locking.c b/fs/btrfs/locking.c index 9063072b399b..d6c88922d3e2 100644 --- a/fs/btrfs/locking.c +++ b/fs/btrfs/locking.c @@ -285,6 +285,29 @@ struct extent_buffer *btrfs_read_lock_root_node(struct btrfs_root *root) return eb; } +/* + * Loop around taking references on and locking the root node of the tree in + * nowait mode until we end up with a lock on the root node or returning to + * avoid blocking. + * + * Return: root extent buffer with read lock held or -EWOULDBLOCK. + */ +struct extent_buffer *btrfs_try_read_lock_root_node(struct btrfs_root *root) +{ + struct extent_buffer *eb; + + while (1) { + eb = btrfs_root_node(root); + if (!btrfs_try_tree_read_lock(eb)) + return ERR_PTR(-EAGAIN); + if (eb == root->node) + break; + btrfs_tree_read_unlock(eb); + free_extent_buffer(eb); + } + return eb; +} + /* * DREW locks * ========== diff --git a/fs/btrfs/locking.h b/fs/btrfs/locking.h index ab268be09bb5..490c7a79e995 100644 --- a/fs/btrfs/locking.h +++ b/fs/btrfs/locking.h @@ -94,6 +94,7 @@ int btrfs_try_tree_read_lock(struct extent_buffer *eb); int btrfs_try_tree_write_lock(struct extent_buffer *eb); struct extent_buffer *btrfs_lock_root_node(struct btrfs_root *root); struct extent_buffer *btrfs_read_lock_root_node(struct btrfs_root *root); +struct extent_buffer *btrfs_try_read_lock_root_node(struct btrfs_root *root); #ifdef CONFIG_BTRFS_DEBUG static inline void btrfs_assert_tree_write_locked(struct extent_buffer *eb) From patchwork Mon Sep 12 19:27:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974040 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id B78B2C6FA8B for ; Mon, 12 Sep 2022 19:28:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A9803940007; Mon, 12 Sep 2022 15:28:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9D5CA94000A; Mon, 12 Sep 2022 15:28:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6259B940007; Mon, 12 Sep 2022 15:28:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 478E6940008 for ; Mon, 12 Sep 2022 15:28:10 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 279FA41111 for ; Mon, 12 Sep 2022 19:28:10 +0000 (UTC) X-FDA: 79904419140.23.C21A33F Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf21.hostedemail.com (Postfix) with ESMTP id A91BE1C00A9 for ; Mon, 12 Sep 2022 19:28:09 +0000 (UTC) Received: from pps.filterd (m0044012.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CHvc4T006546 for ; Mon, 12 Sep 2022 12:28:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=fLHHRWaCYItqTxj6TTEtVeulCgfCcm7Qjk1G3l+T3JQ=; b=IsOKQNgzWCXivKJuLo0UOr5pnWthbLYpin/u/VwsazmZ/HHdQ7hC2sGVqHEuhfLvJeDe xV2avAVMAts6cvCyVpREk01lj68gwl6WCfDHI+MYCZKvbSqSX9/WdphswuF3fY3tTrEK KnAVL0bbZSnIcAYNcgwrXAuE+qi6SB8gcz0= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgr9smh88-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:08 -0700 Received: from twshared15978.04.prn5.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:82::d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:07 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id F313D208522C; Mon, 12 Sep 2022 12:27:53 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 03/12] btrfs: make can_nocow_extent nowait compatible Date: Mon, 12 Sep 2022 12:27:43 -0700 Message-ID: <20220912192752.3785061-4-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: 7BZkr6Br0IBN_oJXx8T2AKm2rb6kQDeu X-Proofpoint-GUID: 7BZkr6Br0IBN_oJXx8T2AKm2rb6kQDeu X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_13,2022-09-12_02,2022-06-22_01 ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010889; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=fLHHRWaCYItqTxj6TTEtVeulCgfCcm7Qjk1G3l+T3JQ=; b=acwXZnQhqltQ9if1Nw6uvip/CJoPIpxum4WVOLNI1dVHF2jivqFLNBqWqhj2k+ihInD2v9 hw0JSFXh6xgxxCmiLZR7wiB9+DdDGbgDNd+4/hgMC61W+iVR7XA6/yPCPAtt7tbGEC4OEu 4e8USzXDVP/zWGDp+TLMJDuY7Pekr7Y= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=IsOKQNgz; spf=pass (imf21.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010889; a=rsa-sha256; cv=none; b=FiZDRy7fzc7LVFviJhbdWrdntsoaaOton54cNsf5egi42GvHxwwXXhZD3J5mWcLytUs/sY kRznPmY5rmDpxXiiGEjKmD9FglqFit1RNlcdP8W59QlcwgizgunTHi5uzKjjwMY0OWoqPw D//zS9BriCWiyOog66omlPrVfxsmOgU= X-Stat-Signature: fr8rsfg4g3j76hjm5buqxrps55g9usm4 X-Rspamd-Queue-Id: A91BE1C00A9 X-Rspam-User: Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=IsOKQNgz; spf=pass (imf21.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Rspamd-Server: rspam03 X-HE-Tag: 1663010889-138797 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Josef Bacik If we have NOWAIT specified on our IOCB and we're writing into a PREALLOC or NOCOW extent then we need to be able to tell can_nocow_extent that we don't want to wait on any locks or metadata IO. Fix can_nocow_extent to allow for NOWAIT. Signed-off-by: Josef Bacik Signed-off-by: Stefan Roesch --- fs/btrfs/ctree.h | 5 +++-- fs/btrfs/extent-tree.c | 5 +++++ fs/btrfs/file-item.c | 4 +++- fs/btrfs/file.c | 2 +- fs/btrfs/inode.c | 16 ++++++++++------ fs/btrfs/relocation.c | 2 +- fs/btrfs/scrub.c | 4 ++-- fs/btrfs/tree-log.c | 6 +++--- 8 files changed, 28 insertions(+), 16 deletions(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index ca59ba6421a9..5cc5394503e0 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -3274,7 +3274,8 @@ int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans, blk_status_t btrfs_csum_one_bio(struct btrfs_inode *inode, struct bio *bio, u64 offset, bool one_ordered); int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end, - struct list_head *list, int search_commit); + struct list_head *list, int search_commit, + bool nowait); void btrfs_extent_item_to_extent_map(struct btrfs_inode *inode, const struct btrfs_path *path, struct btrfs_file_extent_item *fi, @@ -3304,7 +3305,7 @@ struct extent_map *btrfs_get_extent_fiemap(struct btrfs_inode *inode, u64 start, u64 len); noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len, u64 *orig_start, u64 *orig_block_len, - u64 *ram_bytes, bool strict); + u64 *ram_bytes, bool nowait, bool strict); void __btrfs_del_delalloc_inode(struct btrfs_root *root, struct btrfs_inode *inode); diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 6914cd8024ba..583ddae3c270 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -2220,6 +2220,11 @@ static noinline int check_delayed_ref(struct btrfs_root *root, } if (!mutex_trylock(&head->mutex)) { + if (path->nowait) { + spin_unlock(&delayed_refs->lock); + return -EAGAIN; + } + refcount_inc(&head->refs); spin_unlock(&delayed_refs->lock); diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c index c828f971a346..fcc6ce861409 100644 --- a/fs/btrfs/file-item.c +++ b/fs/btrfs/file-item.c @@ -503,7 +503,8 @@ blk_status_t btrfs_lookup_bio_sums(struct inode *inode, struct bio *bio, u8 *dst } int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end, - struct list_head *list, int search_commit) + struct list_head *list, int search_commit, + bool nowait) { struct btrfs_fs_info *fs_info = root->fs_info; struct btrfs_key key; @@ -525,6 +526,7 @@ int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end, if (!path) return -ENOMEM; + path->nowait = nowait; if (search_commit) { path->skip_locking = 1; path->reada = READA_FORWARD; diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 5a3f6e0d9688..f4aa198f0f87 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1502,7 +1502,7 @@ int btrfs_check_nocow_lock(struct btrfs_inode *inode, loff_t pos, btrfs_lock_and_flush_ordered_range(inode, lockstart, lockend, NULL); ret = can_nocow_extent(&inode->vfs_inode, lockstart, &num_bytes, - NULL, NULL, NULL, false); + NULL, NULL, NULL, false, false); if (ret <= 0) { ret = 0; btrfs_drew_write_unlock(&root->snapshot_lock); diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 1372210869b1..e0fe2c4b721f 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -1666,7 +1666,7 @@ static noinline int run_delalloc_zoned(struct btrfs_inode *inode, } static noinline int csum_exist_in_range(struct btrfs_fs_info *fs_info, - u64 bytenr, u64 num_bytes) + u64 bytenr, u64 num_bytes, bool nowait) { struct btrfs_root *csum_root = btrfs_csum_root(fs_info, bytenr); struct btrfs_ordered_sum *sums; @@ -1674,7 +1674,8 @@ static noinline int csum_exist_in_range(struct btrfs_fs_info *fs_info, LIST_HEAD(list); ret = btrfs_lookup_csums_range(csum_root, bytenr, - bytenr + num_bytes - 1, &list, 0); + bytenr + num_bytes - 1, &list, 0, + nowait); if (ret == 0 && list_empty(&list)) return 0; @@ -1800,6 +1801,7 @@ static int can_nocow_file_extent(struct btrfs_path *path, u8 extent_type; int can_nocow = 0; int ret = 0; + bool nowait = path->nowait; fi = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_file_extent_item); extent_type = btrfs_file_extent_type(leaf, fi); @@ -1876,7 +1878,8 @@ static int can_nocow_file_extent(struct btrfs_path *path, * Force COW if csums exist in the range. This ensures that csums for a * given extent are either valid or do not exist. */ - ret = csum_exist_in_range(root->fs_info, args->disk_bytenr, args->num_bytes); + ret = csum_exist_in_range(root->fs_info, args->disk_bytenr, args->num_bytes, + nowait); WARN_ON_ONCE(ret > 0 && is_freespace_inode); if (ret != 0) goto out; @@ -7292,7 +7295,7 @@ static bool btrfs_extent_readonly(struct btrfs_fs_info *fs_info, u64 bytenr) */ noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len, u64 *orig_start, u64 *orig_block_len, - u64 *ram_bytes, bool strict) + u64 *ram_bytes, bool nowait, bool strict) { struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); struct can_nocow_file_extent_args nocow_args = { 0 }; @@ -7308,6 +7311,7 @@ noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len, path = btrfs_alloc_path(); if (!path) return -ENOMEM; + path->nowait = nowait; ret = btrfs_lookup_file_extent(NULL, root, path, btrfs_ino(BTRFS_I(inode)), offset, 0); @@ -7577,7 +7581,7 @@ static int btrfs_get_blocks_direct_write(struct extent_map **map, block_start = em->block_start + (start - em->start); if (can_nocow_extent(inode, start, &len, &orig_start, - &orig_block_len, &ram_bytes, false) == 1) { + &orig_block_len, &ram_bytes, false, false) == 1) { bg = btrfs_inc_nocow_writers(fs_info, block_start); if (bg) can_nocow = true; @@ -11242,7 +11246,7 @@ static int btrfs_swap_activate(struct swap_info_struct *sis, struct file *file, free_extent_map(em); em = NULL; - ret = can_nocow_extent(inode, start, &len, NULL, NULL, NULL, true); + ret = can_nocow_extent(inode, start, &len, NULL, NULL, NULL, false, true); if (ret < 0) { goto out; } else if (ret) { diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 45c02aba2492..dfc3f6c04b13 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4339,7 +4339,7 @@ int btrfs_reloc_clone_csums(struct btrfs_inode *inode, u64 file_pos, u64 len) disk_bytenr = file_pos + inode->index_cnt; csum_root = btrfs_csum_root(fs_info, disk_bytenr); ret = btrfs_lookup_csums_range(csum_root, disk_bytenr, - disk_bytenr + len - 1, &list, 0); + disk_bytenr + len - 1, &list, 0, false); if (ret) goto out; diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index 3afe5fa50a63..1cb3eed8b917 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -3077,7 +3077,7 @@ static int scrub_raid56_data_stripe_for_parity(struct scrub_ctx *sctx, ret = btrfs_lookup_csums_range(csum_root, extent_start, extent_start + extent_size - 1, - &sctx->csum_list, 1); + &sctx->csum_list, 1, false); if (ret) { scrub_parity_mark_sectors_error(sparity, extent_start, extent_size); @@ -3303,7 +3303,7 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx, if (extent_flags & BTRFS_EXTENT_FLAG_DATA) { ret = btrfs_lookup_csums_range(csum_root, cur_logical, cur_logical + scrub_len - 1, - &sctx->csum_list, 1); + &sctx->csum_list, 1, false); if (ret) break; } diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 9205c4a5ca81..8af30dab2a17 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -801,7 +801,7 @@ static noinline int replay_one_extent(struct btrfs_trans_handle *trans, ret = btrfs_lookup_csums_range(root->log_root, csum_start, csum_end - 1, - &ordered_sums, 0); + &ordered_sums, 0, false); if (ret) goto out; /* @@ -4513,7 +4513,7 @@ static noinline int copy_items(struct btrfs_trans_handle *trans, disk_bytenr += extent_offset; ret = btrfs_lookup_csums_range(csum_root, disk_bytenr, disk_bytenr + extent_num_bytes - 1, - &ordered_sums, 0); + &ordered_sums, 0, false); if (ret) goto out; @@ -4709,7 +4709,7 @@ static int log_extent_csums(struct btrfs_trans_handle *trans, ret = btrfs_lookup_csums_range(csum_root, em->block_start + csum_offset, em->block_start + csum_offset + - csum_len - 1, &ordered_sums, 0); + csum_len - 1, &ordered_sums, 0, false); if (ret) return ret; From patchwork Mon Sep 12 19:27:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974037 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 48FE4C6FA82 for ; Mon, 12 Sep 2022 19:28:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D54458D0001; Mon, 12 Sep 2022 15:28:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CDC806B0075; Mon, 12 Sep 2022 15:28:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B7EDC8D0001; Mon, 12 Sep 2022 15:28:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id AA2A96B0074 for ; Mon, 12 Sep 2022 15:28:07 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 87EBC1A1162 for ; Mon, 12 Sep 2022 19:28:07 +0000 (UTC) X-FDA: 79904419014.04.B1DC34E Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf08.hostedemail.com (Postfix) with ESMTP id 2D58D16009F for ; Mon, 12 Sep 2022 19:28:06 +0000 (UTC) Received: from pps.filterd (m0148461.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CGgk3p023956 for ; Mon, 12 Sep 2022 12:28:06 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=OMABLFRhm1RQqGMWOQ0WhDpDVmP34BVIsdLo+W65GBU=; b=HWZ44GeiIhtR+qqhvxxFIMCgYb+sJSbwxeEOqDupLf/Jkluf/5/QcOCqDSI0GzvHcxYw 3wnI5pGodOL57Fz+RJj7DeCJ/pcUWhVo/66YZRrasbwoKwaHO0ed9w0x6kyiUjkyx8Nd 1pWLVXxUCjDF4Wh9wohjbqB60TtgjG43L34= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgqpv4n60-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:06 -0700 Received: from twshared20183.05.prn5.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:83::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:04 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id 04CC9208522E; Mon, 12 Sep 2022 12:27:54 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 04/12] btrfs: add the ability to use NO_FLUSH for data reservations Date: Mon, 12 Sep 2022 12:27:44 -0700 Message-ID: <20220912192752.3785061-5-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-GUID: OQ7qQe0jLrzPySpGAEB55bZrLspxmX5a X-Proofpoint-ORIG-GUID: OQ7qQe0jLrzPySpGAEB55bZrLspxmX5a X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_12,2022-09-12_02,2022-06-22_01 ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010887; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=OMABLFRhm1RQqGMWOQ0WhDpDVmP34BVIsdLo+W65GBU=; b=ON4UJQ/JZ16N5QrTabw5aM8ACC3AgEZk5oQHha1rg5cYSOoZ0ZS7Vg+1cq8leKVk5oEF6f fwh70aQ8z4qhxvbODbWQNzF5OGvdtuTEizYtxR4dRWO3rxEe9waOVO+S/cp1dQDGMtANJy mMbfAmyixGBqTq3ZXMZthcUTEiBLMw8= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=HWZ44Gei; spf=pass (imf08.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010887; a=rsa-sha256; cv=none; b=wfFdQp+I0ZqsC2xJoMwxHa6GDavuQJoY1yy1hjh+2gops9EjecBi/ZlnExynYEJZ6ephjC aPb5hvChhbsQ7ysXize+yyfVgVoqbI7nga2bDjfrBjEslpm4DFuV9QVoDUBZXyTNTr/13p lpdyqHtVTdW6AAveL7F1Lm4wSYysMC4= X-Rspam-User: X-Stat-Signature: 7g586w3yb95pk6wa5gjncs797jpdr91d X-Rspamd-Queue-Id: 2D58D16009F Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=HWZ44Gei; spf=pass (imf08.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Rspamd-Server: rspam04 X-HE-Tag: 1663010886-753473 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Josef Bacik In order to accommodate NOWAIT IOCB's we need to be able to do NO_FLUSH data reservations, so plumb this through the delalloc reservation system. Signed-off-by: Josef Bacik Signed-off-by: Stefan Roesch --- fs/btrfs/block-group.c | 2 +- fs/btrfs/delalloc-space.c | 13 ++++++++++--- fs/btrfs/delalloc-space.h | 3 ++- fs/btrfs/file.c | 2 +- fs/btrfs/inode.c | 4 ++-- fs/btrfs/space-info.c | 3 ++- 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index e0375ba9d0fe..9df51245ba93 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -2869,7 +2869,7 @@ static int cache_save_setup(struct btrfs_block_group *block_group, cache_size *= fs_info->sectorsize; ret = btrfs_check_data_free_space(BTRFS_I(inode), &data_reserved, 0, - cache_size); + cache_size, false); if (ret) goto out_put; diff --git a/fs/btrfs/delalloc-space.c b/fs/btrfs/delalloc-space.c index 1e8f17ff829e..118b2e20b2e1 100644 --- a/fs/btrfs/delalloc-space.c +++ b/fs/btrfs/delalloc-space.c @@ -127,9 +127,11 @@ int btrfs_alloc_data_chunk_ondemand(struct btrfs_inode *inode, u64 bytes) } int btrfs_check_data_free_space(struct btrfs_inode *inode, - struct extent_changeset **reserved, u64 start, u64 len) + struct extent_changeset **reserved, u64 start, + u64 len, bool noflush) { struct btrfs_fs_info *fs_info = inode->root->fs_info; + enum btrfs_reserve_flush_enum flush = BTRFS_RESERVE_FLUSH_DATA; int ret; /* align the range */ @@ -137,7 +139,12 @@ int btrfs_check_data_free_space(struct btrfs_inode *inode, round_down(start, fs_info->sectorsize); start = round_down(start, fs_info->sectorsize); - ret = btrfs_alloc_data_chunk_ondemand(inode, len); + if (noflush) + flush = BTRFS_RESERVE_NO_FLUSH; + else if (btrfs_is_free_space_inode(inode)) + flush = BTRFS_RESERVE_FLUSH_FREE_SPACE_INODE; + + ret = btrfs_reserve_data_bytes(fs_info, len, flush); if (ret < 0) return ret; @@ -454,7 +461,7 @@ int btrfs_delalloc_reserve_space(struct btrfs_inode *inode, { int ret; - ret = btrfs_check_data_free_space(inode, reserved, start, len); + ret = btrfs_check_data_free_space(inode, reserved, start, len, false); if (ret < 0) return ret; ret = btrfs_delalloc_reserve_metadata(inode, len, len, false); diff --git a/fs/btrfs/delalloc-space.h b/fs/btrfs/delalloc-space.h index 28bf5c3ef430..e07d46043455 100644 --- a/fs/btrfs/delalloc-space.h +++ b/fs/btrfs/delalloc-space.h @@ -7,7 +7,8 @@ struct extent_changeset; int btrfs_alloc_data_chunk_ondemand(struct btrfs_inode *inode, u64 bytes); int btrfs_check_data_free_space(struct btrfs_inode *inode, - struct extent_changeset **reserved, u64 start, u64 len); + struct extent_changeset **reserved, u64 start, u64 len, + bool noflush); void btrfs_free_reserved_data_space(struct btrfs_inode *inode, struct extent_changeset *reserved, u64 start, u64 len); void btrfs_delalloc_release_space(struct btrfs_inode *inode, diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index f4aa198f0f87..0f257205c63d 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1664,7 +1664,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, extent_changeset_release(data_reserved); ret = btrfs_check_data_free_space(BTRFS_I(inode), &data_reserved, pos, - write_bytes); + write_bytes, false); if (ret < 0) { /* * If we don't have to COW at the offset, reserve diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index e0fe2c4b721f..52b3abb4c57c 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -4881,7 +4881,7 @@ int btrfs_truncate_block(struct btrfs_inode *inode, loff_t from, loff_t len, block_end = block_start + blocksize - 1; ret = btrfs_check_data_free_space(inode, &data_reserved, block_start, - blocksize); + blocksize, false); if (ret < 0) { if (btrfs_check_nocow_lock(inode, block_start, &write_bytes) > 0) { /* For nocow case, no need to reserve data space */ @@ -7766,7 +7766,7 @@ static int btrfs_dio_iomap_begin(struct inode *inode, loff_t start, if (write && !(flags & IOMAP_NOWAIT)) { ret = btrfs_check_data_free_space(BTRFS_I(inode), &dio_data->data_reserved, - start, data_alloc_len); + start, data_alloc_len, false); if (!ret) dio_data->data_space_reserved = true; else if (ret && !(BTRFS_I(inode)->flags & diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 435559ba94fa..a9d4bd374462 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -1737,7 +1737,8 @@ int btrfs_reserve_data_bytes(struct btrfs_fs_info *fs_info, u64 bytes, int ret; ASSERT(flush == BTRFS_RESERVE_FLUSH_DATA || - flush == BTRFS_RESERVE_FLUSH_FREE_SPACE_INODE); + flush == BTRFS_RESERVE_FLUSH_FREE_SPACE_INODE || + flush == BTRFS_RESERVE_NO_FLUSH); ASSERT(!current->journal_info || flush != BTRFS_RESERVE_FLUSH_DATA); ret = __reserve_bytes(fs_info, data_sinfo, bytes, flush); From patchwork Mon Sep 12 19:27:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974041 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0E72EC6FA89 for ; Mon, 12 Sep 2022 19:28:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 16DB794000A; Mon, 12 Sep 2022 15:28:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0F812940008; Mon, 12 Sep 2022 15:28:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E89B394000A; Mon, 12 Sep 2022 15:28:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id CE4B2940008 for ; Mon, 12 Sep 2022 15:28:10 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id ABB0B1A1164 for ; Mon, 12 Sep 2022 19:28:10 +0000 (UTC) X-FDA: 79904419140.27.795FC8B Received: from mx0b-00082601.pphosted.com (mx0b-00082601.pphosted.com [67.231.153.30]) by imf13.hostedemail.com (Postfix) with ESMTP id 3D11520099 for ; Mon, 12 Sep 2022 19:28:10 +0000 (UTC) Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CHMlLv003830 for ; Mon, 12 Sep 2022 12:28:09 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=OavFVzY5bttSht+NisTpXONRoLLq0g+z/0pTAeB2uZA=; b=nlLMGaWXuqIvMeMMLBz0b4FNMb3we+S6yQrcuFDBvEOTGnhWVZZGcHAGfVzBDzqF4AMc gucasGXRM9BQdDloi4nV0PBv05vmFR8zcwsRkDyP6VXspGnCvgFFYPgT/bAoRPQ0qDCR KwUv3khtkTjwKc42Yo9zWZPIIgNNHroP9GM= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgr40mdta-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:09 -0700 Received: from twshared15978.04.prn5.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:83::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:07 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id 0A8C62085230; Mon, 12 Sep 2022 12:27:54 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 05/12] btrfs: add btrfs_try_lock_ordered_range Date: Mon, 12 Sep 2022 12:27:45 -0700 Message-ID: <20220912192752.3785061-6-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: o_MK4WZWL7o5zWoF3bI8-BUOlGdRWNm9 X-Proofpoint-GUID: o_MK4WZWL7o5zWoF3bI8-BUOlGdRWNm9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_13,2022-09-12_02,2022-06-22_01 ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010890; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=OavFVzY5bttSht+NisTpXONRoLLq0g+z/0pTAeB2uZA=; b=wE75z45y4uNEfKvq6U+0bCOaeLNIsBc8YvIUy8H5PDcQg/tj+JdgWPIdvDnMH4kn/vS3QN m+kS78s16ycpUFjLCoYtxq4QHA9KLiJ2A4NIyQUorrr90DpGuHgGS1X7EPTjbkX8CauAT1 PKN7WgN2kGQzrUfXoc2aT+655X8OAUo= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=nlLMGaWX; spf=pass (imf13.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.153.30 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010890; a=rsa-sha256; cv=none; b=Zv0mUvhnbfOgIwMHL825nh2Z56F9si+fKhg9mGwccmnCJzjFSRtl13iZEKJrNIiPJA4pn6 V1SnHdD0b7vmgLhkw4qHCZ1TaPyZaYE8TUn6AZLcYOYSXjvoyKZeHkFjVBjGxC3I5CV45F KS/rlJsZ5PY3/CEoOhhAWdw/EAKyX5I= X-Rspam-User: X-Stat-Signature: q93ht8j8wi9sf47785qe8eypti1ymh89 X-Rspamd-Queue-Id: 3D11520099 Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=nlLMGaWX; spf=pass (imf13.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.153.30 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Rspamd-Server: rspam04 X-HE-Tag: 1663010890-30603 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Josef Bacik For IOCB_NOWAIT we're going to want to use try lock on the extent lock, and simply bail if there's an ordered extent in the range because the only choice there is to wait for the ordered extent to complete. Signed-off-by: Josef Bacik Signed-off-by: Stefan Roesch --- fs/btrfs/ordered-data.c | 28 ++++++++++++++++++++++++++++ fs/btrfs/ordered-data.h | 1 + 2 files changed, 29 insertions(+) diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c index 1952ac85222c..29c570f9a0ff 100644 --- a/fs/btrfs/ordered-data.c +++ b/fs/btrfs/ordered-data.c @@ -1041,6 +1041,34 @@ void btrfs_lock_and_flush_ordered_range(struct btrfs_inode *inode, u64 start, } } +/* + * btrfs_try_lock_ordered_range - lock the passed range and ensure all pending + * ordered extents in it are run to completion in nowait mode. + * + * @inode: Inode whose ordered tree is to be searched + * @start: Beginning of range to flush + * @end: Last byte of range to lock + * + * This function returns true if btrfs_lock_ordered_range does not return any + * extents, otherwise false. + */ +bool btrfs_try_lock_ordered_range(struct btrfs_inode *inode, u64 start, u64 end) +{ + struct btrfs_ordered_extent *ordered; + + if (!try_lock_extent(&inode->io_tree, start, end)) + return false; + + ordered = btrfs_lookup_ordered_range(inode, start, end - start + 1); + if (!ordered) + return true; + + btrfs_put_ordered_extent(ordered); + unlock_extent(&inode->io_tree, start, end); + return false; +} + + static int clone_ordered_extent(struct btrfs_ordered_extent *ordered, u64 pos, u64 len) { diff --git a/fs/btrfs/ordered-data.h b/fs/btrfs/ordered-data.h index 87792f85e2c4..8edd4b2d3952 100644 --- a/fs/btrfs/ordered-data.h +++ b/fs/btrfs/ordered-data.h @@ -218,6 +218,7 @@ void btrfs_wait_ordered_roots(struct btrfs_fs_info *fs_info, u64 nr, void btrfs_lock_and_flush_ordered_range(struct btrfs_inode *inode, u64 start, u64 end, struct extent_state **cached_state); +bool btrfs_try_lock_ordered_range(struct btrfs_inode *inode, u64 start, u64 end); int btrfs_split_ordered_extent(struct btrfs_ordered_extent *ordered, u64 pre, u64 post); int __init ordered_data_init(void); From patchwork Mon Sep 12 19:27:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974038 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4D85AC6FA8B for ; Mon, 12 Sep 2022 19:28:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 31D296B0074; Mon, 12 Sep 2022 15:28:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2CA46940007; Mon, 12 Sep 2022 15:28:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 16ADB6B0075; Mon, 12 Sep 2022 15:28:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id EFF8C940007 for ; Mon, 12 Sep 2022 15:28:07 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id C752A141060 for ; Mon, 12 Sep 2022 19:28:07 +0000 (UTC) X-FDA: 79904419014.24.6B9FBBA Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf29.hostedemail.com (Postfix) with ESMTP id 526FA1200D8 for ; Mon, 12 Sep 2022 19:28:07 +0000 (UTC) Received: from pps.filterd (m0109334.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CG0r75029413 for ; Mon, 12 Sep 2022 12:28:06 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=ZXwf58Xx9g1PlCMg5eynHYGJuiJxFviOrGskEtkiq8Y=; b=YpO323rTLyc6aPeHggbpiRiX2UkiQ9yVLjn9w46zB5baeT6i9W1Rn3zk5mX5Xc0B1usG N1jfwDgvNc3nD9JQyImdYlYnbRAj17bq++NG4xAFEXVlvP7c/tYJVMZRueIbqhQuSSi3 Jv3AZBjLUzY8IX9+G0DykFNVdBeFQImGigA= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgsw4cchw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:06 -0700 Received: from twshared20183.05.prn5.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:82::f) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:04 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id 107D62085232; Mon, 12 Sep 2022 12:27:54 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 06/12] btrfs: make btrfs_check_nocow_lock nowait compatible Date: Mon, 12 Sep 2022 12:27:46 -0700 Message-ID: <20220912192752.3785061-7-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: px4WoYSveq1RuzF_SlhfPO0bCVgTHb_c X-Proofpoint-GUID: px4WoYSveq1RuzF_SlhfPO0bCVgTHb_c X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_12,2022-09-12_02,2022-06-22_01 ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=YpO323rT; spf=pass (imf29.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010887; a=rsa-sha256; cv=none; b=SJSr1JAX6hiUDAtCMcke9v7IaUCHTer9T3wjxXCOcKTo3Vtfrf8wvyzCSm5HVTGMZL5Jql csSzUrc/gWZppIqhT3igBp9/sNUi/8kFuDUxRGgf2FO16On4aj1EwqxrkESJNW0mGI6WUz LzNNeNu7OaSl2YVsthaOm8FUt8lvRek= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010887; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ZXwf58Xx9g1PlCMg5eynHYGJuiJxFviOrGskEtkiq8Y=; b=y+EihdgQst349lYm4/ZfVn1duxXfz329ONDeBH79IqrzTe9greaxIJ1jXp4lgofyHokccx 7uly8jpJswUa8JNoM+R8kMzm5QVu318hG0eDHgxVa7FT5lquqGqCOflngwecWoQpbEmP1+ GpV/IEQsPD7KNoJvV726QcrglrMP7G4= X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 526FA1200D8 X-Rspam-User: Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=YpO323rT; spf=pass (imf29.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Stat-Signature: 88w5os4xhytr7qznx3r3p33gzieywmyg X-HE-Tag: 1663010887-267060 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Josef Bacik Now all the helpers that btrfs_check_nocow_lock uses handle nowait, add a nowait flag to btrfs_check_nocow_lock so it can be used by the write path. Signed-off-by: Josef Bacik Signed-off-by: Stefan Roesch --- fs/btrfs/ctree.h | 2 +- fs/btrfs/file.c | 33 ++++++++++++++++++++++----------- fs/btrfs/inode.c | 2 +- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 5cc5394503e0..eb25d007e651 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -3480,7 +3480,7 @@ int btrfs_dirty_pages(struct btrfs_inode *inode, struct page **pages, struct extent_state **cached, bool noreserve); int btrfs_fdatawrite_range(struct inode *inode, loff_t start, loff_t end); int btrfs_check_nocow_lock(struct btrfs_inode *inode, loff_t pos, - size_t *write_bytes); + size_t *write_bytes, bool nowait); void btrfs_check_nocow_unlock(struct btrfs_inode *inode); /* tree-defrag.c */ diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 0f257205c63d..f18efd9f2bc3 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1481,7 +1481,7 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages, * NOTE: Callers need to call btrfs_check_nocow_unlock() if we return > 0. */ int btrfs_check_nocow_lock(struct btrfs_inode *inode, loff_t pos, - size_t *write_bytes) + size_t *write_bytes, bool nowait) { struct btrfs_fs_info *fs_info = inode->root->fs_info; struct btrfs_root *root = inode->root; @@ -1500,16 +1500,21 @@ int btrfs_check_nocow_lock(struct btrfs_inode *inode, loff_t pos, fs_info->sectorsize) - 1; num_bytes = lockend - lockstart + 1; - btrfs_lock_and_flush_ordered_range(inode, lockstart, lockend, NULL); + if (nowait) { + if (!btrfs_try_lock_ordered_range(inode, lockstart, lockend)) { + btrfs_drew_write_unlock(&root->snapshot_lock); + return -EAGAIN; + } + } else { + btrfs_lock_and_flush_ordered_range(inode, lockstart, lockend, NULL); + } ret = can_nocow_extent(&inode->vfs_inode, lockstart, &num_bytes, - NULL, NULL, NULL, false, false); - if (ret <= 0) { - ret = 0; + NULL, NULL, NULL, nowait, false); + if (ret <= 0) btrfs_drew_write_unlock(&root->snapshot_lock); - } else { + else *write_bytes = min_t(size_t, *write_bytes , num_bytes - pos + lockstart); - } unlock_extent(&inode->io_tree, lockstart, lockend); return ret; @@ -1666,16 +1671,22 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, &data_reserved, pos, write_bytes, false); if (ret < 0) { + int can_nocow; + /* * If we don't have to COW at the offset, reserve * metadata only. write_bytes may get smaller than * requested here. */ - if (btrfs_check_nocow_lock(BTRFS_I(inode), pos, - &write_bytes) > 0) - only_release_metadata = true; - else + can_nocow = btrfs_check_nocow_lock(BTRFS_I(inode), pos, + &write_bytes, false); + if (can_nocow < 0) + ret = can_nocow; + if (can_nocow > 0) + ret = 0; + if (ret) break; + only_release_metadata = true; } num_pages = DIV_ROUND_UP(write_bytes + offset, PAGE_SIZE); diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 52b3abb4c57c..4ff07b47df82 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -4883,7 +4883,7 @@ int btrfs_truncate_block(struct btrfs_inode *inode, loff_t from, loff_t len, ret = btrfs_check_data_free_space(inode, &data_reserved, block_start, blocksize, false); if (ret < 0) { - if (btrfs_check_nocow_lock(inode, block_start, &write_bytes) > 0) { + if (btrfs_check_nocow_lock(inode, block_start, &write_bytes, false) > 0) { /* For nocow case, no need to reserve data space */ only_release_metadata = true; } else { From patchwork Mon Sep 12 19:27:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974043 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3DA8C6FA89 for ; Mon, 12 Sep 2022 19:28:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 69D1594000C; Mon, 12 Sep 2022 15:28:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 64DA2940008; Mon, 12 Sep 2022 15:28:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 33F6C94000D; Mon, 12 Sep 2022 15:28:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 1FD91940008 for ; Mon, 12 Sep 2022 15:28:16 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 066214022D for ; Mon, 12 Sep 2022 19:28:16 +0000 (UTC) X-FDA: 79904419392.30.481C6D1 Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf31.hostedemail.com (Postfix) with ESMTP id AAB41200AE for ; Mon, 12 Sep 2022 19:28:15 +0000 (UTC) Received: from pps.filterd (m0109334.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CIEppa022502 for ; Mon, 12 Sep 2022 12:28:14 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=8RVRQ6/cQX6qNy5uU4Kh4lX2fZOOQ9gq7/Aw+KIXpjA=; b=XRbmhapx5q387X5gok3qOUaceqcy5ZmlZXPOIt2VKkhfje2A0uCU0CcR5RvK/BG/vmQU 4zTzi3giUVTCrJhzHRmHCWoYOL5r/4ihGoIlfFLax+bGgG/eOgznzsy1Dctv1M/ndNH4 AGwcQocHNG1CKh8Y54jvmyhLycJuLQEazyk= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgsw4ccjw-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:14 -0700 Received: from twshared15978.04.prn5.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:83::4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:12 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id 162392085234; Mon, 12 Sep 2022 12:27:54 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 07/12] btrfs: make prepare_pages nowait compatible Date: Mon, 12 Sep 2022 12:27:47 -0700 Message-ID: <20220912192752.3785061-8-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: BhJ_a7qoGdCSHIq2Xhr7C2YGRsYvJxwG X-Proofpoint-GUID: BhJ_a7qoGdCSHIq2Xhr7C2YGRsYvJxwG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_12,2022-09-12_02,2022-06-22_01 ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010895; a=rsa-sha256; cv=none; b=rQLljnCYKU9s6LAwmS7WsTCnhNwNDVgWNipI9fLhpiog19+XEis9cDoNN0HCKj6G8N25s9 0NesxCYbQ81qLkh3COQlJqlh5DBhQIE4hCZ5w4KXq5+YoyyzqiluJBnlcly4Mqndwhbljf ENWhso7iWQ9HJBBpRPo7DRJ7JPO5EAs= ARC-Authentication-Results: i=1; imf31.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=XRbmhapx; dmarc=pass (policy=reject) header.from=fb.com; spf=pass (imf31.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010895; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=8RVRQ6/cQX6qNy5uU4Kh4lX2fZOOQ9gq7/Aw+KIXpjA=; b=lkSS3XviJRzjXRTuydTaHsAVvw+FN2RK2tZYRoNg3D4R8lAX/Z3TqwWOIxqk0zxR8bu8kl nsqgVN5oiEnthc0ave90AD5NFqw7/uf8qsMN3k4mMu4FQQPj0vMyGvnnoBFyZIzsCsmLqx W053ooDYJ5ma2xb8sklh5kpsKQNvpyQ= Authentication-Results: imf31.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=XRbmhapx; dmarc=pass (policy=reject) header.from=fb.com; spf=pass (imf31.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com" X-Rspam-User: X-Rspamd-Server: rspam06 X-Stat-Signature: jftq84kiauapm5sdtqjsc9twxap4pdqu X-Rspamd-Queue-Id: AAB41200AE X-HE-Tag: 1663010895-756432 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Add nowait parameter to the prepare_pages function. In case nowait is specified for an async buffered write request, do a nowait allocation or return -EAGAIN. Signed-off-by: Stefan Roesch --- fs/btrfs/file.c | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index f18efd9f2bc3..d4362ee7e09e 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1339,26 +1339,54 @@ static int prepare_uptodate_page(struct inode *inode, return 0; } +static int get_prepare_fgp_flags(bool nowait) +{ + int fgp_flags = FGP_LOCK | FGP_ACCESSED | FGP_CREAT; + + if (nowait) + fgp_flags |= FGP_NOWAIT; + + return fgp_flags; +} + +static gfp_t get_prepare_gfp_flags(struct inode *inode, bool nowait) +{ + gfp_t gfp; + + gfp = btrfs_alloc_write_mask(inode->i_mapping); + if (nowait) { + gfp &= ~__GFP_DIRECT_RECLAIM; + gfp |= GFP_NOWAIT; + } + + return gfp; +} + /* * this just gets pages into the page cache and locks them down. */ static noinline int prepare_pages(struct inode *inode, struct page **pages, size_t num_pages, loff_t pos, - size_t write_bytes, bool force_uptodate) + size_t write_bytes, bool force_uptodate, + bool nowait) { int i; unsigned long index = pos >> PAGE_SHIFT; - gfp_t mask = btrfs_alloc_write_mask(inode->i_mapping); + gfp_t mask = get_prepare_gfp_flags(inode, nowait); + int fgp_flags = get_prepare_fgp_flags(nowait); int err = 0; int faili; for (i = 0; i < num_pages; i++) { again: - pages[i] = find_or_create_page(inode->i_mapping, index + i, - mask | __GFP_WRITE); + pages[i] = pagecache_get_page(inode->i_mapping, index + i, + fgp_flags, mask | __GFP_WRITE); if (!pages[i]) { faili = i - 1; - err = -ENOMEM; + if (nowait) + err = -EAGAIN; + else + err = -ENOMEM; goto fail; } @@ -1376,7 +1404,7 @@ static noinline int prepare_pages(struct inode *inode, struct page **pages, pos + write_bytes, false); if (err) { put_page(pages[i]); - if (err == -EAGAIN) { + if (!nowait && err == -EAGAIN) { err = 0; goto again; } @@ -1716,7 +1744,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, */ ret = prepare_pages(inode, pages, num_pages, pos, write_bytes, - force_page_uptodate); + force_page_uptodate, false); if (ret) { btrfs_delalloc_release_extents(BTRFS_I(inode), reserve_bytes); From patchwork Mon Sep 12 19:27:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974045 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 85B50C6FA89 for ; Mon, 12 Sep 2022 19:28:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 33E06940008; Mon, 12 Sep 2022 15:28:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1E1F894000F; Mon, 12 Sep 2022 15:28:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ED7E094000E; Mon, 12 Sep 2022 15:28:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id D0506940008 for ; Mon, 12 Sep 2022 15:28:19 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id A5100C10FA for ; Mon, 12 Sep 2022 19:28:19 +0000 (UTC) X-FDA: 79904419518.22.7A53D6A Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf29.hostedemail.com (Postfix) with ESMTP id 323C41200CC for ; Mon, 12 Sep 2022 19:28:18 +0000 (UTC) Received: from pps.filterd (m0109334.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CIEpph022502 for ; Mon, 12 Sep 2022 12:28:18 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=v668+yucalsclBLGva7iP+bpxwNMZZM7NOxiVrIMvJs=; b=o+ANsbFDBaBM+3/6v0+TF/TCM6whzW6+JPujEiuO7iZaQhZCwogBAZkTI4JtugwViqfW E9sohXDvDdy/MSW7Z5GMPuO2uhe+gMwW1CxO6i4gZEPAvDWWOea6cWLmYbiaGjrvTebx bUUwZpcwcuGx5huZM8f/DnE/g+Hy789HlhQ= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgsw4ccjw-9 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:18 -0700 Received: from twshared15978.04.prn5.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:83::4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:13 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id 1BA292085236; Mon, 12 Sep 2022 12:27:54 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 08/12] btrfs: make lock_and_cleanup_extent_if_need nowait compatible Date: Mon, 12 Sep 2022 12:27:48 -0700 Message-ID: <20220912192752.3785061-9-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: XtQxRGV_jFq5ASsCK3yyq4JZhxRF427N X-Proofpoint-GUID: XtQxRGV_jFq5ASsCK3yyq4JZhxRF427N X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_12,2022-09-12_02,2022-06-22_01 ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010899; a=rsa-sha256; cv=none; b=bKHBKGUYe7WlqFmrZ7ho+i4LzxYAPYDmr/q5t/sVmCiSJarHDOTpz5ZkOwsUOlj06HltzC c0aENvSsDDyoR7zRdG93UyMON5lot+0wbHoSaVFupVhVQo+Le0oCIbPwW+8ka1yTGcSTjz lhwcGFb0HhkSnBvoNl8K/1+B8AXniGA= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=o+ANsbFD; spf=pass (imf29.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010899; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=v668+yucalsclBLGva7iP+bpxwNMZZM7NOxiVrIMvJs=; b=HAVUK1HsjR2gdS74mo8++/fwWiO+kpj8FidRAxBBcGX7gi0kP/YGM72w2nCompMFz9m/q9 gq1DGOI6GSB2ch5rgwv+/63dBAr5RH8dtO9xUNQBtvhbeHdRm4YjA0An//iEiY3MYDm778 m6YYDEHSXUzuwBb0lyVreSto/m9sDfw= X-Rspamd-Queue-Id: 323C41200CC Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=o+ANsbFD; spf=pass (imf29.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Rspam-User: X-Rspamd-Server: rspam10 X-Stat-Signature: j9kpbkxu34bm61dqdps9obohrad5dyr5 X-HE-Tag: 1663010898-984064 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: This adds the nowait parameter to lock_and_cleanup_extent_if_need(). If the nowait parameter is specified we try to lock the extent in nowait mode. Signed-off-by: Stefan Roesch --- fs/btrfs/file.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index d4362ee7e09e..cb54ba631691 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1439,7 +1439,7 @@ static noinline int lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages, size_t num_pages, loff_t pos, size_t write_bytes, - u64 *lockstart, u64 *lockend, + u64 *lockstart, u64 *lockend, bool nowait, struct extent_state **cached_state) { struct btrfs_fs_info *fs_info = inode->root->fs_info; @@ -1454,8 +1454,21 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages, if (start_pos < inode->vfs_inode.i_size) { struct btrfs_ordered_extent *ordered; - lock_extent_bits(&inode->io_tree, start_pos, last_pos, + if (nowait) { + if (!try_lock_extent(&inode->io_tree, start_pos, last_pos)) { + for (i = 0; i < num_pages; i++) { + unlock_page(pages[i]); + put_page(pages[i]); + pages[i] = NULL; + } + + return -EAGAIN; + } + } else { + lock_extent_bits(&inode->io_tree, start_pos, last_pos, cached_state); + } + ordered = btrfs_lookup_ordered_range(inode, start_pos, last_pos - start_pos + 1); if (ordered && @@ -1754,7 +1767,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, extents_locked = lock_and_cleanup_extent_if_need( BTRFS_I(inode), pages, num_pages, pos, write_bytes, &lockstart, - &lockend, &cached_state); + &lockend, false, &cached_state); if (extents_locked < 0) { if (extents_locked == -EAGAIN) goto again; From patchwork Mon Sep 12 19:27:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974042 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 919BBC6FA83 for ; Mon, 12 Sep 2022 19:28:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2A78094000B; Mon, 12 Sep 2022 15:28:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2560794000C; Mon, 12 Sep 2022 15:28:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0FAA194000B; Mon, 12 Sep 2022 15:28:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id EFDF2940008 for ; Mon, 12 Sep 2022 15:28:15 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id CBE10A08E8 for ; Mon, 12 Sep 2022 19:28:15 +0000 (UTC) X-FDA: 79904419350.20.EC09082 Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf03.hostedemail.com (Postfix) with ESMTP id 666B120086 for ; Mon, 12 Sep 2022 19:28:15 +0000 (UTC) Received: from pps.filterd (m0044012.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CG6lUP003051 for ; Mon, 12 Sep 2022 12:28:14 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=hjvhu+Qp84kdov74Xj1nrOZz9nTHcHa45YxCt8fKlVM=; b=baVMT3r+NT4+eN5IRphhDBdpbkMFS6hj7tN43AHdsvmFdo2i0Y24Av831cjPdX71r4r+ xTOnZ77FYow+MdGv9AZso1tXi5Zn/s4ptTPXjsPgMobYPYp6c+fx06vHlaxoHaHPcEYU 3/vMxkN+WpPt/RmwV1MKJHeOOyiqEuUEi54= Received: from mail.thefacebook.com ([163.114.132.120]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgr9smh8w-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:14 -0700 Received: from twshared6447.05.prn5.facebook.com (2620:10d:c085:208::11) by mail.thefacebook.com (2620:10d:c085:11d::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:13 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id 212BB2085238; Mon, 12 Sep 2022 12:27:54 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 09/12] btrfs: plumb NOWAIT through the write path Date: Mon, 12 Sep 2022 12:27:49 -0700 Message-ID: <20220912192752.3785061-10-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: cpl2TUUa6c0joBr1yijik3bf7h3KzSQ2 X-Proofpoint-GUID: cpl2TUUa6c0joBr1yijik3bf7h3KzSQ2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_13,2022-09-12_02,2022-06-22_01 ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=baVMT3r+; spf=pass (imf03.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010895; a=rsa-sha256; cv=none; b=UPFQ41Ahy6SmzfGVkChHyzaTFtXGEj8FUTXtpxrsIPYeVkquaibAMMntKbQdrCl5yitTXA usqXj4ZYeIItsSyIJ4g5VyI0IoKPipmx21NVnwj0rb6ms5u2gyDezbGk9TJwpCWXVNfKni 7VEb96ILT44VwMKmvBfNPV1AGnCcPVw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010895; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hjvhu+Qp84kdov74Xj1nrOZz9nTHcHa45YxCt8fKlVM=; b=YV4/Ki7zBERwCsConL57nsb9J/Zj6rgOStBNRt26ChToKyjD1n73vJ9aubqcNh9Sfh3p4U l6pfyJabqjqcjjYf8udF8HtBxPkZYl7JMOOidWn9GXOWZ40ZomwJhc0E9xl7pJy2eMz6Pn z2dPGs+lGWEnySStRo6r64dapRM4IhU= Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=baVMT3r+; spf=pass (imf03.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Rspamd-Queue-Id: 666B120086 X-Stat-Signature: b6f5z8y1mu51gsr9tngjm1w3dgncz8to X-Rspam-User: X-Rspamd-Server: rspam02 X-HE-Tag: 1663010895-609824 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: We have everywhere setup for nowait, plumb NOWAIT through the write path. Signed-off-by: Josef Bacik Signed-off-by: Stefan Roesch --- fs/btrfs/file.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index cb54ba631691..3d038e1257f9 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1653,8 +1653,9 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, bool force_page_uptodate = false; loff_t old_isize = i_size_read(inode); unsigned int ilock_flags = 0; + const bool nowait = iocb->ki_flags & IOCB_NOWAIT; - if (iocb->ki_flags & IOCB_NOWAIT) + if (nowait) ilock_flags |= BTRFS_ILOCK_TRY; ret = btrfs_inode_lock(inode, ilock_flags); @@ -1710,17 +1711,22 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, extent_changeset_release(data_reserved); ret = btrfs_check_data_free_space(BTRFS_I(inode), &data_reserved, pos, - write_bytes, false); + write_bytes, nowait); if (ret < 0) { int can_nocow; + if (nowait && (ret == -ENOSPC || ret == -EAGAIN)) { + ret = -EAGAIN; + break; + } + /* * If we don't have to COW at the offset, reserve * metadata only. write_bytes may get smaller than * requested here. */ can_nocow = btrfs_check_nocow_lock(BTRFS_I(inode), pos, - &write_bytes, false); + &write_bytes, nowait); if (can_nocow < 0) ret = can_nocow; if (can_nocow > 0) @@ -1737,7 +1743,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, WARN_ON(reserve_bytes == 0); ret = btrfs_delalloc_reserve_metadata(BTRFS_I(inode), reserve_bytes, - reserve_bytes, false); + reserve_bytes, nowait); if (ret) { if (!only_release_metadata) btrfs_free_reserved_data_space(BTRFS_I(inode), @@ -1767,10 +1773,11 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, extents_locked = lock_and_cleanup_extent_if_need( BTRFS_I(inode), pages, num_pages, pos, write_bytes, &lockstart, - &lockend, false, &cached_state); + &lockend, nowait, &cached_state); if (extents_locked < 0) { - if (extents_locked == -EAGAIN) + if (!nowait && extents_locked == -EAGAIN) goto again; + btrfs_delalloc_release_extents(BTRFS_I(inode), reserve_bytes); ret = extents_locked; From patchwork Mon Sep 12 19:27:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974044 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7370BC6FA83 for ; Mon, 12 Sep 2022 19:28:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0D22794000D; Mon, 12 Sep 2022 15:28:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 05D19940008; Mon, 12 Sep 2022 15:28:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CDE0F94000D; Mon, 12 Sep 2022 15:28:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id BA1E1940008 for ; Mon, 12 Sep 2022 15:28:19 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 909521C69B0 for ; Mon, 12 Sep 2022 19:28:19 +0000 (UTC) X-FDA: 79904419518.20.1041396 Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf19.hostedemail.com (Postfix) with ESMTP id 337501A007C for ; Mon, 12 Sep 2022 19:28:18 +0000 (UTC) Received: from pps.filterd (m0109334.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CD5XB3028072 for ; Mon, 12 Sep 2022 12:28:18 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=Xfmv/q1sJqX2orN/Q6I/sqaH1MCfWUK4TQnNtY5BWDc=; b=Km2YyidxKG/uK1G+0axv3B9xehd9q+GKNg9XZeaKqLeJlxnkPGMq2weZwkDxM3Y9cCPO dnFLwxfqA+FdHqCTgg/Nf/wr5jRYcnlR/TfQSzS0QvybHHS03tRkotm1DDKTXl2PEh/L pq0MjTSUvrTkpiVp4x/XGQaej3UTZ4aj5Ac= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgsw4cck9-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:17 -0700 Received: from twshared13315.14.prn3.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:83::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:16 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id 266C1208523A; Mon, 12 Sep 2022 12:27:54 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 10/12] btrfs: make balance_dirty_pages nowait compatible Date: Mon, 12 Sep 2022 12:27:50 -0700 Message-ID: <20220912192752.3785061-11-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: Cq82nhW4OVLryPw9GsupdoBXEnOY72d4 X-Proofpoint-GUID: Cq82nhW4OVLryPw9GsupdoBXEnOY72d4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_12,2022-09-12_02,2022-06-22_01 ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010899; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Xfmv/q1sJqX2orN/Q6I/sqaH1MCfWUK4TQnNtY5BWDc=; b=PJ1mtN4Z/Z+SloYjbhmwic9F5NHqG+ld5ghAHIlCTdY8u92mHoyUFj2stOSm9lNADHnTvQ 5ielC0yf5cWyU0du70FSw2UR4apjFM0yXPbzsqMU9MSATNIY7j5uu11l6vjA7lNzeMpTma qgeND1q85tqJ1ZB9njuuzv0FUhrX2Zw= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=Km2Yyidx; spf=pass (imf19.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010899; a=rsa-sha256; cv=none; b=5FcBbF9M59Jb+fcQfhy9TYLAabetIWrs7/aKnRPBbEYrpEmiHmcB7qT/XyDxmtZd1FTNMU 5pJR5qwvUO177YPjq79ZNryx4x+8PphJa0DzzEXtWAkdPCeGMlQyFN1nws/xzFQ4raaf7W J1qtwICwwJyHii1i5f8FZTTZheCAFfk= X-Rspam-User: X-Stat-Signature: n3qcsfno8ay65xx4u7rh8p7953piqg4u X-Rspamd-Queue-Id: 337501A007C Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=Km2Yyidx; spf=pass (imf19.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Rspamd-Server: rspam04 X-HE-Tag: 1663010898-940712 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: This replaces the call to function balance_dirty_pages_ratelimited() in the function btrfs_buffered_write() with a call to balance_dirty_pages_ratelimited_flags(). It also moves the function after the again label. This can cause the function to be called a bit later, but this should have no impact in the real world. Signed-off-by: Stefan Roesch --- fs/btrfs/file.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 3d038e1257f9..4dc6484ff229 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1654,6 +1654,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, loff_t old_isize = i_size_read(inode); unsigned int ilock_flags = 0; const bool nowait = iocb->ki_flags & IOCB_NOWAIT; + unsigned int bdp_flags = nowait ? BDP_ASYNC : 0; if (nowait) ilock_flags |= BTRFS_ILOCK_TRY; @@ -1756,6 +1757,10 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, release_bytes = reserve_bytes; again: + ret = balance_dirty_pages_ratelimited_flags(inode->i_mapping, bdp_flags); + if (ret) + break; + /* * This is going to setup the pages array with the number of * pages we want, so we don't really need to worry about the @@ -1860,8 +1865,6 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, cond_resched(); - balance_dirty_pages_ratelimited(inode->i_mapping); - pos += copied; num_written += copied; } From patchwork Mon Sep 12 19:27:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974047 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7DB09C6FA82 for ; Mon, 12 Sep 2022 19:28:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1BB5D80008; Mon, 12 Sep 2022 15:28:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 16A8C80007; Mon, 12 Sep 2022 15:28:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 032A480008; Mon, 12 Sep 2022 15:28:30 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id E720880007 for ; Mon, 12 Sep 2022 15:28:30 -0400 (EDT) Received: from smtpin31.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id C52FEABA7C for ; Mon, 12 Sep 2022 19:28:30 +0000 (UTC) X-FDA: 79904419980.31.CCFEDBA Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf18.hostedemail.com (Postfix) with ESMTP id 493BD1C0094 for ; Mon, 12 Sep 2022 19:28:30 +0000 (UTC) Received: from pps.filterd (m0044012.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CIm5mu004537 for ; Mon, 12 Sep 2022 12:28:29 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=HgZUbO7apXTpfUq7KyjEgw2oorrYQGuiLIcFfxgsjkY=; b=GKze7BczTFInz/J2jfOcLFZWzLd3s4IqvoJKZyh/JIdTv7eZRq5HRoNXrLZGGHz0nPoV G+9Rafv4dTQ/veBNSflYJk7ySdlFadYEdN2dM32RaCZIsHxEuvePUVRgXNMEEgSkrGzG c5cSxRkzfVMVs4w5CgNX4rCjNFCy2su2Pxk= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgr9smhb4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:29 -0700 Received: from twshared20183.05.prn5.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:83::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:27 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id 2BB8B208523C; Mon, 12 Sep 2022 12:27:54 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 11/12] btrfs: assert nowait mode is not used for some btree search functions Date: Mon, 12 Sep 2022 12:27:51 -0700 Message-ID: <20220912192752.3785061-12-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: knjMgDGwni0CYTXxj81nEHg1awi6I9pj X-Proofpoint-GUID: knjMgDGwni0CYTXxj81nEHg1awi6I9pj X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_13,2022-09-12_02,2022-06-22_01 ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010910; a=rsa-sha256; cv=none; b=FYjIdJphAOcKgmZlNUkdqpaTtkWWixot8Ui9kJQ37g5gvxvMwBLsjEJQX9QAsZiMQn3k8m w5RL9QAR22PV5dJKrYb36bDpJbXFwVqCSiVu6oP7GSvCZTt5dJa0sTHHXDvoVlGLhq3YMw MyhG1HncXMy/m2hfqh7++Xwaa5RhRYg= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=GKze7Bcz; spf=pass (imf18.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010910; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=HgZUbO7apXTpfUq7KyjEgw2oorrYQGuiLIcFfxgsjkY=; b=e05g4Y4KU8ODqpguaRQQvyU07EN4jeS/Di3jgrF3mU+99ojftJtIMuzJy5CIcQLy6EKLQ0 NJ2/lQxH2xE9kpUpoiOcbAkAMU7x3mII3C4BJjPr3mipZdtkuhJsrSlzLl49eTpSV4ByCH KDF9JNj50ApxENhY3cAMf/CKp6GsTUo= X-Rspamd-Queue-Id: 493BD1C0094 Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=GKze7Bcz; spf=pass (imf18.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com"; dmarc=pass (policy=reject) header.from=fb.com X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: t4mus8zhn34kceozczdo1o8rh9kfqpzq X-HE-Tag: 1663010910-982390 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: This adds nowait asserts to btree search functions which are not used by buffered IO and direct IO paths. Signed-off-by: Stefan Roesch --- fs/btrfs/ctree.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 71b238364939..d973d6702cd0 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -2164,6 +2164,7 @@ int btrfs_search_old_slot(struct btrfs_root *root, const struct btrfs_key *key, lowest_level = p->lowest_level; WARN_ON(p->nodes[0] != NULL); + ASSERT(!p->nowait); if (p->search_commit_root) { BUG_ON(time_seq); @@ -4465,6 +4466,7 @@ int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, int ret = 1; int keep_locks = path->keep_locks; + ASSERT(!path->nowait); path->keep_locks = 1; again: cur = btrfs_read_lock_root_node(root); @@ -4645,6 +4647,8 @@ int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, int ret; int i; + ASSERT(!path->nowait); + nritems = btrfs_header_nritems(path->nodes[0]); if (nritems == 0) return 1; From patchwork Mon Sep 12 19:27:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 12974046 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id B134BC6FA83 for ; Mon, 12 Sep 2022 19:28:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4A23494000E; Mon, 12 Sep 2022 15:28:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4511D80007; Mon, 12 Sep 2022 15:28:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2F1F594000F; Mon, 12 Sep 2022 15:28:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 204ED94000E for ; Mon, 12 Sep 2022 15:28:25 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id F2E471A0539 for ; Mon, 12 Sep 2022 19:28:24 +0000 (UTC) X-FDA: 79904419728.28.ABFE2A3 Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf05.hostedemail.com (Postfix) with ESMTP id 94F861000A5 for ; Mon, 12 Sep 2022 19:28:24 +0000 (UTC) Received: from pps.filterd (m0148461.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28CHvInA002614 for ; Mon, 12 Sep 2022 12:28:23 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=ChjfSENQchEUBM4cPfbpSt1QO05k//yXuIWwWjuVJaY=; b=pakKpLO8FmSLNVjyONwmzsdGLp6w8Oudhf6n+b+BgYnfg8b90pWxLv3VfkmjBcFKxQ+B qMGy566NT/Qco6I7r5FApmAPpc+uU+pblE+sjHP64Bi9VDaWoZLuvbDsEQ71cZCFn9GG Jz89GMOfT1CUkdhjSiYSVKlp99qgoUJKddw= Received: from mail.thefacebook.com ([163.114.132.120]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3jgqpv4n85-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 12 Sep 2022 12:28:23 -0700 Received: from twshared13579.04.prn5.facebook.com (2620:10d:c085:108::4) by mail.thefacebook.com (2620:10d:c085:21d::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 12 Sep 2022 12:28:22 -0700 Received: by dev1180.prn1.facebook.com (Postfix, from userid 425415) id 311CF208523E; Mon, 12 Sep 2022 12:27:54 -0700 (PDT) From: Stefan Roesch To: , , , CC: , , , Subject: [PATCH v3 12/12] btrfs: enable nowait async buffered writes Date: Mon, 12 Sep 2022 12:27:52 -0700 Message-ID: <20220912192752.3785061-13-shr@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220912192752.3785061-1-shr@fb.com> References: <20220912192752.3785061-1-shr@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-GUID: o95C-2mS11zcqIKxeLF_PPwxQwRRxWWo X-Proofpoint-ORIG-GUID: o95C-2mS11zcqIKxeLF_PPwxQwRRxWWo X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-12_12,2022-09-12_02,2022-06-22_01 ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1663010904; a=rsa-sha256; cv=none; b=fo9iNKSQ7cqnjtFbeDQFYP4/NiiJOVO18i313lGMrK4pfZZDi/lMA2yLhJKvRl8oEiEac5 riPJWC3ZBQdI0jEA+k2JelpEtPECEmmSQnBvwF93yXJRtAm+/Qm8LgFxXwXHogHXIbLd5y /sohF4aSrIehMy5wIRn+kLEfgegPYiw= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=pakKpLO8; dmarc=pass (policy=reject) header.from=fb.com; spf=pass (imf05.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1663010904; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ChjfSENQchEUBM4cPfbpSt1QO05k//yXuIWwWjuVJaY=; b=5M8x7S8VEleUk1E1GySGWCHNVsDZHYviuHZMlvTc+KbQ5rR9MNAkT5MkxqDmg0Te0Wmop7 BEmmvMxYIurc5mPwaLMU6SkcMRXUONR0My2KUj8aK5YSnoHXE8QCot9GTHvCt1T7BLZ7Em X+YJrgU0ITDqq2cSI1H1rXOCps01tSQ= X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 94F861000A5 X-Rspam-User: Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=fb.com header.s=facebook header.b=pakKpLO8; dmarc=pass (policy=reject) header.from=fb.com; spf=pass (imf05.hostedemail.com: domain of "prvs=025416ff2e=shr@fb.com" designates 67.231.145.42 as permitted sender) smtp.mailfrom="prvs=025416ff2e=shr@fb.com" X-Stat-Signature: 4gygjeu3zmbrwhq6jhr7cy5sk56rjkk3 X-HE-Tag: 1663010904-643461 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Enable nowait async buffered writes in btrfs_do_write_iter() and btrfs_file_open(). In this version encoded buffered writes have the optimization not enabled. Encoded writes are enabled by using an ioctl. io-uring currently do not support ioctl's. This might be enabled in the future. Performance results: For fio the following results have been obtained with a queue depth of 1 and 4k block size (runtime 600 secs): sequential writes: without patch with patch libaio psync iops: 55k 134k 117K 148K bw: 221MB/s 538MB/s 469MB/s 592MB/s clat: 15286ns 82ns 994ns 6340ns For an io depth of 1, the new patch improves throughput by over two times (compared to the exiting behavior, where buffered writes are processed by an io-worker process) and also the latency is considerably reduced. To achieve the same or better performance with the exisiting code an io depth of 4 is required. Increasing the iodepth further does not lead to improvements. The tests have been run like this: ./fio --name=seq-writers --ioengine=psync --iodepth=1 --rw=write \ --bs=4k --direct=0 --size=100000m --time_based --runtime=600 \ --numjobs=1 --filename=... ./fio --name=seq-writers --ioengine=io_uring --iodepth=1 --rw=write \ --bs=4k --direct=0 --size=100000m --time_based --runtime=600 \ --numjobs=1 --filename=... ./fio --name=seq-writers --ioengine=libaio --iodepth=1 --rw=write \ --bs=4k --direct=0 --size=100000m --time_based --runtime=600 \ --numjobs=1 --filename=... Testing: This patch has been tested with xfstests, fsx, fio. xfstests shows no new diffs compared to running without the patch series. Signed-off-by: Stefan Roesch --- fs/btrfs/file.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 4dc6484ff229..16052903fa82 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -2107,13 +2107,13 @@ ssize_t btrfs_do_write_iter(struct kiocb *iocb, struct iov_iter *from, if (BTRFS_FS_ERROR(inode->root->fs_info)) return -EROFS; - if ((iocb->ki_flags & IOCB_NOWAIT) && !(iocb->ki_flags & IOCB_DIRECT)) - return -EOPNOTSUPP; - if (sync) atomic_inc(&inode->sync_writers); if (encoded) { + if (iocb->ki_flags & IOCB_NOWAIT) + return -EOPNOTSUPP; + num_written = btrfs_encoded_write(iocb, from, encoded); num_sync = encoded->len; } else if (iocb->ki_flags & IOCB_DIRECT) { @@ -3755,7 +3755,7 @@ static int btrfs_file_open(struct inode *inode, struct file *filp) { int ret; - filp->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC; + filp->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC | FMODE_BUF_WASYNC; ret = fsverity_file_open(inode, filp); if (ret)