From patchwork Wed Apr 10 14:09:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brian Foster X-Patchwork-Id: 13624636 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EC2FE160780 for ; Wed, 10 Apr 2024 14:08:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712758084; cv=none; b=EmvLpEYEHfCxXixuv7Y5uSij4fOYfgdsNrUxm7UCLqfrXEczfyT4zcBrVyl2oA7LMRfjfu6CqHFicPW7E6EDjlLOs9LwT8R8DfJkMcy3t6GPtQLUZHjt370EGFfCdwGb5YU5kqWR0OELgxcBGF6Rw8IdHpQkMRlaNQckxUQg2+Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712758084; c=relaxed/simple; bh=WIPdk4LLVt44VIGow6FHKfCR8GxmUUKgvQKq6Ebnkc8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=eVFDlYc2Dpsb2BDxQ8xKU3uUu3r/b3BIy8WGFq3b2+E7C8DXkE3vK/jsJx28WT0bNuUg54jkdg7QsKEgz2hvik9BcPUsQsJN281CT+PCMJu9X9oCisga0CgXy5A1Rh6c0Zxy3tui0gO50aDb6yednHbbo64cPXgR8c9ZhXxfA5o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=iK4GWz2v; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="iK4GWz2v" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1712758081; h=from:from: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; bh=4Gpc8NsQlOqmTIysB17MQYNDNTLuUHo+RMJ20Aam3CY=; b=iK4GWz2v+gyawmvAxdZzOq19lDf9zt7t2digNix4PHACcPTV+OWxD+FR39sJaDRflUsWTI 1zRnJkEz8QxGg3jGnt6oeYJGBc4S7xQ5gYFjKg0TWBlGtF32Ak5SP6l6kl2x0RPSaTv7oN dQzXaLI88BKtHyW1HxxqeKx6uD5JYao= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-192-J37gXWDvMfiV7x0HTOH6QQ-1; Wed, 10 Apr 2024 10:07:58 -0400 X-MC-Unique: J37gXWDvMfiV7x0HTOH6QQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2223B3C108CA; Wed, 10 Apr 2024 14:07:58 +0000 (UTC) Received: from bfoster.redhat.com (unknown [10.22.16.57]) by smtp.corp.redhat.com (Postfix) with ESMTP id EB0581C060A6; Wed, 10 Apr 2024 14:07:57 +0000 (UTC) From: Brian Foster To: linux-bcachefs@vger.kernel.org, linux-xfs@vger.kernel.org Cc: Kent Overstreet Subject: [PATCH RFC 1/3] iomap: factor out a bio submission helper Date: Wed, 10 Apr 2024 10:09:54 -0400 Message-ID: <20240410140956.1186563-2-bfoster@redhat.com> In-Reply-To: <20240410140956.1186563-1-bfoster@redhat.com> References: <20240410140956.1186563-1-bfoster@redhat.com> Precedence: bulk X-Mailing-List: linux-xfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.7 This is a small cleanup to facilitate a nosubmit iomap flag. No functional changes intended. Signed-off-by: Brian Foster --- fs/iomap/buffered-io.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index 4e8e41c8b3c0..b6d176027887 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -43,6 +43,23 @@ struct iomap_folio_state { static struct bio_set iomap_ioend_bioset; +/* + * Simple submit_bio() wrapper. Set ->bi_status to trigger error completion. + */ +static inline int iomap_submit_bio(struct bio *bio, bool wait) +{ + int ret = 0; + + if (bio->bi_status) + bio_endio(bio); + else if (wait) + ret = submit_bio_wait(bio); + else + submit_bio(bio); + + return ret; +} + static inline bool ifs_is_fully_uptodate(struct folio *folio, struct iomap_folio_state *ifs) { @@ -411,7 +428,7 @@ static loff_t iomap_readpage_iter(const struct iomap_iter *iter, unsigned int nr_vecs = DIV_ROUND_UP(length, PAGE_SIZE); if (ctx->bio) - submit_bio(ctx->bio); + iomap_submit_bio(ctx->bio, false); if (ctx->rac) /* same as readahead_gfp_mask */ gfp |= __GFP_NORETRY | __GFP_NOWARN; @@ -464,7 +481,7 @@ int iomap_read_folio(struct folio *folio, const struct iomap_ops *ops) folio_set_error(folio); if (ctx.bio) { - submit_bio(ctx.bio); + iomap_submit_bio(ctx.bio, false); WARN_ON_ONCE(!ctx.cur_folio_in_bio); } else { WARN_ON_ONCE(ctx.cur_folio_in_bio); @@ -537,7 +554,7 @@ void iomap_readahead(struct readahead_control *rac, const struct iomap_ops *ops) iter.processed = iomap_readahead_iter(&iter, &ctx); if (ctx.bio) - submit_bio(ctx.bio); + iomap_submit_bio(ctx.bio, false); if (ctx.cur_folio) { if (!ctx.cur_folio_in_bio) folio_unlock(ctx.cur_folio); @@ -665,7 +682,7 @@ static int iomap_read_folio_sync(loff_t block_start, struct folio *folio, bio_init(&bio, iomap->bdev, &bvec, 1, REQ_OP_READ); bio.bi_iter.bi_sector = iomap_sector(iomap, block_start); bio_add_folio_nofail(&bio, folio, plen, poff); - return submit_bio_wait(&bio); + return iomap_submit_bio(&bio, true); } static int __iomap_write_begin(const struct iomap_iter *iter, loff_t pos, @@ -1667,12 +1684,9 @@ static int iomap_submit_ioend(struct iomap_writepage_ctx *wpc, int error) if (wpc->ops->prepare_ioend) error = wpc->ops->prepare_ioend(wpc->ioend, error); - if (error) { + if (error) wpc->ioend->io_bio.bi_status = errno_to_blk_status(error); - bio_endio(&wpc->ioend->io_bio); - } else { - submit_bio(&wpc->ioend->io_bio); - } + iomap_submit_bio(&wpc->ioend->io_bio, false); wpc->ioend = NULL; return error; From patchwork Wed Apr 10 14:09:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brian Foster X-Patchwork-Id: 13624637 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EC27315FCF9 for ; Wed, 10 Apr 2024 14:08:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712758084; cv=none; b=o+tZsbDSX9NQtwA+8O++xNIqBliTBTHR1o8okNo8CGhw5Jk/PuHhqOAju5JSXKHXg0F6weUNtAsHYQJDr+EP71ltzYifiUeP94grbP+AybcoCJpm+FKeuGCCnzsMGUdtll9DKOpa3odhw+nk5Ow2tAi+Y1AMcRsF5OHpxqLvOiA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712758084; c=relaxed/simple; bh=+gCVGg7WykCJCqiT/KTLnUkV/fs21QxdSsOT1bLAqcM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=XWkSB21SEeflYWaPJnw5OYDTuXcfPoz58pVaRJlH5IJWak9zkmVON4XX3VycnigyZzmCsNfqGSVJtNSMADEfiH5qOrBSkNgZHGokeeH7mlQ6zabnvGq6HLe5ICe50nWOujSmHxsdS66TyRkZVuIYgceTzAOduriia1ATAN8Nozk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=ZWphFIQE; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ZWphFIQE" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1712758081; h=from:from: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; bh=UO/HFc/5sXpzWZHKxBgz7AEGxInJGIPNp1IQ1Vxtm38=; b=ZWphFIQEqJlBe8kyk9LXHHcE8SQ40UZ0wQLVbzy8uc9/LqTHogD84bOqbIVsIJGYC4CXYw 7shohzOTv+9o9xDT3ujuUw41T2Pp3MOfWKShn3T2hLERCeR9zBx946rXUINtnydLKPZF8v eaHQW6nmuDGW0VdGtdttRdbkpGtDgMo= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-270-7_KbXs26P0ywe_MLcUg6LQ-1; Wed, 10 Apr 2024 10:07:58 -0400 X-MC-Unique: 7_KbXs26P0ywe_MLcUg6LQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5DFDD1044574; Wed, 10 Apr 2024 14:07:58 +0000 (UTC) Received: from bfoster.redhat.com (unknown [10.22.16.57]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2F3911C060A6; Wed, 10 Apr 2024 14:07:58 +0000 (UTC) From: Brian Foster To: linux-bcachefs@vger.kernel.org, linux-xfs@vger.kernel.org Cc: Kent Overstreet Subject: [PATCH RFC 2/3] iomap: add nosubmit flag to skip data I/O on iomap mapping Date: Wed, 10 Apr 2024 10:09:55 -0400 Message-ID: <20240410140956.1186563-3-bfoster@redhat.com> In-Reply-To: <20240410140956.1186563-1-bfoster@redhat.com> References: <20240410140956.1186563-1-bfoster@redhat.com> Precedence: bulk X-Mailing-List: linux-xfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.7 Define a nosubmit flag to skip data I/O submission on a specified mapping. The iomap layer still performs every step up through constructing the bio as if it will be submitted, but instead invokes completion on the bio directly from submit context. The purpose of this is to facilitate filesystem metadata performance testing without the overhead of actual data I/O. Signed-off-by: Brian Foster --- fs/iomap/buffered-io.c | 21 +++++++++++++-------- include/linux/iomap.h | 1 + 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index b6d176027887..5d1c443a6fb4 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -46,11 +46,16 @@ static struct bio_set iomap_ioend_bioset; /* * Simple submit_bio() wrapper. Set ->bi_status to trigger error completion. */ -static inline int iomap_submit_bio(struct bio *bio, bool wait) +static inline int iomap_submit_bio(const struct iomap *iomap, struct bio *bio, + bool wait) { - int ret = 0; + int ret = 0; + bool nosubmit = iomap->flags & IOMAP_F_NOSUBMIT; + + if (nosubmit) + zero_fill_bio_iter(bio, bio->bi_iter); - if (bio->bi_status) + if (bio->bi_status || nosubmit) bio_endio(bio); else if (wait) ret = submit_bio_wait(bio); @@ -428,7 +433,7 @@ static loff_t iomap_readpage_iter(const struct iomap_iter *iter, unsigned int nr_vecs = DIV_ROUND_UP(length, PAGE_SIZE); if (ctx->bio) - iomap_submit_bio(ctx->bio, false); + iomap_submit_bio(iomap, ctx->bio, false); if (ctx->rac) /* same as readahead_gfp_mask */ gfp |= __GFP_NORETRY | __GFP_NOWARN; @@ -481,7 +486,7 @@ int iomap_read_folio(struct folio *folio, const struct iomap_ops *ops) folio_set_error(folio); if (ctx.bio) { - iomap_submit_bio(ctx.bio, false); + iomap_submit_bio(&iter.iomap, ctx.bio, false); WARN_ON_ONCE(!ctx.cur_folio_in_bio); } else { WARN_ON_ONCE(ctx.cur_folio_in_bio); @@ -554,7 +559,7 @@ void iomap_readahead(struct readahead_control *rac, const struct iomap_ops *ops) iter.processed = iomap_readahead_iter(&iter, &ctx); if (ctx.bio) - iomap_submit_bio(ctx.bio, false); + iomap_submit_bio(&iter.iomap, ctx.bio, false); if (ctx.cur_folio) { if (!ctx.cur_folio_in_bio) folio_unlock(ctx.cur_folio); @@ -682,7 +687,7 @@ static int iomap_read_folio_sync(loff_t block_start, struct folio *folio, bio_init(&bio, iomap->bdev, &bvec, 1, REQ_OP_READ); bio.bi_iter.bi_sector = iomap_sector(iomap, block_start); bio_add_folio_nofail(&bio, folio, plen, poff); - return iomap_submit_bio(&bio, true); + return iomap_submit_bio(iomap, &bio, true); } static int __iomap_write_begin(const struct iomap_iter *iter, loff_t pos, @@ -1686,7 +1691,7 @@ static int iomap_submit_ioend(struct iomap_writepage_ctx *wpc, int error) if (error) wpc->ioend->io_bio.bi_status = errno_to_blk_status(error); - iomap_submit_bio(&wpc->ioend->io_bio, false); + iomap_submit_bio(&wpc->iomap, &wpc->ioend->io_bio, false); wpc->ioend = NULL; return error; diff --git a/include/linux/iomap.h b/include/linux/iomap.h index 6fc1c858013d..8d34ec240e12 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -64,6 +64,7 @@ struct vm_fault; #define IOMAP_F_BUFFER_HEAD 0 #endif /* CONFIG_BUFFER_HEAD */ #define IOMAP_F_XATTR (1U << 5) +#define IOMAP_F_NOSUBMIT (1U << 6) /* * Flags set by the core iomap code during operations: From patchwork Wed Apr 10 14:09:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brian Foster X-Patchwork-Id: 13624638 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AB55D160785 for ; Wed, 10 Apr 2024 14:08:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712758085; cv=none; b=a+WT94onmOtzBsiWGTKeCg7fg9cJJj4k58KM/S821hg5JBLjRHm6gh6ITICyu/1Gw0ZMjvuoU3JrbRlK8mTUzhF2j0bW4dpotzqjsjYb/snKbCZfvfS40MZue21TU56fa0VUWUrflBq+i1Nk2kOg/Zty5CmA0LGTB+dtaWy10zs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712758085; c=relaxed/simple; bh=ri5AZA4mbK3RIJnux+Xf8d/Y9xH374dYBYnYZywZ0dE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=t4nmeZCqsJ+XncfmWHGsJ8vhSMOuDi6KJyIdYXk3B+3vCaw5qKt/Jke5lyacDH7UdosguXA1auGP01YECkaXgOTbvqQaUjkIGecUwPc5NWqYjm3cIPlwe0WYWoS9UXYfSSWF+YvRgtvaZl94AMVv5dfrVEDUs8PSyL0A4pKETbE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=YRiqbFKz; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="YRiqbFKz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1712758082; h=from:from: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; bh=mu5jpb4jGfIz7UjQi3xXez8XnkOyJKaDfm8FXlXtXds=; b=YRiqbFKzSm4QSE+Np0qXHxBdfYABH/65Eq+ZmBuCHCrVUE0i7ssyEvjz5Aovru1QjIDavq c4VZ4E2OLEhTMc/Hx/52nUpDCLP4goaknOnsBdEE9OMIlUEExGLdEqAqtuEO2Hzt5GN2YJ WQ0a3mQbgXqZJhUMvLSZFjArjsUVlYo= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-547-PiWRkjjbPPmh-1ttc0oBHQ-1; Wed, 10 Apr 2024 10:07:59 -0400 X-MC-Unique: PiWRkjjbPPmh-1ttc0oBHQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 96E1A385A185; Wed, 10 Apr 2024 14:07:58 +0000 (UTC) Received: from bfoster.redhat.com (unknown [10.22.16.57]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6ACC81C060D1; Wed, 10 Apr 2024 14:07:58 +0000 (UTC) From: Brian Foster To: linux-bcachefs@vger.kernel.org, linux-xfs@vger.kernel.org Cc: Kent Overstreet Subject: [PATCH RFC 3/3] xfs: add nodataio mount option to skip all data I/O Date: Wed, 10 Apr 2024 10:09:56 -0400 Message-ID: <20240410140956.1186563-4-bfoster@redhat.com> In-Reply-To: <20240410140956.1186563-1-bfoster@redhat.com> References: <20240410140956.1186563-1-bfoster@redhat.com> Precedence: bulk X-Mailing-List: linux-xfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.7 When mounted with nodataio, add the NOSUBMIT iomap flag to all data mappings passed into the iomap layer. This causes iomap to skip all data I/O submission and thus facilitates metadata only performance testing. For experimental use only. Only tested insofar as fsstress runs for a few minutes without blowing up. Signed-off-by: Brian Foster --- fs/xfs/xfs_iomap.c | 3 +++ fs/xfs/xfs_mount.h | 2 ++ fs/xfs/xfs_super.c | 6 +++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 4087af7f3c9f..9b71a649e106 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -101,6 +101,9 @@ xfs_bmbt_to_iomap( struct xfs_mount *mp = ip->i_mount; struct xfs_buftarg *target = xfs_inode_buftarg(ip); + if (xfs_has_nodataio(mp)) + iomap_flags |= IOMAP_F_NOSUBMIT; + if (unlikely(!xfs_valid_startblock(ip, imap->br_startblock))) { xfs_bmap_mark_sick(ip, XFS_DATA_FORK); return xfs_alert_fsblock_zero(ip, imap); diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index e880aa48de68..fd8a5b46d449 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -294,6 +294,7 @@ typedef struct xfs_mount { #define XFS_FEAT_NREXT64 (1ULL << 26) /* large extent counters */ /* Mount features */ +#define XFS_FEAT_NODATAIO (1ULL << 47) /* skip all data I/O */ #define XFS_FEAT_NOATTR2 (1ULL << 48) /* disable attr2 creation */ #define XFS_FEAT_NOALIGN (1ULL << 49) /* ignore alignment */ #define XFS_FEAT_ALLOCSIZE (1ULL << 50) /* user specified allocation size */ @@ -363,6 +364,7 @@ __XFS_HAS_FEAT(large_extent_counts, NREXT64) * bit inodes and read-only state, are kept as operational state rather than * features. */ +__XFS_HAS_FEAT(nodataio, NODATAIO) __XFS_HAS_FEAT(noattr2, NOATTR2) __XFS_HAS_FEAT(noalign, NOALIGN) __XFS_HAS_FEAT(allocsize, ALLOCSIZE) diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index bce020374c5e..1fb24b5ba684 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -103,7 +103,7 @@ enum { Opt_filestreams, Opt_quota, Opt_noquota, Opt_usrquota, Opt_grpquota, Opt_prjquota, Opt_uquota, Opt_gquota, Opt_pquota, Opt_uqnoenforce, Opt_gqnoenforce, Opt_pqnoenforce, Opt_qnoenforce, - Opt_discard, Opt_nodiscard, Opt_dax, Opt_dax_enum, + Opt_discard, Opt_nodiscard, Opt_dax, Opt_dax_enum, Opt_nodataio, }; static const struct fs_parameter_spec xfs_fs_parameters[] = { @@ -148,6 +148,7 @@ static const struct fs_parameter_spec xfs_fs_parameters[] = { fsparam_flag("nodiscard", Opt_nodiscard), fsparam_flag("dax", Opt_dax), fsparam_enum("dax", Opt_dax_enum, dax_param_enums), + fsparam_flag("nodataio", Opt_nodataio), {} }; @@ -1385,6 +1386,9 @@ xfs_fs_parse_param( xfs_fs_warn_deprecated(fc, param, XFS_FEAT_NOATTR2, true); parsing_mp->m_features |= XFS_FEAT_NOATTR2; return 0; + case Opt_nodataio: + parsing_mp->m_features |= XFS_FEAT_NODATAIO; + return 0; default: xfs_warn(parsing_mp, "unknown mount option [%s].", param->key); return -EINVAL;