From nobody Sat Sep 26 07:14:45 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (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 D67624AA01F for ; Thu, 3 Sep 2026 13:00:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788440419; cv=none; b=fwjDZY+teGBwtTZuhSKyO33d4NgeWqSY2c2wXD7KcUh8Szg3DL8cBDAoIVdSMhzLBC5+H9iUSKIeX6MLQPkvNXiIBG5sw3b5Vg+8b+Fv7Jx7O/P6Yjb9kR30fzZng5k+yB5XLe7ypPggE2/HfixSeUJo4Tpgib+tbO/EDdsV4WU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788440419; c=relaxed/simple; bh=06+qffQcwEwALMxBLy9dFemvnbiaogYHvKparT5EmWo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Et2st3Zrm7pez4yQAittXuu6eTtsZV2jlKocCBLIbCXbOFCELUHjZO+8JFAcIER8SOwFK59rwboKXirNg94ihHhldnKrRe4bZPut+sFGpwP+SEaHvxEHmx3jTCqPOU4N1pPJQInsJ7GrrQJNPg+527HHGNP4YxgULxpLOhKCumM= 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=VbSt71qi; arc=none smtp.client-ip=209.85.210.169 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="VbSt71qi" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-84f38f3b36eso1980685b3a.1 for ; Thu, 03 Sep 2026 06:00:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788440411; x=1789045211; 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=aNUKKLqZvrANPeHHYmjPL7ok/64poHS/mGT0EIbK468=; b=VbSt71qib43/2Tbef1LbeD/M8nDsImuyJRUhYtQTC6SWYMDYP0LR0xOxPnmuhhWgZv XU7P+gBE93KxjOsk0RT9majmDglzcbbPIDvaGkyvKCrIcOATUivGlMJVI3k85JRIB9ek yj9oNQgxUQxCw+zefldFKJSlD01AyBmlLsxa2czGCBipDZoqThrwPYZc+odDQdPScw89 YyjaBDgpSiDybbByDYhNCL5a0OEEC7cYKSL5xPiaCxK+/R8STC/qpXpl4Zisi7+/V2zW caJOBEM6KIpsZr/8WvvI3rpnQt1GLfoE+JCKpUr7s6oAuZdDpidH4eMuTh0TJY59KpYb CTIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788440411; x=1789045211; 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=aNUKKLqZvrANPeHHYmjPL7ok/64poHS/mGT0EIbK468=; b=X21ca0VZPzwMz/MLF2BXC2JoOGOoYEZsFjFAmmoWL9e4KP/0X4vj12RTVVo7a04uFm 07hbsk4NSlYheugWe+EVwoIaxDOqBJNmaHqVsCY5VqtmjlF4KEIWqKpXw8KjTV0WuLQT KhYvQFQVPCML/x+NtYbMqrdRBSrwUk3dVFtAca12PtH7BAYj4ZbFgt6DE0WMjqy8hQAz F50kGXRjfnFL7lOsJROOzGdF/WZJNanYcvPdsCGHnTtIeg0X+0EeES1R03WStETAp3ij L81b0GqNQOpmffO46J05eqbOv2cJfGhuWtLBtHcH/EPm4M8xfLBdcv6nuUg63tDI2kes 5b9g== X-Forwarded-Encrypted: i=1; AKwUvByFdcYSrQ+EsERgrj+WPxezDonkJlyxLrXDzkcXA3F8ocHEwXhmCFuDnTMXaUoFTM3ndvmn9Xsy9un3LFY=@vger.kernel.org X-Gm-Message-State: AFuF++kWSrQA8wJWogaP9Zl4YPZyZwNRQ/PsWkWaJ2lKXxwr6fiR0F4R I2CCIuJcfSamtE3WKMl3PCbHi77hK8qjc5SFmV8iL6G1twWqtxdfD3PR X-Gm-Gg: AYBFou232V1quDcflmkpIlfOK//E6s5Vre+QlWPxi95qJZGgNRV+z92cH09kYMT0dRm Y7vqLI0iC+SHe2wAKWcYJIPoQBsUAueDmU93EslKW/uA820xjOx6es7uqePr9tNdBCZYGxGNwtD vPTKesNxCsNy9fHQ9iVJl1FtdOffwzriPqbw6zAZtfA8yzJFhO3EGRUdJl1ia15diImbR4+DE+T 99EN3wS0hEx74E9sd3k7Syw2WnNkuHISy0dJacjVzPW8rOIaOk3dbGiaEOLUnFgGnws6PEgl3l2 RjQjqIiWfjKk2mIcjW4gaIynX+HvNA3V7OD78SZalBzJ68nIaJ7AShyAu7UVFTPYYOM/q7cckIJ 1xV+CL+B2jSRw0d77Rc6jTOEHq/KVg99B5LnkQvPh4eEGnwZjJUZWeEUg42tYJ2jl8oAph2sSqs qlv2PZkwh/+p1t2SrrzGFvkdHPCAGYz/bsoYyVxvO/PvZpbGDRxZ6I0SsZAE9FH8KRjl5xqbjie oqhKUVVjsqi3itiBfSlFJpm X-Received: by 2002:a05:6a00:1408:b0:852:3726:dfde with SMTP id d2e1a72fcca58-85ed25e2492mr15794500b3a.9.1788440410410; Thu, 03 Sep 2026 06:00:10 -0700 (PDT) Received: from qiwenjie-ThinkCentre-M760t.mioffice.cn ([43.224.245.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-85db23f7bccsm2980946b3a.10.2026.09.03.06.00.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 06:00:09 -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, hch@lst.de, jack@suse.cz, axboe@kernel.dk, tz2294@columbia.edu, baohua@kernel.org, linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, qiwenjie@xiaomi.com, qwjhust@gmail.com Subject: [PATCH v4 1/2] f2fs: complete dropbehind write bios in task context Date: Thu, 3 Sep 2026 20:59:52 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: 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" Buffered RWF_DONTCACHE writes invalidate dropbehind folios at writeback completion. Mark these bios BIO_COMPLETE_IN_TASK so the block layer runs F2FS completion in task context when needed. Use the same flag to keep normal and dropbehind folios from merging in the IPU and OPU paths. Classify the original page-cache folio rather than an encrypted or compressed replacement folio. Keep the existing large-ATC completion path unchanged. Signed-off-by: Wenjie Qi --- fs/f2fs/data.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 21f396ebe22..b0fedacfd12 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -503,6 +503,8 @@ 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); + if (!is_read_io(fio->op) && folio_test_dropbehind(fio->folio)) + bio_set_flag(bio, BIO_COMPLETE_IN_TASK); bio->bi_iter.bi_sector =3D sector; if (is_read_io(fio->op)) { bio->bi_end_io =3D f2fs_read_end_io; @@ -793,6 +795,13 @@ static bool page_is_mergeable(struct f2fs_sb_info *sbi= , struct bio *bio, return bio->bi_bdev =3D=3D f2fs_target_device(sbi, cur_blkaddr, NULL); } =20 +static bool f2fs_bio_dropbehind_mergeable(struct bio *bio, + struct f2fs_io_info *fio) +{ + return bio_flagged(bio, BIO_COMPLETE_IN_TASK) =3D=3D + folio_test_dropbehind(fio->folio); +} + static bool io_type_is_mergeable(struct f2fs_bio_info *io, struct f2fs_io_info *fio) { @@ -985,8 +994,10 @@ 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 && + (!page_is_mergeable(fio->sbi, bio, *fio->last_block, + fio->new_blkaddr) || + !f2fs_bio_dropbehind_mergeable(bio, fio))) f2fs_submit_merged_ipu_write(fio->sbi, &bio, NULL); alloc_new: if (!bio) { @@ -1086,7 +1097,8 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio) (!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))) + bio_folio->index, fio) || + !f2fs_bio_dropbehind_mergeable(io->bio, fio))) __submit_merged_bio(io); alloc_new: if (io->bio =3D=3D NULL) { --=20 2.43.0 From nobody Sat Sep 26 07:14:45 2026 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 83D104A99DF for ; Thu, 3 Sep 2026 13:00:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788440426; cv=none; b=JdqC/qKGaCRkcHHbIMRcqUci4ytdBK8HBVoLJGZOSX0AIoyiVUI/NnZWAQ5rLG1BM3glQQxqlXOHDDbp34HpilZBv5igRPbfEX2OCqGYiXf1ob/4lsOBU9twQUM1VQp+oXLlaamstuIRf7+Amtwt/tgRWIC4Z3B79Wq5WCNlk+s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788440426; c=relaxed/simple; bh=jIu+OlxanokFLSfiquBpo8YXaj6PW7O81zppVlD1xwQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rTqVu3uY3KlO577svGT+O+pw3jmrdl8YiAUoioMftj0ivnpVWsdIxFbwNPuEQC62E53Whj8+VsFTqeOb/8jadIAxLgmqorrLf8f5mSRCbKT3Vvi5j60NtmJX3ftOA8eoVVxMUH2jHs0jdGp4Qj6cfolr+l+QAAQ4szBE/Lx9wV4= 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=Mma0Uzwk; arc=none smtp.client-ip=209.85.210.175 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="Mma0Uzwk" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-853c401326eso1435637b3a.2 for ; Thu, 03 Sep 2026 06:00:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788440419; x=1789045219; 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=A7QKH2r7d66SxSFJm8bjz6ZBcyuRFjzyujOBEDXlc4U=; b=Mma0UzwkG8xdTwfb5jJvwaqAGSgzGlon5iJSbIfZHE7aOiBS5BkrAAGIdtXw+ZZnJI bsMOnhT/8Dt4ESWQCNeabTfU6DJH6nDwYZfiAbp7doDCbdly05zXPw6Mt1DbWq2x168p 9t1vu0CxqB8uhPQxRQIhW3U1HACEsgRD3FD5aJE8X2l+8uWcY2uCpTDO3BwkB4//R3Wk V8shx2IszUFho3C+p1s/mM5TpAxsN25aw6jXfKPxE1McPCSR+1BQmgFI0HvqEmQYf8Qg b0dkYmFG4cSwWOAJdxd6OKyj9gUYQlCEnCykWDfcgGTpYasySjS1TVHHgLGYtloWzShM EZEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788440419; x=1789045219; 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=A7QKH2r7d66SxSFJm8bjz6ZBcyuRFjzyujOBEDXlc4U=; b=ESfuI/1/ZOXrPIsfvWhljGu4o+IbCOmFUMdG+/bjRpvU3UDBSiBI+I2P3uWrybscFJ sh0zKuRFyY6oK2Y/127RlZk0+1AEfP7tPIfYhU6AaEZqStWuaGfQAXxV1J6ZpjoFuZZQ 6IdeFVsgayGgPP24GchNCCAJYdULPw4L6dVoGnCvNWNLB9k7I/VCWLReBQdtq/CYA3/V EaaqWbqv5EmGurHlEVkVnYUOYd4lTnDeKHn+SyHYx8a9fh8HUXGFyuMHq4iPrekvQSP1 b4XSuDh0Fs+zw8Su+mmLCB0xJ05+uabEquLPlyQ9j7ca0VfElUbtF3mb7SB7D5Q99dDy Rqpg== X-Forwarded-Encrypted: i=1; AKwUvBx7/V8xSL0B8d5ErjN/rMGFoHGb9Y7AkMbFgo0SubG3CNfJRaurkPZeljVzFoAspncibMT2v7gq9jTp6bA=@vger.kernel.org X-Gm-Message-State: AFuF++k0DdIqpVvyFYuUC/pHlOBiErolaG/BEq0VVh+LHeG6xkE+SCx2 DAdRmAxE9BLFlHN585/ec34L2abDZ+SaoXfX2k9r4ws8xBYDuJCE7ftp X-Gm-Gg: AYBFou0MqO+qVu4ujMDoyMeCBhaAo+AIrNB5QH7PuOqNzwfwAmWODaccWoZSaB45r8p d21wwN8XUMtehN5vdNuC7y9KwO8QIHYFg0tRN6tEgANOU+aiU/zQfMFDGVenJll/5wjgDYbSssj Dr35E+zvxv3DXKwxy5xYzS+MMmVHwhAkc8drngCTDFTrL5jk/d+A5+EcytTWw4dY4jaNvhDxgLG 4UrX4XghEA2oVHs9z29jM8JkEi0xteQsW3bJOS4vIE3grx9X5qeQqq3lGPuzKnmveE8lGA6QUFt S4FEMQ4krM+Xsdf8K5EF4QAGsKfSmoXiazYNWstCF3qbQ4uD4zovYzn9I4m9/NNcxhs4+wB6R3T 1wkdJham57+s08Bv/hbFXhMWrfmcOg6izuNV8dtMK+ZgOIfSkzX8UARyXHKdmhqZT2JTVJxHTV9 L7gvC/eHjVvCU+j/26OkdP9Ro1Cx+7G03o6NMLDYPUKWxRby8Q9C47So1ZbwaWcJhY/s2zvv0lW EUgpRm+ohfMf4SefZeVHXtp X-Received: by 2002:a05:6a00:1a0d:b0:85f:4255:59a8 with SMTP id d2e1a72fcca58-85f42557303mr14081961b3a.10.1788440419002; Thu, 03 Sep 2026 06:00:19 -0700 (PDT) Received: from qiwenjie-ThinkCentre-M760t.mioffice.cn ([43.224.245.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-85db23f7bccsm2980946b3a.10.2026.09.03.06.00.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 06:00:16 -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, hch@lst.de, jack@suse.cz, axboe@kernel.dk, tz2294@columbia.edu, baohua@kernel.org, linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, qiwenjie@xiaomi.com, qwjhust@gmail.com Subject: [PATCH v4 2/2] f2fs: enable buffered RWF_DONTCACHE Date: Thu, 3 Sep 2026 20:59:53 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: 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" Pass FGP_DONTCACHE to f2fs_filemap_get_folio() for IOCB_DONTCACHE writes and advertise FOP_DONTCACHE. Keep the F2FS-specific lookup because write_begin_get_folio() adds FGP_STABLE, which can deadlock here. 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 b0fedacfd12..6e816c9349a 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -3884,11 +3884,15 @@ static int f2fs_write_begin(const struct kiocb *ioc= b, struct inode *inode =3D mapping->host; struct f2fs_sb_info *sbi =3D F2FS_I_SB(inode); struct folio *folio; + fgf_t fgp_flags =3D FGP_LOCK | FGP_WRITE | FGP_CREAT; pgoff_t index =3D pos >> PAGE_SHIFT; bool need_balance =3D false; block_t blkaddr =3D NULL_ADDR; int err =3D 0; =20 + if (iocb->ki_flags & IOCB_DONTCACHE) + fgp_flags |=3D FGP_DONTCACHE; + trace_f2fs_write_begin(inode, pos, len); =20 if (!f2fs_is_checkpoint_ready(sbi)) { @@ -3934,9 +3938,8 @@ static int f2fs_write_begin(const struct kiocb *iocb, * 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)); + 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 edc352569e8..570244ae4fc 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -5909,6 +5909,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