From patchwork Sat Mar 2 07:41:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ritesh Harjani (IBM)" X-Patchwork-Id: 209185 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp360316dyc; Fri, 1 Mar 2024 23:43:33 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCW6QLkknUrNc1eFX0ZiklDWhZuSbWNcw/P79RldeyrOwGD/pAnw+FrGRJjXY8mYVJXOGINyU3Zh4JHcLh/mfXAclP68BA== X-Google-Smtp-Source: AGHT+IFBRcA87o2Ymc3cgGR3IDnNeiH1fw6UBqzrWV8wJ2hCIh1L6PS4oaBrST2JaoXGbZ4HkTgA X-Received: by 2002:a17:906:ecaf:b0:a43:3fa8:21ad with SMTP id qh15-20020a170906ecaf00b00a433fa821admr2790918ejb.71.1709365413474; Fri, 01 Mar 2024 23:43:33 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709365413; cv=pass; d=google.com; s=arc-20160816; b=odNJJ7iHhzHN2uZZH2BbzWl4PYt3oNEfkYtL9wn99RTRwCPTvsIX1xQMQqnFh3NsXE 0Ss9Tc8bwx3HdfGsS+m67zcgT8N/5bNMUcHJmq6hccrUqdXCpQz96nijprzeQ6EPFSW0 bwlUpu5QAKjK3QnoM7EzAcSkVl7jCz+/sr6MBFvylQYyb5/8E/HhS8AIzs6gh+Ld+Ttc FI7w0D8DIzgIboVZH+0EsVIIuvUlg8akLq5duDMFEvseuhlC7PWSg3mozENFhhIqtpv/ COtCDz5xAdOjTtDkt78KK71MVo0E5wihbyXWeg21ptE/VWc0TtA0mMQSN10vV5jhQBkW YYNg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=Pc6WGO5vTk7t7wqxhEwSHshxa9m7UoB9H431spDMix0=; fh=49J/Zt0xlnwm0YmOeJR9zjrKn5j1z3jj+50E8z95sYo=; b=K1OahJqI4Bb0q9oe/MspTEPWbRvD2HuvOmHvsTSnmrOYfopYw6lAabO8oj8TB51dlD AMmCa/E6rg/lrZnX9WLGLBfEY8ZEXEC+TPnawGHDvsfw5xYH4PdCvpRHK+d8aNXG40SU BG0M0Ht0M1PCImpYId6hqqMIlWaIQ48yRfQZf69DR2AfpkTbWrdTMV7kKkwV1rwDsKyQ rW/6gDxVsl0RvNpGl5iSPfwHSRREtP0tQww3RXbZM8vIUFVBxfHKryohwNIPcbpgv3IL fawGUuwV7v5TKmlO+XTNbrESm+GgE65T5XBzAbSpwEW90XboT+Ntbibnu/w1bSG4HypI Bdbw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=kD8QL9ug; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89346-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89346-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id x10-20020a1709064a8a00b00a4444ff5c9dsi2059670eju.244.2024.03.01.23.43.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:43:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-89346-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=kD8QL9ug; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89346-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89346-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id AC9281F23323 for ; Sat, 2 Mar 2024 07:43:32 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2730F1775F; Sat, 2 Mar 2024 07:42:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kD8QL9ug" Received: from mail-io1-f47.google.com (mail-io1-f47.google.com [209.85.166.47]) (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 EE9F715EB0; Sat, 2 Mar 2024 07:42:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365355; cv=none; b=YY9+LSYBvEw0BMtOliP0hm6dbwSUuMKd0ju4W0kk4glIvJRjl3iMNO9UM0gUGmNWU7edBuRXX+aYeVjR/teEQLg7t2Mj/i87EWSUU9DnRvH64MbuzsOKYr2JZ6kJvhh9APdBQT2aHFk+AuN6dmfNATok4++0vaOYHnb1EaR7NQk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365355; c=relaxed/simple; bh=LIpOUewW6H0QEPuqhwnEO0ogdkFsfUKAZVbggnMfLIc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HNGfyJRCy2n/TMnZY+SAvdl+Z4wzb0D2peGV9cz6D3Aqv1FlhVLiIEmrKiROaate7SxCWWlMs+0Fw8KgBNp756ZUXNVe8JXMDfNl4stXKbAfmCayy2jgyiRacEcC9TsJatMivKr+zeND1tgF21L4EZbXDa2hfX5syYG2eDmrazs= 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=kD8QL9ug; arc=none smtp.client-ip=209.85.166.47 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 Received: by mail-io1-f47.google.com with SMTP id ca18e2360f4ac-7c835cfbff3so10486139f.2; Fri, 01 Mar 2024 23:42:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709365352; x=1709970152; 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; bh=Pc6WGO5vTk7t7wqxhEwSHshxa9m7UoB9H431spDMix0=; b=kD8QL9ugqah003AJOzkxPUuA9R16erVsMI6GV09V4W53uCTtFXpGn2y+YZx/C692Q0 aztE4YT9Hny264bjY+hYWvE66oSdy9S3z272Tb2SAW9JRA29cuN1WTMkBrVdGGBJCrFW dEZjB64N9SR11aRgDowJZ+5mHXwQVPyKCaD6DbLbBL0pGUZero2woOEeH5XYPs0QYGk7 ZvHqbVI3eu6TB5n1rvNfTI5SzJqLTCLJYLV0221oBaGUOO0YYECOmHwMkj+9gYBjcd9r XsF3Gl+VLn5jw1g83Q/KoOk2uDlWrzruCXiqUTEJK+C1xdNaHCGc13hKwt39wYyu7qd8 Geaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709365352; x=1709970152; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Pc6WGO5vTk7t7wqxhEwSHshxa9m7UoB9H431spDMix0=; b=aNyWq4gEioBNZ4cIWWPngvJVQsgecVqIa+5SnQr1HgIZ20f5PdUB/rTkMUpQqKNPll gWPWnspSgfP66I8bcaY+Hygk3vxvc9KxW/nFOGMi0dE5pYrVJxjVhziSY18Wf/R0Jzpe ySkSicOuXS4gLq2Tt2jLNBnrLRZ/KLAYMPq7Nnt99lLALdm2tUbYYTwz5+rQF7UNzKl7 B7jCEpGqOWpEZSrVXCxeLCoYTj3pRoQMOp4GCVYaFCaw3vL4IQaq/Ya+cuCVs27MsU8Y M7SkVZdbiyY4QCJ9yMwCoKv8eoLL6UIrlCI/1MzgzHmiSe/JHGMHDWac7FCa6iF9gunB CnHg== X-Forwarded-Encrypted: i=1; AJvYcCU3dcVghzu+BXhSZDqzB2V4xUfo5imKUvPIiS4+Rc6yEGb+ikXAdE7oQTbY7T4TDjXAdRaUGOD4JKW4l70qs4fcwlV3ROopBIQ7bSvf/4kJLqbnQNqxSPRUk9OVuOxYq/XnEIGKQbO7yg== X-Gm-Message-State: AOJu0YzV9SRgaVrmS0mfisUUa04HI4xNIsipkr/V0i9JpPhoabTEuU4b rFwrpgD6anZQHLlx9o4VzfKXKr2gdXsNeB7CDGBidwmxQYmtR42zfHIig/lP X-Received: by 2002:a05:6e02:218d:b0:365:259b:711e with SMTP id j13-20020a056e02218d00b00365259b711emr4972467ila.5.1709365352534; Fri, 01 Mar 2024 23:42:32 -0800 (PST) Received: from dw-tp.. ([49.205.218.89]) by smtp.gmail.com with ESMTPSA id x11-20020aa784cb000000b006e45c5d7720sm4138206pfn.93.2024.03.01.23.42.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:42:31 -0800 (PST) From: "Ritesh Harjani (IBM)" To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org Cc: Ojaswin Mujoo , Jan Kara , Theodore Ts'o , Matthew Wilcox , "Darrick J . Wong" , Luis Chamberlain , John Garry , linux-kernel@vger.kernel.org, "Ritesh Harjani (IBM)" Subject: [RFC 2/8] fs: Reserve inode flag FS_ATOMICWRITES_FL for atomic writes Date: Sat, 2 Mar 2024 13:11:59 +0530 Message-ID: <4c687c1c5322b4eaf0bb173f0b5d58b38fdaa847.1709361537.git.ritesh.list@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> References: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792399547946831102 X-GMAIL-MSGID: 1792399547946831102 This reserves FS_ATOMICWRITES_FL for flags and adds support in fileattr to support atomic writes flag & xflag needed for ext4 and xfs. Co-developed-by: Ojaswin Mujoo Signed-off-by: Ojaswin Mujoo Signed-off-by: Ritesh Harjani (IBM) --- fs/ioctl.c | 4 ++++ include/linux/fileattr.h | 4 ++-- include/uapi/linux/fs.h | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/fs/ioctl.c b/fs/ioctl.c index 76cf22ac97d7..e0f7fae4777e 100644 --- a/fs/ioctl.c +++ b/fs/ioctl.c @@ -481,6 +481,8 @@ void fileattr_fill_xflags(struct fileattr *fa, u32 xflags) fa->flags |= FS_DAX_FL; if (fa->fsx_xflags & FS_XFLAG_PROJINHERIT) fa->flags |= FS_PROJINHERIT_FL; + if (fa->fsx_xflags & FS_XFLAG_ATOMICWRITES) + fa->flags |= FS_ATOMICWRITES_FL; } EXPORT_SYMBOL(fileattr_fill_xflags); @@ -511,6 +513,8 @@ void fileattr_fill_flags(struct fileattr *fa, u32 flags) fa->fsx_xflags |= FS_XFLAG_DAX; if (fa->flags & FS_PROJINHERIT_FL) fa->fsx_xflags |= FS_XFLAG_PROJINHERIT; + if (fa->flags & FS_ATOMICWRITES_FL) + fa->fsx_xflags |= FS_XFLAG_ATOMICWRITES; } EXPORT_SYMBOL(fileattr_fill_flags); diff --git a/include/linux/fileattr.h b/include/linux/fileattr.h index 47c05a9851d0..ae9329afa46b 100644 --- a/include/linux/fileattr.h +++ b/include/linux/fileattr.h @@ -7,12 +7,12 @@ #define FS_COMMON_FL \ (FS_SYNC_FL | FS_IMMUTABLE_FL | FS_APPEND_FL | \ FS_NODUMP_FL | FS_NOATIME_FL | FS_DAX_FL | \ - FS_PROJINHERIT_FL) + FS_PROJINHERIT_FL | FS_ATOMICWRITES_FL) #define FS_XFLAG_COMMON \ (FS_XFLAG_SYNC | FS_XFLAG_IMMUTABLE | FS_XFLAG_APPEND | \ FS_XFLAG_NODUMP | FS_XFLAG_NOATIME | FS_XFLAG_DAX | \ - FS_XFLAG_PROJINHERIT) + FS_XFLAG_PROJINHERIT | FS_XFLAG_ATOMICWRITES) /* * Merged interface for miscellaneous file attributes. 'flags' originates from diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index b5b4e1db9576..17f52530f9c8 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h @@ -264,6 +264,7 @@ struct fsxattr { #define FS_EA_INODE_FL 0x00200000 /* Inode used for large EA */ #define FS_EOFBLOCKS_FL 0x00400000 /* Reserved for ext4 */ #define FS_NOCOW_FL 0x00800000 /* Do not cow file */ +#define FS_ATOMICWRITES_FL 0x01000000 /* Inode supports atomic writes */ #define FS_DAX_FL 0x02000000 /* Inode is DAX */ #define FS_INLINE_DATA_FL 0x10000000 /* Reserved for ext4 */ #define FS_PROJINHERIT_FL 0x20000000 /* Create with parents projid */ From patchwork Sat Mar 2 07:42:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ritesh Harjani (IBM)" X-Patchwork-Id: 209186 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp360423dyc; Fri, 1 Mar 2024 23:43:54 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCV5rsy194/QN3arSnM7AQ2caRX/zpNXCS+0lpCAzi2MtJqcwYSj707EyUrK3ts8k6sJPQ/qta1VWitFS6wYDRQrwFtk1Q== X-Google-Smtp-Source: AGHT+IE5SCgdYlnZyAsdN3i0pu3ODNCBwqibkLF5+9rPfvP1HJ8T/FS1mnd67TZ5sAIvF/G4RiAh X-Received: by 2002:a17:906:2c55:b0:a44:c919:c8cd with SMTP id f21-20020a1709062c5500b00a44c919c8cdmr982225ejh.64.1709365434786; Fri, 01 Mar 2024 23:43:54 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709365434; cv=pass; d=google.com; s=arc-20160816; b=lsXXiRXW2t7OgJ+xW/4VBR4dknPcjX+h7LjBE93VPAVhkdOb8R2JvgQBBsPHTnQ2H+ 4BkIkYGvQtmFJdrdFsupnjn4aNcwcM1KjTLafcEaVgsw8kVRd+vOx4s4v6mot7Q8AfJw /vKxTNyWYpmzfXZeWESa5b0AtwtkHCxsFNUUaCUFHL5Rp9t7itSgcvAgqUTzNul29G+D 7q2OKwGTUNhPwan+RbBU7dkVbqJggRlxQGJrY4erqoEYO549pR5F3RhairuBXUZaP37s 7H1eEFYDmMA9rGyxmZda/NbyXYvq96eKlCepPzqVLPeH/0HbjZNYK0Dl6FU9HWUt0AC/ JsoA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=eHsu0u63wjbZemZD2jGi9jSrqASniu0uOU6naDIntW0=; fh=LiXHhANtG3YNsRolXLtm+GsKTVvWJqpdxtZ2B4ketIk=; b=Veyk3FZJOsTvjJGhBMvdECcZ0hhptUSIcM7i2EVAoKqjSPbTq93vzCkOAm6djsEb3K xrC4/shB/1v1suCfnvu7YbZ12VQmNN+adjMOA/JDXMBPa+ONNMidgRFmYas+IHDjSzXI 51YF5sNTt8b5FnQc5LP6nH5yTlAhFPMCq6sldvp5sJ0I/EHixHRu9twa7QjHaKks1V/X 84PLoSpITB/t1R4EHzsFdHDgsnwrD4NjqoCNM4yACHpy496F2l/TIDOkB0WXgpsw5SBz EkRP1olXqOcZGXz3m4NBL5LqEvJynb7pqFLxtzb0pZ4oM/nZWbQnOim3KzGGRWTNJ58v 7jug==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=E6H0RfJz; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89347-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89347-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id du17-20020a17090772d100b00a43b01117aasi2266301ejc.32.2024.03.01.23.43.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:43:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-89347-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=E6H0RfJz; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89347-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89347-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 3674C1F2349E for ; Sat, 2 Mar 2024 07:43:54 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3BA1517C60; Sat, 2 Mar 2024 07:42:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="E6H0RfJz" Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (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 0D5611775E; Sat, 2 Mar 2024 07:42:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365359; cv=none; b=pUH2jlgW5UeS6RIOPK6xH4UzchilKN9O1JAC6bZkKQpy0FlhNc1fktQcZpw/v5hIQuRBiESARORqNwWtay5CoWMPQ2hLJ6olvvir3Tfs94q2udXK7ZdZIYZlKvlBWSNvTim1hRarkDlEcH288ZjyTBGVB4yJvXfiwegdkGS4gbw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365359; c=relaxed/simple; bh=4+Rh2VnQPFyNWCv+BvIaDZG8kx9KbVijZEmof738DIA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Y7KuabuiRUbhV4Gu01Fiiao/SJO1An9GF1YBuyoLq+ZCuj4P6V+zIAN+zVcPzNuIHQn0DaVyacR8ooez/x1CJPmAFjvbGSmOh03t35lksgX5KuqItAfs8v0+1JsXAVJf3WQ0l+tArW0XWWD2duvjVxUzlknJVshw2AvpmNtHHkQ= 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=E6H0RfJz; arc=none smtp.client-ip=209.85.210.173 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 Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-6e5b1c6daa3so1556619b3a.1; Fri, 01 Mar 2024 23:42:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709365356; x=1709970156; 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; bh=eHsu0u63wjbZemZD2jGi9jSrqASniu0uOU6naDIntW0=; b=E6H0RfJzCwRAxifxnDBylksjLZOrgrPMXBr1/OxK4KvkHAlaJwj7UvaXKkhJ9V7oXe VyACnY/6Hzzj3NEiOttA3yiRC0q4YtOjqG7C3Vg2Jhw+bi7mH/a/K+4lrfQ+kp6mlGXh piKTllWS6wlzG9JZ7kGrgpnFUwKC3BVCWD6c39PFMBSw79K9NhgW4mdk3akh1vl5pHn6 AZev0dkHTga/wOPyuqLUqryBt8QryxjWmF42YSW1IeWFUMp2vjJiJ9Hzjj4ZcRRtZOg/ k0L5MkpMP8IDFbuK7IYAfrslZSLlqigz7bEw6/1Cc/17H88o6R3UTV+CKIq59NqNxcSQ NUNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709365356; x=1709970156; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eHsu0u63wjbZemZD2jGi9jSrqASniu0uOU6naDIntW0=; b=gOw7BDH1VDKOkXIXiHthdujnfe6ffYb9iMH6TMUV9v8vyLdighZH1YIV0aD8Xsx88t h9wNotTrpNWbgpgw2GRStvIoZON8RtlPh29tFr+VhQ6vjFKUrX3E2hrbhipeofLxmZbb rSmVPaBAS8OxKefPwbnUNrmOTIdeM5mTftRbsiJY5tseFHTfs37eV3HzUcjSxRiCfS+A EeKpSA5+80o/6v9VOCAj+WEZOGf1zh4nPDFLgNTfpbNSX2Vj19+tcKsbP2wNFDWJEccC y7Bv6LK/MtES/v8nP1U2DKCsQ7UkK/uUEXlzjfh9y1yVBVAWD0kPBxPu5fIzoyFZIz8+ A6pA== X-Forwarded-Encrypted: i=1; AJvYcCVJF/d0lpnee+U4fxva78/CXkgzr8YoF4fGtm7WiRa0S/3u/zXVYGGShrMOd10BI1ClDFHHx6YgaiRAi7lvUUD9DQ5nJrTYsTWbYRoYDBrtEeL4MiXWv6sNc3Eg3Lo4OTUTeA1n54wCoQ== X-Gm-Message-State: AOJu0YxB09+tyGZJgpJmVO6N1XFsj8dzmnZUGQfs9ZpIphjC13ooCZop XBZ4rWL2mkRZJiFiXL/laorKNM+OvdVJ571NoZJFLcvprMqntdaH08OnPQgd X-Received: by 2002:a05:6a00:2d02:b0:6e5:9031:9885 with SMTP id fa2-20020a056a002d0200b006e590319885mr5511519pfb.23.1709365356352; Fri, 01 Mar 2024 23:42:36 -0800 (PST) Received: from dw-tp.. ([49.205.218.89]) by smtp.gmail.com with ESMTPSA id x11-20020aa784cb000000b006e45c5d7720sm4138206pfn.93.2024.03.01.23.42.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:42:35 -0800 (PST) From: "Ritesh Harjani (IBM)" To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org Cc: Ojaswin Mujoo , Jan Kara , Theodore Ts'o , Matthew Wilcox , "Darrick J . Wong" , Luis Chamberlain , John Garry , linux-kernel@vger.kernel.org, "Ritesh Harjani (IBM)" Subject: [RFC 3/8] iomap: Add atomic write support for direct-io Date: Sat, 2 Mar 2024 13:12:00 +0530 Message-ID: <6a09654d152d3d1a07636174f5abcfce9948c20c.1709361537.git.ritesh.list@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> References: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792399570210330895 X-GMAIL-MSGID: 1792399570210330895 This adds direct-io atomic writes support in iomap. This adds - 1. IOMAP_ATOMIC flag for iomap iter. 2. Sets REQ_ATOMIC to bio opflags. 3. Adds necessary checks in iomap_dio code to ensure a single bio is submitted for an atomic write request. (since we only support ubuf type iocb). Otherwise return an error EIO. 4. Adds a common helper routine iomap_dio_check_atomic(). It helps in verifying mapped length and start/end physical offset against the hw device constraints for supporting atomic writes. This patch is based on a patch from John Garry which adds such support of DIO atomic writes to iomap. Co-developed-by: Ojaswin Mujoo Signed-off-by: Ojaswin Mujoo Signed-off-by: Ritesh Harjani (IBM) --- fs/iomap/direct-io.c | 75 +++++++++++++++++++++++++++++++++++++++++-- fs/iomap/trace.h | 3 +- include/linux/iomap.h | 1 + 3 files changed, 75 insertions(+), 4 deletions(-) diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index bcd3f8cf5ea4..b4548acb74e7 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -256,7 +256,7 @@ static void iomap_dio_zero(const struct iomap_iter *iter, struct iomap_dio *dio, * clearing the WRITE_THROUGH flag in the dio request. */ static inline blk_opf_t iomap_dio_bio_opflags(struct iomap_dio *dio, - const struct iomap *iomap, bool use_fua) + const struct iomap *iomap, bool use_fua, bool atomic_write) { blk_opf_t opflags = REQ_SYNC | REQ_IDLE; @@ -269,6 +269,9 @@ static inline blk_opf_t iomap_dio_bio_opflags(struct iomap_dio *dio, else dio->flags &= ~IOMAP_DIO_WRITE_THROUGH; + if (atomic_write) + opflags |= REQ_ATOMIC; + return opflags; } @@ -279,11 +282,12 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, struct inode *inode = iter->inode; unsigned int fs_block_size = i_blocksize(inode), pad; loff_t length = iomap_length(iter); + const size_t orig_len = iter->len; loff_t pos = iter->pos; blk_opf_t bio_opf; struct bio *bio; bool need_zeroout = false; - bool use_fua = false; + bool use_fua = false, atomic_write = iter->flags & IOMAP_ATOMIC; int nr_pages, ret = 0; size_t copied = 0; size_t orig_count; @@ -356,6 +360,11 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, if (need_zeroout) { /* zero out from the start of the block to the write offset */ pad = pos & (fs_block_size - 1); + if (unlikely(pad && atomic_write)) { + WARN_ON_ONCE("pos not atomic write aligned\n"); + ret = -EINVAL; + goto out; + } if (pad) iomap_dio_zero(iter, dio, pos - pad, pad); } @@ -365,7 +374,7 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, * can set up the page vector appropriately for a ZONE_APPEND * operation. */ - bio_opf = iomap_dio_bio_opflags(dio, iomap, use_fua); + bio_opf = iomap_dio_bio_opflags(dio, iomap, use_fua, atomic_write); nr_pages = bio_iov_vecs_to_alloc(dio->submit.iter, BIO_MAX_VECS); do { @@ -397,6 +406,14 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, } n = bio->bi_iter.bi_size; + + /* This bio should have covered the complete length */ + if (unlikely(atomic_write && n != orig_len)) { + WARN_ON_ONCE(1); + ret = -EINVAL; + bio_put(bio); + goto out; + } if (dio->flags & IOMAP_DIO_WRITE) { task_io_account_write(n); } else { @@ -429,6 +446,8 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, ((dio->flags & IOMAP_DIO_WRITE) && pos >= i_size_read(inode))) { /* zero out from the end of the write to the end of the block */ pad = pos & (fs_block_size - 1); + /* This should never happen */ + WARN_ON_ONCE(unlikely(pad && atomic_write)); if (pad) iomap_dio_zero(iter, dio, pos, fs_block_size - pad); } @@ -516,6 +535,44 @@ static loff_t iomap_dio_iter(const struct iomap_iter *iter, } } +/* + * iomap_dio_check_atomic: DIO Atomic checks before calling bio submission. + * @iter: iomap iterator + * This function is called after filesystem block mapping and before bio + * formation/submission. This is the right place to verify hw device/block + * layer constraints to be followed for doing atomic writes. Hence do those + * common checks here. + */ +static bool iomap_dio_check_atomic(struct iomap_iter *iter) +{ + struct block_device *bdev = iter->iomap.bdev; + unsigned long long map_len = iomap_length(iter); + unsigned long long start = iomap_sector(&iter->iomap, iter->pos) + << SECTOR_SHIFT; + unsigned long long end = start + map_len - 1; + unsigned int awu_min = + queue_atomic_write_unit_min_bytes(bdev->bd_queue); + unsigned int awu_max = + queue_atomic_write_unit_max_bytes(bdev->bd_queue); + unsigned long boundary = + queue_atomic_write_boundary_bytes(bdev->bd_queue); + unsigned long mask = ~(boundary - 1); + + + /* map_len should be same as user specified iter->len */ + if (map_len < iter->len) + return false; + /* start should be aligned to block device min atomic unit alignment */ + if (!IS_ALIGNED(start, awu_min)) + return false; + /* If top bits doesn't match, means atomic unit boundary is crossed */ + if (boundary && ((start | mask) != (end | mask))) + return false; + + return true; +} + + /* * iomap_dio_rw() always completes O_[D]SYNC writes regardless of whether the IO * is being issued as AIO or not. This allows us to optimise pure data writes @@ -554,12 +611,16 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, struct blk_plug plug; struct iomap_dio *dio; loff_t ret = 0; + bool atomic_write = iocb->ki_flags & IOCB_ATOMIC; trace_iomap_dio_rw_begin(iocb, iter, dio_flags, done_before); if (!iomi.len) return NULL; + if (atomic_write && !iter_is_ubuf(iter)) + return ERR_PTR(-EINVAL); + dio = kmalloc(sizeof(*dio), GFP_KERNEL); if (!dio) return ERR_PTR(-ENOMEM); @@ -605,6 +666,9 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, if (iocb->ki_flags & IOCB_DIO_CALLER_COMP) dio->flags |= IOMAP_DIO_CALLER_COMP; + if (atomic_write) + iomi.flags |= IOMAP_ATOMIC; + if (dio_flags & IOMAP_DIO_OVERWRITE_ONLY) { ret = -EAGAIN; if (iomi.pos >= dio->i_size || @@ -656,6 +720,11 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, blk_start_plug(&plug); while ((ret = iomap_iter(&iomi, ops)) > 0) { + if (atomic_write && !iomap_dio_check_atomic(&iomi)) { + ret = -EIO; + break; + } + iomi.processed = iomap_dio_iter(&iomi, dio); /* diff --git a/fs/iomap/trace.h b/fs/iomap/trace.h index c16fd55f5595..c95576420bca 100644 --- a/fs/iomap/trace.h +++ b/fs/iomap/trace.h @@ -98,7 +98,8 @@ DEFINE_RANGE_EVENT(iomap_dio_rw_queued); { IOMAP_REPORT, "REPORT" }, \ { IOMAP_FAULT, "FAULT" }, \ { IOMAP_DIRECT, "DIRECT" }, \ - { IOMAP_NOWAIT, "NOWAIT" } + { IOMAP_NOWAIT, "NOWAIT" }, \ + { IOMAP_ATOMIC, "ATOMIC" } #define IOMAP_F_FLAGS_STRINGS \ { IOMAP_F_NEW, "NEW" }, \ diff --git a/include/linux/iomap.h b/include/linux/iomap.h index 96dd0acbba44..9eac704a0d6f 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -178,6 +178,7 @@ struct iomap_folio_ops { #else #define IOMAP_DAX 0 #endif /* CONFIG_FS_DAX */ +#define IOMAP_ATOMIC (1 << 9) struct iomap_ops { /* From patchwork Sat Mar 2 07:42:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ritesh Harjani (IBM)" X-Patchwork-Id: 209187 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp360505dyc; Fri, 1 Mar 2024 23:44:16 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCV74df27eK54olxPCyxCeMnBjAIX3Ky7B2aMbtYQMBHAPZy1+C4DFoZq5S1l28tNNVbXLHSSPe+60zBIh0JIdpgAF8yGA== X-Google-Smtp-Source: AGHT+IFiiv5IgfnARvLtWELbrlK+jP/60vFbYjBg0qBlWsWBIUNig21gqZgx3WKMriucNmm9/qv0 X-Received: by 2002:a17:902:b098:b0:1db:d184:c45a with SMTP id p24-20020a170902b09800b001dbd184c45amr3661553plr.67.1709365456099; Fri, 01 Mar 2024 23:44:16 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709365456; cv=pass; d=google.com; s=arc-20160816; b=JK1siAWdKS27sAj79tf+HCenE5l3mxGYIVinXTE1cw6bsJlyhQeik/V+5eSIcc8TwL RhbeGIiY/nLB0aswfBtUUZGpdZkDmTBLVIevFSzcJSwWLDEWpnZKWF9A3zSHGRry//nR YZ3OZ0NwkK8ofMOgMmKfrfqF1ragTxiGjl36zV7/Ts9XbR2TxAmM6sFwP0pveVDBABdB yxGxkSLUiAGisIQt6LvGsfug+mnTN16VppV/wIwI+hYTCWJrBRcKzOG7Ib1+zPEDlaFS tfwuvuQA+9YztkRSJNL0lS0ALq3peQc1AKrZlKcACl61hYFO4kvbOlx5DYEk8uI2q+Dq BvUw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=eTfdJwbprgG1n5WYQCCw6xYQX3etSudrpY9bbjKNIpw=; fh=oUB0ATab8NicmdeQbOSYSeFEdnZviYqch5zt1H8hgVI=; b=pTi+VzNjWmqCtezlqgfTg6wm0DhslZS/vTEBZkA+uJhvhUE5HaNoX8brDjgeqobVuW B1+Dy3UEoPT8U54TUHqSg8UQP/jbcWNYLYiYi4HJA+T5G8I9zrnL5JiL8RBES/mEj/Zf NbAP2N6Zw4WXep5Y2GBsKlFUC8z6ix4/huXr5Rmw8JnYxh/JRXXQFS7j1rxmduQbkHwt GfzamSsCIoaJxVNEy7WVMksyl+qFfxZofO11x844msD/FWM4D29SCMDJn92hiLmDXJG/ 8lUgM5Yr7f9siDDpjonvFfLrV7sE9BqU/blFGg1v4y8N3NdZYhw0MmV23zBNWglsBVLo B06w==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=i5ZJk0Zx; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89348-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89348-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id b15-20020a170902650f00b001dc89ee338esi4838916plk.561.2024.03.01.23.44.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:44:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-89348-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=i5ZJk0Zx; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89348-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89348-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 471052838B9 for ; Sat, 2 Mar 2024 07:44:15 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8FCDC182CF; Sat, 2 Mar 2024 07:42:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="i5ZJk0Zx" Received: from mail-il1-f178.google.com (mail-il1-f178.google.com [209.85.166.178]) (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 1429917BC7; Sat, 2 Mar 2024 07:42:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365363; cv=none; b=aB2aaJJBu4hFlWc6cV2gcao3LOKuWGymLfBxb5t0rxcfhunOA64kaGdl2+1NLlfn8qCQwJIsAE51OKUNBeA5044bU/J659CxqIYrTlGvtTmkljfKdshpCzEz1Cli2FS2mzPUtKaIwlOORQou003ZUu/5zq0zUJD+3aDUIDfLvcs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365363; c=relaxed/simple; bh=BDptZaUdouDGvCPACBlkzaPvTTUmwhTQ7mmrE9tmTVY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=edhVxKr6ym9uCo3KI8Jbc0qsleDkXX+9lsuhc+YamO3eY1HDoHaglDykjbkTC73IiLlZnH/PHX73upAMQ/MHUG/y64h9JFgvf0RHLwTQVSLBc565E2hmUuOABlFIc04AEps4COG46f1O79U0Ribty8LPc17n21JZMGltHEZh0h4= 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=i5ZJk0Zx; arc=none smtp.client-ip=209.85.166.178 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 Received: by mail-il1-f178.google.com with SMTP id e9e14a558f8ab-365145ef32fso9452035ab.1; Fri, 01 Mar 2024 23:42:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709365360; x=1709970160; 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; bh=eTfdJwbprgG1n5WYQCCw6xYQX3etSudrpY9bbjKNIpw=; b=i5ZJk0Zx/+ilD36uEuMKdHpjcnFebawqXa/RJQ3pxAiYPTzvGHv7VeDe5JGCCcqIZm HgvOqObkKfz1EmezjxRtQfvO+SrbmVrAvT92ClWHEfdd+MYJRUkN6WrvpnSSjXbpVaBy 5MSh4ta/5hNWcniMBb8uGbkaGvEyGlNh1+Pq7IIdFKfYMZ5XJyjQhob1NFx0lD77M8s+ Fg5c2KS5Bzr3QGJwn4nuqkCQQa9RL3LZmmQs7/o0vEhYtuq0LwOxm/JY6fHVEwkyZMZn 8p+GUBbLyqXczYwuSLthkpOqXWHkyC0bXfQVIYKbR8eZBf3WYmJICDiOzx6LFGq7LBW3 V9Dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709365360; x=1709970160; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eTfdJwbprgG1n5WYQCCw6xYQX3etSudrpY9bbjKNIpw=; b=OJVnFoPGjkVupYQhC/XIA48Af4appOQ250EQzGDle0/K+p1euP71NvfF9Iyelu2zNq JvfIgO+rqhd97wDBiJxTtVU+g2xlXheXDCJVJUFaj3f0RGZ8T5sSAl+rBSIvfvM3czkg 0yq2bLp3MZ6Awm13KTyq72a2bRndY37IxoYpP1zUgcEfFWnU6Jp0b8MXriTu7xsRJxUO 42OPgHbPGhfQ/nouohi6ZJyASO8x+qdI3I5A/asjNTpVt3wKjnWyEe9WWmE96MG9ae2W XWFBJa8hQrdAvU2dTh/g3tB728YXdvKAFWtI4DvNgamijNGosuwH1MoA3byHVkO2dphi NkQQ== X-Forwarded-Encrypted: i=1; AJvYcCW/buRLFrkeTEf0ct6noqXPXhXVKmTbtnGTlaQF02wt/0G9j/LjpWZs8pgfUOCk5uDg75kGIJp71QgsAv1y64a7szQQ2VZ18HDzBmL/Omieithn2xCnJGu8yEAEsFMenvWvW3JEIZf+aw== X-Gm-Message-State: AOJu0YzEhJn8wKSGKj1gRvknApj9W9Gus/8GyExC8v9GB72ah7A76w2R EmEilWbfi4MO+jroRYtIy8W2rtNuu+63+fA3eG+wesHTJZWXTyN4VmjK6A4a X-Received: by 2002:a05:6e02:1a47:b0:365:1ec4:a96c with SMTP id u7-20020a056e021a4700b003651ec4a96cmr4629876ilv.5.1709365360291; Fri, 01 Mar 2024 23:42:40 -0800 (PST) Received: from dw-tp.. ([49.205.218.89]) by smtp.gmail.com with ESMTPSA id x11-20020aa784cb000000b006e45c5d7720sm4138206pfn.93.2024.03.01.23.42.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:42:39 -0800 (PST) From: "Ritesh Harjani (IBM)" To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org Cc: Ojaswin Mujoo , Jan Kara , Theodore Ts'o , Matthew Wilcox , "Darrick J . Wong" , Luis Chamberlain , John Garry , linux-kernel@vger.kernel.org, "Ritesh Harjani (IBM)" Subject: [RFC 4/8] ext4: Add statx and other atomic write helper routines Date: Sat, 2 Mar 2024 13:12:01 +0530 Message-ID: <9def15d6ffb88f7352713c65292513fab532112a.1709361537.git.ritesh.list@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> References: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792399592734279176 X-GMAIL-MSGID: 1792399592734279176 This patch adds the statx (STATX_WRITE_ATOMIC) support in ext4_getattr() to query for atomic_write_unit_min(awu_min), awu_max and other attributes for atomic writes. This adds a new runtime mount flag (EXT4_MF_ATOMIC_WRITE_FSAWU), for querying whether ext4 supports atomic write using fsawu (filesystem atomic write unit). Co-developed-by: Ojaswin Mujoo Signed-off-by: Ojaswin Mujoo Signed-off-by: Ritesh Harjani (IBM) --- fs/ext4/ext4.h | 53 ++++++++++++++++++++++++++++++++++++++++++++++++- fs/ext4/inode.c | 16 +++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 023571f8dd1b..1d2bce26e616 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -1817,7 +1817,8 @@ static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino) */ enum { EXT4_MF_MNTDIR_SAMPLED, - EXT4_MF_FC_INELIGIBLE /* Fast commit ineligible */ + EXT4_MF_FC_INELIGIBLE, /* Fast commit ineligible */ + EXT4_MF_ATOMIC_WRITE_FSAWU /* Atomic write via FSAWU */ }; static inline void ext4_set_mount_flag(struct super_block *sb, int bit) @@ -3839,6 +3840,56 @@ static inline int ext4_buffer_uptodate(struct buffer_head *bh) return buffer_uptodate(bh); } +#define ext4_can_atomic_write_fsawu(sb) \ + ext4_test_mount_flag(sb, EXT4_MF_ATOMIC_WRITE_FSAWU) + +/** + * ext4_atomic_write_fsawu Returns EXT4 filesystem atomic write unit. + * @sb super_block + * This returns the filesystem min|max atomic write units. + * For !bigalloc it is filesystem blocksize (fsawu_min) + * For bigalloc it should be either blocksize or multiple of blocksize + * (fsawu_min) + */ +static inline void ext4_atomic_write_fsawu(struct super_block *sb, + unsigned int *fsawu_min, + unsigned int *fsawu_max) +{ + u8 blkbits = sb->s_blocksize_bits; + unsigned int blocksize = 1U << blkbits; + unsigned int clustersize = blocksize; + struct block_device *bdev = sb->s_bdev; + unsigned int awu_min = + queue_atomic_write_unit_min_bytes(bdev->bd_queue); + unsigned int awu_max = + queue_atomic_write_unit_max_bytes(bdev->bd_queue); + + if (ext4_has_feature_bigalloc(sb)) + clustersize = 1U << (EXT4_SB(sb)->s_cluster_bits + blkbits); + + /* fs min|max should respect awu_[min|max] units */ + if (unlikely(awu_min > clustersize || awu_max < blocksize)) + goto not_supported; + + /* in case of !bigalloc fsawu_[min|max] should be same as blocksize */ + if (!ext4_has_feature_bigalloc(sb)) { + *fsawu_min = blocksize; + *fsawu_max = blocksize; + return; + } + + /* bigalloc can support write in blocksize units. So advertize it */ + *fsawu_min = max(blocksize, awu_min); + *fsawu_max = min(clustersize, awu_max); + + /* This should never happen, but let's keep a WARN_ON_ONCE */ + WARN_ON_ONCE(!IS_ALIGNED(clustersize, *fsawu_min)); + return; +not_supported: + *fsawu_min = 0; + *fsawu_max = 0; +} + #endif /* __KERNEL__ */ #define EFSBADCRC EBADMSG /* Bad CRC detected */ diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 2ccf3b5e3a7c..ea009ca9085d 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5536,6 +5536,22 @@ int ext4_getattr(struct mnt_idmap *idmap, const struct path *path, } } + if (request_mask & STATX_WRITE_ATOMIC) { + unsigned int fsawu_min = 0, fsawu_max = 0; + + /* + * Get fsawu_[min|max] value which we can advertise to userspace + * in statx call, if we support atomic writes using + * EXT4_MF_ATOMIC_WRITE_FSAWU. + */ + if (ext4_can_atomic_write_fsawu(inode->i_sb)) { + ext4_atomic_write_fsawu(inode->i_sb, &fsawu_min, + &fsawu_max); + } + + generic_fill_statx_atomic_writes(stat, fsawu_min, fsawu_max); + } + flags = ei->i_flags & EXT4_FL_USER_VISIBLE; if (flags & EXT4_APPEND_FL) stat->attributes |= STATX_ATTR_APPEND; From patchwork Sat Mar 2 07:42:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ritesh Harjani (IBM)" X-Patchwork-Id: 209188 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp360586dyc; Fri, 1 Mar 2024 23:44:37 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVMaIfddPFkzn5PsGz9kr9MkdqlIY+ozOOE7eFO6GjHKXAf/MKXKCIuU1lUNeb51rX5eqxaiW7LPjZiMDPZVpVSgrJAow== X-Google-Smtp-Source: AGHT+IFDe99oJut/rPvSG04NeDW1nIQLA9VVxeCTxGDun0QyfQa4oJxmGpBvlbJckeWi8OwrsMR3 X-Received: by 2002:a05:6a00:c85:b0:6e4:e4cf:8944 with SMTP id a5-20020a056a000c8500b006e4e4cf8944mr5023212pfv.12.1709365477660; Fri, 01 Mar 2024 23:44:37 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709365477; cv=pass; d=google.com; s=arc-20160816; b=QSy17dewIQfYoRLvjgkJcwG6dxB2btjB12qScU1LnhF3D+pSz4YRd/EXJS1O+jgmre 7UJmqCdFXFJ6pMEw13v3fm7lTrYPaZs7StiAk/pUczUz4ro6mCmiki5w9Qy3sqzUUEYx j2WriXzxyUgvEriPticPYIG7EfTWu7k5dcAXLC1xB3vsNrsBa34Ve+sdinANpjP11flM DtlVjsge4uh1PvmqbMdZ5GRWZGBku+/bK5bxxfzBZahTpPZC1rXK8HLTsvw/p8Wr5py2 Zv/CYMoRJ52h67+pqbAF2fgHPkcDLFNaS47Mdosg1r7aXEXu9vpIhswnrXg9xA0CxYxQ mT2w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=MmvvXS9J0hotjKmd7nXk3BFkDw31hUfZsHqAnm1NWAk=; fh=hH2LUuYdn3AJhjdwoMCDzkNUKmE3Bf3pwLiaI6ZegM8=; b=YLJ+d9Twc6/4STWT18OZepl3tOWSp1aIClGByzraTHKwSHxyGoegQcfig+aVvblgyg VtQTtQyUQ+I4aCz4Rko3fRYT40X+HaUsLE04aaI0rqbr/e4k9FrECU/IKj4NzKaXEqSL pvkKTJsOGd0WmgYSbHwNzveXsjthGHgzScWH4msOZSQXDzXxbSwy9ZE7sdAvSgUKV6PD 2ETJ3Sw8kmjsQNLpNud9ntdhEYR2n+o/d7WhmFrSfzozvCl2xV0LbROHZ6tQ/dlRZFHC tZ4nt4ri0RvGwoO4pV24Cc+HSsVrbJxl8OK/JIt4FWBrK6Yh4wVrMLfr9Wk5sru5QeN8 Z05A==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=HPoK+sXQ; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89349-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89349-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id g1-20020a62e301000000b006e07e72513csi4869183pfh.17.2024.03.01.23.44.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:44:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-89349-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=HPoK+sXQ; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89349-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89349-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 6EA9628363B for ; Sat, 2 Mar 2024 07:44:37 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 385981B5B1; Sat, 2 Mar 2024 07:42:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HPoK+sXQ" Received: from mail-oa1-f43.google.com (mail-oa1-f43.google.com [209.85.160.43]) (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 D703218059; Sat, 2 Mar 2024 07:42:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365367; cv=none; b=LduN4ABZ7QPeLyuWnaNM6Fd9V0tDe+qj2ArUMFS+FyySUeNVO4Zt6tJdQ/Prap70nMjcDms5UWcwGYtW4VDIoibINT3nwRg6XuZUwcS6PKqb8XZmH3DBlLsVPCU55PtaAEmro9XCDHoOILU0KdvC+pNup+JrvdElU8AQxNrVZzA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365367; c=relaxed/simple; bh=XccdQgbUgEfTrYjCxrgPLToybofUT8Nn97GdxSvqImc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=euFd6ucb+Yg7+BUygYNh+zE0Z3hHAoTcnLbOWgzRjwcezAP3fNeB0QlI0wXDmZECGJVN1pqk2kwjvo6S0dAomOaFDvUFT5HfGMFOuYOfH69Qc5WP0veNUVNdN5g3jopwlBpsQyD6sPhl7zig89zhIAPW9i4vA8DmxsaWsECKL/U= 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=HPoK+sXQ; arc=none smtp.client-ip=209.85.160.43 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 Received: by mail-oa1-f43.google.com with SMTP id 586e51a60fabf-21fa872dce3so1203047fac.2; Fri, 01 Mar 2024 23:42:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709365364; x=1709970164; 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; bh=MmvvXS9J0hotjKmd7nXk3BFkDw31hUfZsHqAnm1NWAk=; b=HPoK+sXQwBYyISFknHPxG2QoERx2lq6Z6PW8pXOvNowJfSN7lx1bi8iUCrwsLc6798 wPtk3zfoVD5J+m/+tCi97AWAzm1fM7meGU11Ibi9tIc8wWa8qiZ2Uy4tyS5WjkDXm3H6 AX6cck9M89+rpOGqVXC8azvLZXMVLLmLAT8YKHlkOybREroH1bbtSVCemXdQI1t6BvxC CtWkmGZVUHhS4jFmcikCKEc2pQaThBm+PlJTcnw0M80svpnH6r+LNA3G/uwbkTqg1+Tq cqUuUqrBzollsz9pn4/MUPkxOY2GXbV4FyBYJP/HqMkHR9MrWpJ8yG+vDaicMIFrW2zh KTMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709365364; x=1709970164; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MmvvXS9J0hotjKmd7nXk3BFkDw31hUfZsHqAnm1NWAk=; b=bbbHZlhrRZuFvtCn4+L1klm9C/l7Zsqzm1htGL0ZAkjGOKa2lqXVlZanu3uj/IePki Y2o0J14RkCoEgoxMgQQ+JvvjsoQQCIApYC13mfoWHItoKWLuMUcAWkvGkmCcg3HuXgDY 5Vk3IpNo9xXMuMjJvqLhniNSGI78UobEvUp0XHKjRqVIWnbsDhhL+ezObwRg4EsuZlWp FFKyNwNkKyT74iomZTmYYVXLE6iS+oSpPTF9UdMurXuIVNi1UgIyZwOu9ZTNxkrirPhs CFNxuP49b+D5/fTRETD3f225rhgl681X9WgdRW3LUbjacOtq0wSUDbNI88T075R8Pv+2 MMMw== X-Forwarded-Encrypted: i=1; AJvYcCWJbF9GyZP5xAvVrZfcLakDkOhLu3ggy9z91aZChNng5dLcOhNL4O8uDMEwLXAZ2ASfVqbHt4NxqzcC8HUD0Bb067MMtitKsnMSjb5YKJgvdG5nmzgdNxP3hALQIjPiTsQfXh72wI3Vcg== X-Gm-Message-State: AOJu0YxX/kTkiwqBu7sB1jzBnsG6HotwOuG4Yc8wT3BIraQ8NuH5JAGB s+c0QYXKsD1iMxSRXIzxG04kwwtC7c5Y82dKOUiieWZAfk5QB+GfRMEremw/ X-Received: by 2002:a05:6870:c142:b0:220:bf55:b12a with SMTP id g2-20020a056870c14200b00220bf55b12amr3871797oad.38.1709365364048; Fri, 01 Mar 2024 23:42:44 -0800 (PST) Received: from dw-tp.. ([49.205.218.89]) by smtp.gmail.com with ESMTPSA id x11-20020aa784cb000000b006e45c5d7720sm4138206pfn.93.2024.03.01.23.42.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:42:43 -0800 (PST) From: "Ritesh Harjani (IBM)" To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org Cc: Ojaswin Mujoo , Jan Kara , Theodore Ts'o , Matthew Wilcox , "Darrick J . Wong" , Luis Chamberlain , John Garry , linux-kernel@vger.kernel.org, "Ritesh Harjani (IBM)" Subject: [RFC 5/8] ext4: Adds direct-io atomic writes checks Date: Sat, 2 Mar 2024 13:12:02 +0530 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> References: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792399614834927462 X-GMAIL-MSGID: 1792399614834927462 This patch adds ext4 specific checks for supporting atomic writes using fsawu (filesystem atomic write unit). We can enable this support with either - 1. bigalloc on a 4k pagesize system or 2. bs < ps system with -b 3. filesystems with LBS (large block size) support (future) Let's use generic_atomic_write_valid() helper for alignment restrictions checking. Co-developed-by: Ojaswin Mujoo Signed-off-by: Ojaswin Mujoo Signed-off-by: Ritesh Harjani (IBM) --- fs/ext4/file.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 54d6ff22585c..8e309a9a0bd6 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -400,6 +400,21 @@ static const struct iomap_dio_ops ext4_dio_write_ops = { .end_io = ext4_dio_write_end_io, }; +static bool ext4_dio_atomic_write_checks(struct kiocb *iocb, + struct iov_iter *from) +{ + struct super_block *sb = file_inode(iocb->ki_filp)->i_sb; + loff_t pos = iocb->ki_pos; + unsigned int fsawu_min, fsawu_max; + + if (!ext4_can_atomic_write_fsawu(sb)) + return false; + + ext4_atomic_write_fsawu(sb, &fsawu_min, &fsawu_max); + + return generic_atomic_write_valid(pos, from, fsawu_min, fsawu_max); +} + /* * The intention here is to start with shared lock acquired then see if any * condition requires an exclusive inode lock. If yes, then we restart the @@ -427,13 +442,19 @@ static ssize_t ext4_dio_write_checks(struct kiocb *iocb, struct iov_iter *from, loff_t offset; size_t count; ssize_t ret; - bool overwrite, unaligned_io; + bool overwrite, unaligned_io, atomic_write; restart: ret = ext4_generic_write_checks(iocb, from); if (ret <= 0) goto out; + atomic_write = iocb->ki_flags & IOCB_ATOMIC; + if (atomic_write && !ext4_dio_atomic_write_checks(iocb, from)) { + ret = -EINVAL; + goto out; + } + offset = iocb->ki_pos; count = ret; @@ -576,8 +597,15 @@ static ssize_t ext4_dio_write_iter(struct kiocb *iocb, struct iov_iter *from) iomap_ops = &ext4_iomap_overwrite_ops; ret = iomap_dio_rw(iocb, from, iomap_ops, &ext4_dio_write_ops, dio_flags, NULL, 0); - if (ret == -ENOTBLK) - ret = 0; + + /* Fallback to buffered-io for non-atomic DIO */ + if (ret == -ENOTBLK) { + if (iocb->ki_flags & IOCB_ATOMIC) + ret = -EIO; + else + ret = 0; + } + if (extend) { /* * We always perform extending DIO write synchronously so by From patchwork Sat Mar 2 07:42:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ritesh Harjani (IBM)" X-Patchwork-Id: 209189 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp360676dyc; Fri, 1 Mar 2024 23:45:00 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVWAqh3DBGWb+aZ7MAiCd2FiTHizvLmX8qCVWOkLOgV+hf/NqP0xb6DaN/Is/HryUaHQdolm+m2bN1kokCNnXJB1VXmNg== X-Google-Smtp-Source: AGHT+IF2Ti58lhbsy00mtUeJrFm+E0benEy/8GaxmpL0ymqmHXESU3Hev/B2MCKz6UP83IiRQREt X-Received: by 2002:a17:906:eceb:b0:a44:1fa5:285b with SMTP id qt11-20020a170906eceb00b00a441fa5285bmr2464496ejb.72.1709365499928; Fri, 01 Mar 2024 23:44:59 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709365499; cv=pass; d=google.com; s=arc-20160816; b=wb9xpBOghkuHuSRsWM/FVU7vEBoxTB1IzkVfSu3Z3pj5XYOeCsSlHGmvtbWSu7iqwE NQDRfqNAK0AyG3lHubZxy3PNlMdyeLPVvGjErIDVX2d0DGDIGT3JdFrCRAR+YKu8Pq8C LOvQ6BmZpkVVPSzeod6A1IkYDhZQrWBqIubWko73yB92c8BdXG3Uwye2jitlqNzNJUXb pTpltRfVYNPPLUmCyA8C81uLB+Kx8975tevXVakXFLzWZRhri7fOaf7rt+lm3Wf/3tC6 x83P1saVc8DLm+D3S3DnX3LFX4M/AVWZfoBpdapCH+MAeRUfNRlmKVf90o64QqAPjSfo UR0Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=RPDq+e7qZZNUe2lBOgjexuQEg62+2SvW8S4Hg2hx7P8=; fh=gJrodIQfMErym7EDJc3T+Vt3jZTvxSqk4GMMYvPc2bU=; b=mISHxFh8msRzT1nTBBETVCcPejrKZAycGVkxZzVWxURzLkwTQ09ufIXlBWNs2GOh+D 9who5sZEX3/BSSeY1iuIkOBtJVAJBLj4l4xacUTURqLSDaJ8X2+QIvJKPxgnp8+W1I6n yrlywwF0KuYa+OHTFtnwsc8YiZFy3FTGlfRCDUa5jgVmYPTUPT2WNUIYhjrUYX4vKlPe 8/NFid14ImMtLY8Ew8YiEv7I9UYwcIt0yiiYcsleJWrjL2/wMvTfRAGBQPrkKOy3Rm8S r+K51FCCiUwDsvdYyUeTKf3MaJByoRIbK9zq2VsGjrnQq8tRaroIr27kPRJWC37YD2LL DuxA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=lbMtpa69; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89350-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89350-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id a7-20020a17090680c700b00a44298f00c5si2156279ejx.888.2024.03.01.23.44.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:44:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-89350-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=lbMtpa69; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89350-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89350-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 7BE5B1F23531 for ; Sat, 2 Mar 2024 07:44:59 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 65D6C208D1; Sat, 2 Mar 2024 07:42:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lbMtpa69" Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) (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 2F0311B263; Sat, 2 Mar 2024 07:42:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365370; cv=none; b=sbxbR9kLf+qmrDozH0yXvmDvxu3KlX9SAdOm9PKz8WiJ11cR8YkAdfnh1K6AOEbbKe88EIbOq8pwobIO8Jq/Z297O56wwjWIx/GqSjUvp1ltSv0QaQiXc0zuLS6bweBklGMlljcw9yBY1+u4ZQfkp5UmD4MU15uZxsvCQYWdvkM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365370; c=relaxed/simple; bh=UEhxsrf39s3LpCg+dRj/c9p+DSGoMMdYusEHuKqzBcY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ejN+oBd11xPyrT9imu8W5TT/EOtaYQL8YJbOiHxg9eFnRxnec7GqT/guNKX5oViyqXwrgV9SdqKmBlVdKRinoCEKMn1SmI9SFNUGfiEUJYECOUiZQlrDkPNqLCgjAOcWsN9Oc3dY0bwNvd+AaKsMO+Sml7C4RWAykz7s95f7vHA= 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=lbMtpa69; arc=none smtp.client-ip=209.85.160.44 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 Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-21f70f72fb5so1934679fac.1; Fri, 01 Mar 2024 23:42:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709365368; x=1709970168; 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; bh=RPDq+e7qZZNUe2lBOgjexuQEg62+2SvW8S4Hg2hx7P8=; b=lbMtpa69SB34xQc7612j38A4KBcghi3XwxfJuYqEoBio6bKBzhX8/7X186gvXVsmj0 oxdkpNr/6i9/I0qRdBso528lWFWv3V77X5BwnE6ZJwuFJcPuzk/ShQkDjqTAlg5H+/xo GgASx3zz+DYzztxJZuf4237ms96FPYSL33ZMlyu+hN5KwkgweeT2bl12F5COJM7/D8qD uu0zKCc0bqjuVHo78w72bKrurLgFWT8br5Ih/oIfAryM1vJ0tJdxrP4HIpMj2AJKT/+c DSjb+robR+Opc9AwbPJC0lVYsR+OqaMaSLGg+wZ8qvZCLsxOtHpHa7laf6amk11VuThS mCGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709365368; x=1709970168; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RPDq+e7qZZNUe2lBOgjexuQEg62+2SvW8S4Hg2hx7P8=; b=mha9MbGDZe/9RMCqsa2hOruBEZKz78UBTO2fIhXv65uXN9L7IO68UVGq0Mi7ZS9bf0 NwycfR/RvkI3Q43SX1YXXrxrBMPkjKe3AYRBto0t0eBQJYBMfOBU/jGunBcC9FkQUEHe lEZ9Yx/VC2cOnp2UQ6bhSrNiGUjXIOF0wl7CwA2m20Sb+Ej2hVCsSfNMFFHrb3oIJNIR /EA3uYcmPJOvn54Dc3wX7KhuquPKx7LVMxpGiO9ZdpDjitt8iBtAn/WO7lfYIuar4Ywr 4IvZQSC3uHjJbeY82MruK9dvo2p5ZFmSaKRLmsn7d/bNsHk/KC/CX0GMrM2EySk2uYSz wMnw== X-Forwarded-Encrypted: i=1; AJvYcCUcWqLW1imGthmURhTzjLpVP/lcTSGvy+y4d29JijkP9XNO6wWNEfJdXtBkWzqa402R6EWtSovdQf7GUw2ZoplvAp+8G0xUB1GpD+q55vfgeQi1g52ErgVgGL2eUHj0fmPrEsEKQBMxkQ== X-Gm-Message-State: AOJu0Yz0AvGlNoJ02Irh15q1w4pXWUh1tvWpZs7ue7mLW2HsICpjbSAX APup1yNOlymPvHRARCSD1odgswx0wnQeDbxAuynoM/k0PIzyFi9c+qFB089P X-Received: by 2002:a05:6870:e305:b0:21e:e583:25e1 with SMTP id z5-20020a056870e30500b0021ee58325e1mr4359058oad.32.1709365367792; Fri, 01 Mar 2024 23:42:47 -0800 (PST) Received: from dw-tp.. ([49.205.218.89]) by smtp.gmail.com with ESMTPSA id x11-20020aa784cb000000b006e45c5d7720sm4138206pfn.93.2024.03.01.23.42.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:42:47 -0800 (PST) From: "Ritesh Harjani (IBM)" To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org Cc: Ojaswin Mujoo , Jan Kara , Theodore Ts'o , Matthew Wilcox , "Darrick J . Wong" , Luis Chamberlain , John Garry , linux-kernel@vger.kernel.org, "Ritesh Harjani (IBM)" Subject: [RFC 6/8] ext4: Add an inode flag for atomic writes Date: Sat, 2 Mar 2024 13:12:03 +0530 Message-ID: <33e9dc5cd81f85d86e3b2eb95df4f7831e4f96a6.1709361537.git.ritesh.list@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> References: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792399638481441853 X-GMAIL-MSGID: 1792399638481441853 This patch adds an inode atomic writes flag to ext4 (EXT4_ATOMICWRITES_FL which uses FS_ATOMICWRITES_FL flag). Also add support for setting of this flag via ioctl. Co-developed-by: Ojaswin Mujoo Signed-off-by: Ojaswin Mujoo Signed-off-by: Ritesh Harjani (IBM) --- fs/ext4/ext4.h | 6 ++++++ fs/ext4/ioctl.c | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 1d2bce26e616..aa7fff2d6f96 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -495,8 +495,12 @@ struct flex_groups { #define EXT4_EA_INODE_FL 0x00200000 /* Inode used for large EA */ /* 0x00400000 was formerly EXT4_EOFBLOCKS_FL */ +#define EXT4_ATOMICWRITES_FL FS_ATOMICWRITES_FL /* Inode supports atomic writes */ #define EXT4_DAX_FL 0x02000000 /* Inode is DAX */ +/* 0x04000000 unused for now */ +/* 0x08000000 unused for now */ + #define EXT4_INLINE_DATA_FL 0x10000000 /* Inode has inline data. */ #define EXT4_PROJINHERIT_FL 0x20000000 /* Create with parents projid */ #define EXT4_CASEFOLD_FL 0x40000000 /* Casefolded directory */ @@ -519,6 +523,7 @@ struct flex_groups { 0x00400000 /* EXT4_EOFBLOCKS_FL */ | \ EXT4_DAX_FL | \ EXT4_PROJINHERIT_FL | \ + EXT4_ATOMICWRITES_FL | \ EXT4_CASEFOLD_FL) /* User visible flags */ @@ -593,6 +598,7 @@ enum { EXT4_INODE_VERITY = 20, /* Verity protected inode */ EXT4_INODE_EA_INODE = 21, /* Inode used for large EA */ /* 22 was formerly EXT4_INODE_EOFBLOCKS */ + EXT4_INODE_ATOMIC_WRITE = 24, /* file does ATOMIC WRITE */ EXT4_INODE_DAX = 25, /* Inode is DAX */ EXT4_INODE_INLINE_DATA = 28, /* Data in inode. */ EXT4_INODE_PROJINHERIT = 29, /* Create with parents projid */ diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index 7160a71044c8..03d0b501cbc8 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -632,6 +632,17 @@ static int ext4_ioctl_setflags(struct inode *inode, } } + if (flags & EXT4_ATOMICWRITES_FL) { + if (!ext4_can_atomic_write_fsawu(sb)) + return -EOPNOTSUPP; + + /* TODO: Do we need locks to check i_reserved_data_blocks */ + if (!S_ISREG(inode->i_mode) || ext4_has_inline_data(inode) || + READ_ONCE(ei->i_disksize) || + EXT4_I(inode)->i_reserved_data_blocks) + return -EOPNOTSUPP; + } + /* * Wait for all pending directio and then flush all the dirty pages * for this file. The flush marks all the pages readonly, so any From patchwork Sat Mar 2 07:42:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ritesh Harjani (IBM)" X-Patchwork-Id: 209190 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp360786dyc; Fri, 1 Mar 2024 23:45:20 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCV6c92mnN7RbQc6KzmPTkSbe0Nud+zhcfCV/ufykRlw+PkSbALFbkCyP3nrWhDAbhRf3Lq+WKwxhZXClno+kXdAHvZlbg== X-Google-Smtp-Source: AGHT+IGnLk8vY2yKTkKRVi2sqjytL44f48J+iLPbosN0JwcKhPtDi9M7YiVOWIQcN8o0fXJXYcNx X-Received: by 2002:a17:906:374b:b0:a44:dea3:97a9 with SMTP id e11-20020a170906374b00b00a44dea397a9mr379337ejc.1.1709365520131; Fri, 01 Mar 2024 23:45:20 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709365520; cv=pass; d=google.com; s=arc-20160816; b=r71aBWOegyxSY0ErEy/TJWPTyN5YD5j41J+6Zy7haEL0J9v9TNNsTNAZjxSbt33RjF 8i0zRsA8f6rJ8ip7MDcyMLIO6LdlT1fzR8ecJyWRuRIuNpOXN32vs7H7Qr24u5rM/uzw f9DZuNnqBOP+q2P8ezpv5BHMsziDms3Kb+OtejgQnLUgLEaqm//0s38HkuKZsTnnDofo CEESx/v2slHPRCDtZ8f4A/TIFPWdMlsv/LvPtwnli/9JhJrUfUrreQQGm8X7BvypcXoP 7XtWW6zOiV3s5E4JNp174YeQ210cF2NKaBaC1hre6b/zpDUdu4rvcZU4bYjtCZsVVfQ8 1sgQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=+kzeTSfiJu806WMN/KPCzhuK/hpOJTvJcAEBv+CARb0=; fh=pMXCI7Ta01GI+SMnmDfFibUjYR/38FPbqORavGamJYA=; b=bJ7mCiQNOLAFd6i7MyRo5ZhVt/iPKS9TqQY4zdGghQeQeN2upaBoNCe1ni58+xEYXN dbNEjUy5BIz4htQrv8RBDb5lMhlCKKjmhePTAU/EOwLG4LJ/fV7CR1DhExfQBmmQW8yr w4koCdNuvzvEdsUOwPrOTxyUgsyT24aJguvpyXYrmpHnG+LEuGsCRsV4wHf0raphwBPC NUQIr804Glo9wYsO81IxDdB0m2BjUTMBGdUEE2vpPwG10MW5JopJCOnnkqJBDFohT0OT 1It8g8ac6aWJvB4bDyX9E810quPZIdNWuZpXogb7FG6ewtoVFb1h2mBdy00usrbI3Rkv A2HA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=HfRWpGeP; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89351-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89351-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id j13-20020a1709062a0d00b00a3e6b8363e1si2155591eje.533.2024.03.01.23.45.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:45:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-89351-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=HfRWpGeP; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89351-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89351-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id B7DAE1F23462 for ; Sat, 2 Mar 2024 07:45:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 98547224ED; Sat, 2 Mar 2024 07:42:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HfRWpGeP" Received: from mail-ot1-f41.google.com (mail-ot1-f41.google.com [209.85.210.41]) (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 A44A720B3E; Sat, 2 Mar 2024 07:42:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365375; cv=none; b=hV9Lc78n3k9v2Y4emQBsX35WX7Ud1vQTotmGnLJb1IEjGnytAiv0LZJ4Ddu3ZCgVELG895iEhtVlcVIV/c0dvMfxjI3BYm7Fjgyq/DCYFAMLzXsKPlNPixp0LZlDb3TXVrVc9cgKPuWHqU8Bg/2/p6Xbnx/oXb6F3CLoLq4njxo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709365375; c=relaxed/simple; bh=7K2GXZNUZuFdWwcE5Vtj/VA1EW5ZzCGgdr576kCe59M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g9TDrapuThtMHgtX2eFVBlmyRFawWdxlc9l+AbcASJRsfuNECkKNEJ1AIHAf9U/5ODygJAyOoWhSStcTds09lBWmDog9qtHpiPepOMRuHp1OBQQqU1yV5OJyoocpydmgaFrpCMA1hxqxiI3ulgx0RAXhvn8iHFjU5HnLBuLZS0Y= 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=HfRWpGeP; arc=none smtp.client-ip=209.85.210.41 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 Received: by mail-ot1-f41.google.com with SMTP id 46e09a7af769-6e4b34f2455so1642234a34.2; Fri, 01 Mar 2024 23:42:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709365371; x=1709970171; 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; bh=+kzeTSfiJu806WMN/KPCzhuK/hpOJTvJcAEBv+CARb0=; b=HfRWpGePrGLULOH+SA/8rs6MD9/PfkwTDQvZ9oh2woxlUGTtPA0PGDzvOUw8S9Bvod BpltlcEyKJ2cuoLiVRuqdEJOLuYI+Vv8Vl44fwNfr2bNW66Sjc4lnknDEJjZcYNoHf+Q M1T3ZcpVaSiWetHZF0e+wJPcI1cEYE/P9dWzXNO9pDCPnGPicocO7wAzznz7c4rpTNFw 6yZDCyHWRnf5CZOX0O7miXb22LD36uxIAIJwWwdKYQAxlxccBwUnnSCA4/CJkBB6ZhpN qzahsrOP22KbnfhdxNcVIVuzIA4NcvGLuDwG77Xjy1e4uZx7ohzwBsGnO53vXHNHqIrV YUkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709365371; x=1709970171; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+kzeTSfiJu806WMN/KPCzhuK/hpOJTvJcAEBv+CARb0=; b=lirIAJq37hum70VvuZRoxvtwkHjQqmldIfCmu6jcnxYybM+/GhBQfjIc3Gd1afrb8u hjXbstInYJl7VRZICp0ALD32EtC28kvw/pmr8sbc2tP7n7aehYeQ+Fr8IrLVjSLqhz0Q pcQKRYmliFTEWfWOLa6b+kdaDBl9dBqZeYfAbMA0YnAZmYZY22cizAjqkRKOTGXtg0WM m69SlRFrvgbbACw2onAYqCWneR4TJWc8OKce6OrtYBRq+A+GmkRm02PWIZAloxUQOctE V6wXxTZUp+EQI5A3yzpdte2VKW4B9vFqdbXIzMJ7Fj5YFUC63bk7JzKoc+Z29t28QCEF Vshg== X-Forwarded-Encrypted: i=1; AJvYcCXkdyDHjQwC0n7MSgoqU0SUTh8djSULSBIJluWFJZZ/ThBQJMMRbpdSaJEtgLDB4UfInfVmYoaUgffPSe9cFFIVQNEot3R1LTWY9LJfqD52Ej2MnUZ8DmNMuc/uez2JnXoYqNrkC5w66g== X-Gm-Message-State: AOJu0YwseWLUZE/ekw/YMplvcLH9edJkypYbQYbd9CwKIA8OcxJI94Hc dap/+zZbQcCfpwEnNs2g4y21GQ9nbZoBwxy4y4iZYG1Zt4MP6EfxzGZ5pz2h X-Received: by 2002:a05:6808:ec9:b0:3c0:4b11:dc54 with SMTP id q9-20020a0568080ec900b003c04b11dc54mr4052409oiv.35.1709365371659; Fri, 01 Mar 2024 23:42:51 -0800 (PST) Received: from dw-tp.. ([49.205.218.89]) by smtp.gmail.com with ESMTPSA id x11-20020aa784cb000000b006e45c5d7720sm4138206pfn.93.2024.03.01.23.42.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 23:42:51 -0800 (PST) From: "Ritesh Harjani (IBM)" To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org Cc: Ojaswin Mujoo , Jan Kara , Theodore Ts'o , Matthew Wilcox , "Darrick J . Wong" , Luis Chamberlain , John Garry , linux-kernel@vger.kernel.org, "Ritesh Harjani (IBM)" Subject: [RFC 7/8] ext4: Enable FMODE_CAN_ATOMIC_WRITE in open for direct-io Date: Sat, 2 Mar 2024 13:12:04 +0530 Message-ID: <703c48213ec033af5fd270c5338921db9898774c.1709361537.git.ritesh.list@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> References: <555cc3e262efa77ee5648196362f415a1efc018d.1709361537.git.ritesh.list@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792399659648671581 X-GMAIL-MSGID: 1792399659648671581 For inodes which has EXT4_INODE_ATOMIC_WRITE flag set, enable FMODE_CAN_ATOMIC_WRITE mode in ext4 file open method for file opened with O_DIRECT. Co-developed-by: Ojaswin Mujoo Signed-off-by: Ojaswin Mujoo Signed-off-by: Ritesh Harjani (IBM) --- fs/ext4/file.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 8e309a9a0bd6..800fd79e2738 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -913,6 +913,10 @@ static int ext4_file_open(struct inode *inode, struct file *filp) return ret; } + if (ext4_test_inode_flag(inode, EXT4_INODE_ATOMIC_WRITE) && + (filp->f_flags & O_DIRECT)) + filp->f_mode |= FMODE_CAN_ATOMIC_WRITE; + filp->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC | FMODE_DIO_PARALLEL_WRITE; return dquot_file_open(inode, filp);