From nobody Fri Oct 2 01:13:04 2026 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBECE477999 for ; Thu, 6 Aug 2026 15:07:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786028881; cv=none; b=McYXXGhJJhxK68ug+a5j0jP6Hs8UlY2tdS8oGWmyvlMk6rFZDGA9lZFEpEz69ZcX4w2XBYTA2QAle9gXnTJI1DZPmGhzRaprAb82nWm8Cjk8oWAHVxR9/jNn0bTnrkpDIOMTpdPl/jT5RYIFjEI6TfiUDud51uzP+D3H85z6w+w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786028881; c=relaxed/simple; bh=0zrMYxSMhaThczxTgCByMGicoQTsqaXXBVtQKg1iPIs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dc94b54mIeCTck1OE28rQkdb/JFj69DHJViEHCbz/D2axAeGm+PoMQ09TngUOdhG7gNFaUk/UMW5ue0RjeSLG0t2gSG5qj4mbHqIOWBR+WcSrDu4pxInqVWU8ZD9g46zoEqtw8TjEefCvlRxumqyfG3MGH7NzLpmf2JdJtvfxi0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mfCs3x8W; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mfCs3x8W" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-84e27035206so1833501b3a.3 for ; Thu, 06 Aug 2026 08:07:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786028879; x=1786633679; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=lCUbhf58OXMKxvyQq8OhGP2VvNKpXfUqOMR0IN6rf2U=; b=mfCs3x8WOnV65Hspxd+6hh0DOZhjnGplyVwew/2R4pv70ya4RbLxE/V/AwfOUQ2cU1 7UH0E7h+E3ediU0e6n/E+04MLqgUJxoUDuDlvd/5JdVx7pUdnKcXXbifNYvDWbawyHT3 wpVHQ7ECifRVqDk9l8DnaidFRs9Kt0oQvCYWa1nG0U3xTveRVVAgMsIOjEz+1NKxBqKn cSwU9jjGW6QxvV8O3ofk32J3e2mJhCSDD1EN4Gs3iKfskAn/08tu8vcfnYWO2zJaEkPg MA5IYW79VbZ+usxSjqW8F9ZKPm6+LL6sSVHrWbzH5vURlZkYZhdjhufBvc8sLyf5c2II 5dMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786028879; x=1786633679; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=lCUbhf58OXMKxvyQq8OhGP2VvNKpXfUqOMR0IN6rf2U=; b=TYBOzEoRRhdNUvS3jWHPulxjb2DlYLJ/dGiV9O4sqiP4GunK4Sab7beviHloBezmwW kWUt4AcEoSgCrpEafCFA112z0e1hoHkA18ezlYDh0WPdaeirkVFr/9ch/LOnmL9yrIT5 mbqvnV3CT/ymFq84Se36CIins9Nbpx7h1hAyadc7mr/QfH8uJb/+8LQWZfMGPquhl9mV 7cF4Kq8Izkdow/Get5o7J0X6GHZIT6fZ6r1TKVgvil28w6c3I0VQPTJKeTk9yNwKrjbs YmhXvCwfT25W1eu2NKIEbSf+3RvE+WW0AnruwOHCSNu5PLtsV7TQL6hIVIT2XqHXL3mn eNcg== X-Forwarded-Encrypted: i=1; AHgh+RpWip0eArTX4RvCczNjJtcDcSOeJYeZaqToVuAEB9Ir5GaGeIEW+5UpQrhV4L1VXJAcJ/kpxJKK20fb4Ro=@vger.kernel.org X-Gm-Message-State: AOJu0Yy5pojvSJbxiNXD8G2S0NxdsNk3W5ceRuCvnKGO7i5DfXnxeemD UUl0lPCCuDSpAXZid81bXvf9ULdKfDyazWp+k1cxRAXnCsd9H2PaigR9 X-Gm-Gg: AR+sD13e9aU5S5TmRLFvIzmLDtVwH4AF+46B2xtx7Gc/1mVrUtq8zFGQIYZ625wk+Ku tNWgb1AYh/4Ht0eVLhLeYvaVLe1BsU6yE4Yuo1XDKVNSXwUOh1cTqAG1Q0iVkLoS2UDOHF9pv5v bsSGlRjZGRbOaTrLhBjxKwOkql48W26l+I6aZaTf9G4QvCwBlBGF/mFSI25sUpGuSm9HzFJp/rd GNeqcMZJ/Hh7qesqg/bQRZo7iOzB85yLwt+SERgsEOOPgvQq3ZwrK/k1fP71Zhf+fBFw2bXk+Lt 1IuXLBO1T8xI1qkisbFCJpST7FLFNIms9u2T4oxhMMuBuEclxtFreJ51lXWkmsDPNmVq/z/AlKX MiBNHyIqmwrv+75Rk017TluYcJEIjntO6K7MclSWtIh3iwL4Z6lTnbUqBqqgRllA2H7qsIOFcxW BNkY/Skv0zIWwfWlUrRwxFp+GGzTr6xLKHGXHAiVizN0QA61zCtAsI+DIEFU57cLWITLxSNvamV gTTPBhKGFFoZj64Thx7avMv X-Received: by 2002:a05:6a00:14ca:b0:845:3fea:96c with SMTP id d2e1a72fcca58-84f2e017155mr16933169b3a.21.1786028878731; Thu, 06 Aug 2026 08:07:58 -0700 (PDT) Received: from qiwenjie-ThinkCentre-M760t.mioffice.cn ([43.224.245.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84f45bc9c6bsm1586448b3a.56.2026.08.06.08.07.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2026 08:07:58 -0700 (PDT) From: Wenjie Qi X-Google-Original-From: Wenjie Qi To: jaegeuk@kernel.org, chao@kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org, qiwenjie@xiaomi.com, qwjhust@gmail.com Subject: [RFC PATCH 1/2] f2fs: keep dropbehind write bios task-context safe Date: Thu, 6 Aug 2026 23:07:46 +0800 Message-ID: <20260806150748.3554436-2-qiwenjie@xiaomi.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260806150748.3554436-1-qiwenjie@xiaomi.com> References: <20260806150748.3554436-1-qiwenjie@xiaomi.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Keep dropbehind folios in dropbehind-only write bios so ordinary and dropbehind writes do not share the same completion policy. If a dropbehind bio completes outside task context, defer its completion to the existing sbi->wq worker before folio_end_writeback() runs. Other bios keep the existing completion path. Signed-off-by: Wenjie Qi --- fs/f2fs/data.c | 54 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 30e8084..8a1e407 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -43,9 +43,20 @@ struct f2fs_folio_state { =20 struct f2fs_bio { struct work_struct work; + bool dropbehind; struct bio bio; }; =20 +static inline struct f2fs_bio *f2fs_bio_to_f2bio(struct bio *bio) +{ + return container_of(bio, struct f2fs_bio, bio); +} + +static inline bool f2fs_write_folio_is_dropbehind(const struct f2fs_io_inf= o *fio) +{ + return fio->folio && folio_test_dropbehind(fio->folio); +} + #define F2FS_BIO_POOL_SIZE NR_CURSEG_TYPE =20 int __init f2fs_init_bioset(void) @@ -418,6 +429,15 @@ static void f2fs_write_end_io_work(struct work_struct = *work) f2fs_write_end_bio(bio); } =20 +static void f2fs_queue_write_end_io(struct f2fs_sb_info *sbi, struct bio *= bio) +{ + struct work_struct *work =3D &container_of(bio, struct f2fs_bio, + bio)->work; + + INIT_WORK(work, f2fs_write_end_io_work); + queue_work(sbi->wq, work); +} + static void f2fs_write_end_io(struct bio *bio) { struct f2fs_sb_info *sbi; @@ -426,15 +446,15 @@ static void f2fs_write_end_io(struct bio *bio) =20 sbi =3D bio->bi_private; =20 - if (in_atomic() && bio->bi_iter.bi_size > sbi->max_atc_write_bio_size) { - struct work_struct *w; + if (f2fs_bio_to_f2bio(bio)->dropbehind && !in_task()) { + f2fs_queue_write_end_io(sbi, bio); + return; + } =20 - w =3D &container_of(bio, struct f2fs_bio, bio)->work; - INIT_WORK(w, f2fs_write_end_io_work); - queue_work(sbi->wq, w); - } else { + if (in_atomic() && bio->bi_iter.bi_size > sbi->max_atc_write_bio_size) + f2fs_queue_write_end_io(sbi, bio); + else f2fs_write_end_bio(bio); - } } =20 #ifdef CONFIG_BLK_DEV_ZONED @@ -530,6 +550,7 @@ static struct bio *__bio_alloc(struct f2fs_io_info *fio= , int npages) bio =3D bio_alloc_bioset(bdev, npages, fio->op | fio->op_flags | f2fs_io_flags(fio), GFP_NOIO, &f2fs_bioset); + f2fs_bio_to_f2bio(bio)->dropbehind =3D false; bio->bi_iter.bi_sector =3D sector; if (is_read_io(fio->op)) { bio->bi_end_io =3D f2fs_read_end_io; @@ -796,6 +817,7 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio) =20 /* Allocate a new bio */ bio =3D __bio_alloc(fio, 1); + f2fs_bio_to_f2bio(bio)->dropbehind =3D f2fs_write_folio_is_dropbehind(fio= ); =20 f2fs_set_bio_crypt_ctx(bio, fio_folio->mapping->host, fio_folio->index, fio, GFP_NOIO); @@ -1010,6 +1032,7 @@ int f2fs_merge_page_bio(struct f2fs_io_info *fio) struct folio *data_folio =3D fio->encrypted_page ? page_folio(fio->encrypted_page) : fio->folio; struct folio *folio =3D fio->folio; + bool is_dropbehind =3D f2fs_write_folio_is_dropbehind(fio); =20 if (!f2fs_is_valid_blkaddr(fio->sbi, fio->new_blkaddr, __is_meta_io(fio) ? META_GENERIC : DATA_GENERIC)) @@ -1017,17 +1040,24 @@ int f2fs_merge_page_bio(struct f2fs_io_info *fio) =20 trace_f2fs_submit_folio_bio(data_folio, fio); =20 - if (bio && !page_is_mergeable(fio->sbi, bio, *fio->last_block, - fio->new_blkaddr)) + if (bio && (f2fs_bio_to_f2bio(bio)->dropbehind !=3D is_dropbehind || + !page_is_mergeable(fio->sbi, bio, *fio->last_block, + fio->new_blkaddr))) f2fs_submit_merged_ipu_write(fio->sbi, &bio, NULL); alloc_new: if (!bio) { bio =3D __bio_alloc(fio, BIO_MAX_VECS); + f2fs_bio_to_f2bio(bio)->dropbehind =3D is_dropbehind; f2fs_set_bio_crypt_ctx(bio, folio->mapping->host, folio->index, fio, GFP_NOIO); =20 add_bio_entry(fio->sbi, bio, data_folio, fio->temp); } else { + if (f2fs_bio_to_f2bio(bio)->dropbehind !=3D is_dropbehind) { + f2fs_submit_merged_ipu_write(fio->sbi, &bio, NULL); + goto alloc_new; + } + if (add_ipu_page(fio, &bio, data_folio)) goto alloc_new; } @@ -1073,6 +1103,7 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio) struct folio *bio_folio; struct f2fs_lock_context lc; enum count_type type; + bool is_dropbehind; =20 f2fs_bug_on(sbi, is_read_io(fio->op)); =20 @@ -1100,6 +1131,7 @@ next: } =20 verify_fio_blkaddr(fio); + is_dropbehind =3D f2fs_write_folio_is_dropbehind(fio); =20 if (fio->encrypted_page) bio_folio =3D page_folio(fio->encrypted_page); @@ -1115,7 +1147,8 @@ next: inc_page_count(sbi, type); =20 if (io->bio && - (!io_is_mergeable(sbi, io->bio, io, fio, io->last_block_in_bio, + (f2fs_bio_to_f2bio(io->bio)->dropbehind !=3D is_dropbehind || + !io_is_mergeable(sbi, io->bio, io, fio, io->last_block_in_bio, fio->new_blkaddr) || !f2fs_crypt_mergeable_bio(io->bio, fio_inode(fio), bio_folio->index, fio))) @@ -1123,6 +1156,7 @@ next: alloc_new: if (io->bio =3D=3D NULL) { io->bio =3D __bio_alloc(fio, BIO_MAX_VECS); + f2fs_bio_to_f2bio(io->bio)->dropbehind =3D is_dropbehind; f2fs_set_bio_crypt_ctx(io->bio, fio_inode(fio), bio_folio->index, fio, GFP_NOIO); io->fio =3D *fio; --=20 2.43.0 From nobody Fri Oct 2 01:13:04 2026 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9E27479897 for ; Thu, 6 Aug 2026 15:08:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786028885; cv=none; b=qoOqF1cBR2yniK1Yb1h9+R0ZDdIcbbYxrtgTKsiPWB1f38J5drT8lrpLPIb5Am/UbTFURSZp0QQHZVb5eKVcxCrxw8jPKnK2cY6ECYmTfobxPgMYYoUwskLUPryX5TNSnm3m0x9fIiMrqi63U83WTqJDn0g6pXj95D2l8jHrJk8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786028885; c=relaxed/simple; bh=heg64wOjTJd3lbxF34kg4DTNtA6690z3JiDsoQ70R0g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jXrrYiGys7gibvLdc2/+mApJKrCq4/5pqxCkX1Q/9mNavOQ6RQtJRCtl5P5qikcCeK+XrEpypDkHOvnBjbNumD7MogC1Ejh5wPS60Of25rJdodEYVCttcEu3tIG1wsXdph4hhhj/SzG32RHb0KHGLmPhzCjQSCBpslfuN1OFVQs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ofIrQF8k; arc=none smtp.client-ip=209.85.210.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ofIrQF8k" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-8487b7b3fc8so2730950b3a.3 for ; Thu, 06 Aug 2026 08:08:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786028883; x=1786633683; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=0NhSZMxoocoJBKQ1xqet64wm9X5U1CRxDHknTgi5hq0=; b=ofIrQF8kmLohvRXW4yyMWUoHzaNNi2RKI3pBLGn7PqvNkYTN+7tjmqwBYyNfP2dZM1 HjsvXO0hLb2nzXR13YZmBwmgpEtFON+cqA1SHXgdvJShJNB2lHq9s6+0kzAJCcwkdYcV u+dUXHhrgaxZAIpsQzDFieUjHtTjAbIk/KM1E/GQyzBwvbAeU5zruPHhbzJXAbDBohzh PZX0k0Pb/gCLWrP+0bPeVhf2e7HjQTMQ7ba4DHinXIroE5o85d1txrpXa3bd1aDt5hWZ 9CWUi9tgBFdYNd4R05Ce5FaXT3lFXKPKF0uTBgD625y/OvL9PW5kbehpWoNUcse5iQGU ZCQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786028883; x=1786633683; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=0NhSZMxoocoJBKQ1xqet64wm9X5U1CRxDHknTgi5hq0=; b=SYQU43zxzFWrjh+6votwP9J06SSW0eAv3P8Gkbq8AlZci04k0gzgEP3GDKsKhkKvC/ XjdSwkllgvsbswkZ4j2AHcnBTUh1gujEwsMDqGLWlKS62LDPG1/VL6LbZwBnyz6rCBj0 1fMRk5CQewsLYCRMuJa2eOofpgv6OQc2Rs5JZ8MdVbQb93OFqH1ABOXSmfVszImGtDET Dd55ljWfmf81xbGzdg56erEO5FciO7Blq/psXC6iwvIh+4t4SVRlYKCSwBv2gYQ7KsCp rZ51F1D4gu/EOt7fDjGGggtJtLBMUPHVH5DeAdxB3Cz8SsNR65JBTPR7vLeudzKRjHUY UwhQ== X-Forwarded-Encrypted: i=1; AHgh+RprLctGqb/VbPvYd7jar5AEre/gymH6SCT3j0tSwtWrGewloxBU5pR7xUNR+9+IyBDfFMsSzUJsMj8fIhU=@vger.kernel.org X-Gm-Message-State: AOJu0Yz674n4m0EWhAFjdiL35Jak2MpdbeI3PwMTlCGIQ3cZXmr+3wcI CYrQ8qJGrssRo/zqKNWnm9rFp10At2mFSCMjlC81piaYnyclhTVqRMve X-Gm-Gg: AR+sD121ywtXr9fqcycut0tPQHOMO7j1Q8KifI62gXD35NaWA7g3pczgbQoHFIIE15j cZ79kHVssVMKHWYzuGmlDgGaQoZnglLhPZXfHsMwMMe2SZqjW4ZErQXuO3hpYCXG1KZ6VWUmHzB KMRjEimVWbQO1mqp/w5PpZoRKlfaDEnhOPqMMBEGNFB8WQpAzGOiONMLKlYsTMBLOIHnihguaYz m35o1u0q7pe9891axyHI47j/HQAwD/0p5plr/I8xDXR2QXbWdMRWdsHJD26AuGIEhOUyBHc63eP mZiHkaEsA0qMsHGx3VvJ4rWR3qEXMmLIMf1BlW8BcypyisJbImOZwDav+WQaeMbMMcCbUx3cVEb o/yJcJLMm/aMkn9zjSb/0JU0ObyA8lMtnfs0SL7BNDOzIrIRvKq5yC5BhgwCGKg4n3BD6ctH+zX wpXjcLDagmsRqz/iAtlv7I4dxi8bKoGqEIF/ALJu26KTENT8oKl8OCMwXWskpR1DJuPIx1+tCcs 542TmwkGzCZV6L/+JLhO0cZ X-Received: by 2002:a05:6a00:409b:b0:848:467d:293a with SMTP id d2e1a72fcca58-84f2e12c9e9mr19261659b3a.35.1786028883261; Thu, 06 Aug 2026 08:08:03 -0700 (PDT) Received: from qiwenjie-ThinkCentre-M760t.mioffice.cn ([43.224.245.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84f45bc9c6bsm1586448b3a.56.2026.08.06.08.08.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2026 08:08:02 -0700 (PDT) From: Wenjie Qi X-Google-Original-From: Wenjie Qi To: jaegeuk@kernel.org, chao@kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org, qiwenjie@xiaomi.com, qwjhust@gmail.com Subject: [RFC PATCH 2/2] f2fs: enable buffered RWF_DONTCACHE Date: Thu, 6 Aug 2026 23:07:47 +0800 Message-ID: <20260806150748.3554436-3-qiwenjie@xiaomi.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260806150748.3554436-1-qiwenjie@xiaomi.com> References: <20260806150748.3554436-1-qiwenjie@xiaomi.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Expose FOP_DONTCACHE and propagate IOCB_DONTCACHE to write_begin folio allocation so buffered RWF_DONTCACHE can reach the F2FS write path. The write-side completion and bio-isolation semantics are prepared by the previous patch in this RFC series. Signed-off-by: Wenjie Qi --- fs/f2fs/data.c | 9 ++++++--- fs/f2fs/file.c | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 8a1e407..40c8f7a 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -3982,6 +3982,7 @@ static int f2fs_write_begin(const struct kiocb *iocb, struct f2fs_sb_info *sbi =3D F2FS_I_SB(inode); struct folio *folio; pgoff_t index =3D pos >> PAGE_SHIFT; + fgf_t fgp_flags =3D FGP_LOCK | FGP_WRITE | FGP_CREAT; bool need_balance =3D false; block_t blkaddr =3D NULL_ADDR; int err =3D 0; @@ -4031,9 +4032,11 @@ repeat: * Do not use FGP_STABLE to avoid deadlock. * Will wait that below with our IO control. */ - folio =3D f2fs_filemap_get_folio(mapping, index, - FGP_LOCK | FGP_WRITE | FGP_CREAT, - mapping_gfp_mask(mapping)); + if (iocb && (iocb->ki_flags & IOCB_DONTCACHE)) + fgp_flags |=3D FGP_DONTCACHE; + + folio =3D f2fs_filemap_get_folio(mapping, index, fgp_flags, + mapping_gfp_mask(mapping)); if (IS_ERR(folio)) { err =3D PTR_ERR(folio); goto fail; diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index b99d9cd..b3d1684 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -5578,6 +5578,6 @@ const struct file_operations f2fs_file_operations =3D= { .splice_read =3D f2fs_file_splice_read, .splice_write =3D iter_file_splice_write, .fadvise =3D f2fs_file_fadvise, - .fop_flags =3D FOP_BUFFER_RASYNC, + .fop_flags =3D FOP_BUFFER_RASYNC | FOP_DONTCACHE, .setlease =3D generic_setlease, }; --=20 2.43.0