From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (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 DAC3D2D1916 for ; Thu, 9 Oct 2025 07:59:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996786; cv=none; b=C7OdTpKpagIKB/5VzTVip4moECa3Kxw4deY15tq0q6VxTfngVO7yk5tyhgssskD+RHdAxFPBSDQKnSsAe4vWI7B8vNlcy7kLWHnDM83uNQnWROhXMgYseF5bO9A4ZrayRVkz4+EoiPnqpiEBetlmPPurHH8UveBfhz1zps3HCeI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996786; c=relaxed/simple; bh=hn/T4KF427I5vM1FE3EEQtD8Ky5WVe1EdG5AuHI54+4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CTkZEy4PjifQAMqOGID27eoRmuvJnuBZvqgeEN77QmrrojwyCLuSV1a4YNBN1ewt1sgm1LxmHq4Uuxwjia/kP7PYd+FqDWjktBA47eC8df+N+3weWbn781yIDiX6ZLxpGsN5aKghXJ+7Dzj+tti3UkOWstlVpc8oYvU6IdshQUw= 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=lMirGicO; arc=none smtp.client-ip=209.85.218.52 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="lMirGicO" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-b07d4d24d09so117035566b.2 for ; Thu, 09 Oct 2025 00:59:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996781; x=1760601581; 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=v56yGNQ37Majx7vHh2h4KlxSuTszWt/5MXXh209zdXY=; b=lMirGicOJdPSNtq9UZZJiIbkDKhy9CQKtYmj64hbx8QVtEfVQuXDHFoFXpPwusWLPp TgB2diOAbyyiUZcXGKKHKQWVgGL1Jx5zQmAsLuWo7rzUL/RHUceQ6EmmLLL7Tuuvpp4o p9ObZpVAYRgOtDSAocog43dOeC1QR+/iw8CnAsNHbYFgI5Ks4nU2NhrpX0ALFEcaEVps HMcARGcAMROGsXQWYoNrwFrRuRN/dEOF92/+8jeLPDMVuQaS266+1IDl1a5rwpVSlF6c 2XA+0rOpC18GFVQLbBReMGiW4hLHZ1ZRNPiZz+JymED71pXEAhX8lcUFUw1rNjt8rgI/ ickw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996781; x=1760601581; 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=v56yGNQ37Majx7vHh2h4KlxSuTszWt/5MXXh209zdXY=; b=LE2zX0y6LwBMy/qKABZM8EPJrS5eobBtc77rzD5X5RKsS1kZTGmTW63qEMTyyoOGmG ltom9tJ8dUDPXV6z/VELr0lwq8wcBQVsALiz9b4DKO+dDoTCeIpdjIQQAah80BkOYb4M ipUAggDAVKrWZPKTZ4VcBM7tihxUX4qa0VsWmSmBmDphJPDDvnCVCRkmxTDGe4L4hicS DMWocIJipTBcVCZ7OtSoyUDGFDYiaZ3QVuCviS7xiLs0t7iGgHuHAg6dyTbU77OLVwvq k9MJkdUgL9ZTKj14ozKwwAGnAPgID3XV6hqgdK5WEHow5HFwOBqIOyj+sKrf0KR0zQ/p OFAg== X-Forwarded-Encrypted: i=1; AJvYcCUT+OUDLpTqmA1EfkYvzfinuBus/AfjRcCZr1YawV2tYB2kStvYWFEs+EncDH7DGkVJ1vte5d8CFZ7Tevk=@vger.kernel.org X-Gm-Message-State: AOJu0YxZ5wGPK/wJ+bxunU6NDSu2z2mqwSWkySEyXJVSO4ml3QS1Z6T3 pLuuf21s7DQN7gDLxR17Vhb16doAhvD+IYpwL+kTBOrT3jT1L/wD4UVV X-Gm-Gg: ASbGnctNLEOZQ7kqPDxxtawDog6Bosf/Od1QxzT02xeIOQQsKPiLCFwp1VsNiSOiCr9 XT65ZZZv+zkJR+hrv96jdk6Mhw3DlStatvIelSuQ9jMMgHgctEn+PSbqPp+M7I7WB1n9J2i5rPL +ItNPRGPi+SRBuc9KWg0cRXnTuIwFt2vGgBSvvWDb71vZxARe+MXO9qy7WLjHxwsPPLavD7TBg7 aBlxNr6N36n5ABMJShVKSOCBIJxJJstqtDT7Zuv3/8kVHybpc5OYQAXAkry7JDEiYnzyZgwZPjL vPj90xGjgLFfglaJfSj4x3VaIEces/vdGPb6Yl32eluhh1pQu6tsCYldMETVngeFUFFBamEx9UB gIK2oqlCEtR2FfZ7FCYh+sgJqd32DQ6KLvKB4brDrCV4BDRDQg8xq+NNuw3o4vSem/awT3pZbmR n7KaZv7d1NNpyUg22d+28kz08vB5Gmowyh X-Google-Smtp-Source: AGHT+IEc4DRH7N7VTwKCGCSJIEPnJelkA9fOKTTSeoDugfMSCygU9n//Fy4KEuh4pwZhlTzmLezAHw== X-Received: by 2002:a17:907:3f17:b0:b41:abc9:613c with SMTP id a640c23a62f3a-b50ac5d08e9mr658923266b.51.1759996781064; Thu, 09 Oct 2025 00:59:41 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:40 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 01/14] fs: move wait_on_inode() from writeback.h to fs.h Date: Thu, 9 Oct 2025 09:59:15 +0200 Message-ID: <20251009075929.1203950-2-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" The only consumer outside of fs/inode.c is gfs2 and it already includes fs.h in the relevant file. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- include/linux/fs.h | 10 ++++++++++ include/linux/writeback.h | 11 ----------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/include/linux/fs.h b/include/linux/fs.h index ac62b9d10b00..b35014ba681b 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -949,6 +949,16 @@ static inline void inode_fake_hash(struct inode *inode) hlist_add_fake(&inode->i_hash); } =20 +static inline void wait_on_inode(struct inode *inode) +{ + wait_var_event(inode_state_wait_address(inode, __I_NEW), + !(READ_ONCE(inode->i_state) & I_NEW)); + /* + * Pairs with routines clearing I_NEW. + */ + smp_rmb(); +} + /* * inode->i_rwsem nesting subclasses for the lock validator: * diff --git a/include/linux/writeback.h b/include/linux/writeback.h index e1e1231a6830..06195c2a535b 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h @@ -189,17 +189,6 @@ void wakeup_flusher_threads_bdi(struct backing_dev_inf= o *bdi, void inode_wait_for_writeback(struct inode *inode); void inode_io_list_del(struct inode *inode); =20 -/* writeback.h requires fs.h; it, too, is not included from here. */ -static inline void wait_on_inode(struct inode *inode) -{ - wait_var_event(inode_state_wait_address(inode, __I_NEW), - !(READ_ONCE(inode->i_state) & I_NEW)); - /* - * Pairs with routines clearing I_NEW. - */ - smp_rmb(); -} - #ifdef CONFIG_CGROUP_WRITEBACK =20 #include --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (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 BA6352D248A for ; Thu, 9 Oct 2025 07:59:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996787; cv=none; b=jzGXrYZccO7bTYmz7ZkYlpBTNPNqG/x/HNgfmf8MDiBsdhtIcMX7qC7qJuIx8slZXHPGYHDWjYL7qFhM/tDr3Qd1oqnoXN8dFcv7V23O1xJl+MrgFriYEw0q3a99FBgxaLMqBVc49xSRE0Y70sRpcFfFitvTUOJipctROKM3V9w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996787; c=relaxed/simple; bh=ASNy7RmtSltSBzEynaqDPxE2iqjwE0ZPcjj4whWJ4kU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QtoNtp/BCg6ie/tQyaYTMrLWtaqSk4jPrsbTFdxIDcCSDVR4Jxxdrykyt8kpnB6hV+lY9q9Q368exH4U2kykmRWwLJ1Q2+eMRHrxrVYk5j4MLmnoCSSbXyo3ZivX0RZjp4J4MxkqYKvmqhXj8E8ip+iSmQEOAfla2a+aauiTlZ0= 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=QK8TLnBV; arc=none smtp.client-ip=209.85.208.48 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="QK8TLnBV" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-62fa062a1abso1017488a12.2 for ; Thu, 09 Oct 2025 00:59:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996783; x=1760601583; 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=hnyVCyplzK+z1W2ORGsEbSjRDIE71IW/QrGYX9ePnTE=; b=QK8TLnBV8F6IPKH9b//mxMoquBU1AYrHverDd2jJnQIsgDXYysnPt+5qBsl4ki720U 3ocIW7Jcipyxz+FB5i0HVbJvTq1bAwhiq0szN2RgKkAbWEjK59xK71mA/UXyiIHGLjks i8X1rXeYq/6eOyN9qk6y7SDbeKEfkeMPkSkycmy6w9cX4IbDACFodVHNf7ayS2tuQQzf IKbgSxng/5QEfd21nDFSwlasUSaPDixT4WIxVsZxCU8P/0dDBiGiYR4j/rTXKjR9ALI1 mumT8GIbxFNYEvHLNz1UYKyV+o9ECQ3E/6bbvg2TYrcGqhvXosgo02hjcVjVX1duKbm9 ES7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996783; x=1760601583; 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=hnyVCyplzK+z1W2ORGsEbSjRDIE71IW/QrGYX9ePnTE=; b=SXeq7J2z6XTQKFNzC3tKzjxGYjNZv9ZvQ37y0J4XOYdhVLmbV20ZeFPiyBK8Lwi0K4 MfEu7YEMe8x7hR96gcdn8o1Acg5pWwQUJIPTf++T6lmuFKoDTsY3YaJbDt+q6NCgyaSj 13FCnWuMos0diciSq+lqsLU1FuXulBBxrnqyrEq5crUJzf41XxPO1BAehgCgUT6MwyZ+ PB3tz5TGXku4TWNNhpKniijPUTTscE5pb1CNwbTcM3695n+4TG+baZElVFt04jw9Uk1e ROw+94Tf+jPvy5AwPFRU7ZI/QrBl1ZQf4+OW8s1hmIgHCuW6G4Xu09yCvmrjGmpXK5UX U+/w== X-Forwarded-Encrypted: i=1; AJvYcCVK6uQQv/WHVWdwEDUDBAWWoUXtntMZ+WNdwjXxsvaR+MX8qXIN3lTxY2x7Z+co+kLnrURjlZiLq98+20Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yyim2ByRadFXuOFH3BvGG1rCl8td8yykpyP5FdltbJv0GxVWm8p tp0Ztr1PrihSCwQ2gge8uSwrI18x77/Ykea2PKWXZCKb2ELfeDZ6zBfj X-Gm-Gg: ASbGncsiKQnnHDPigTPGCqM7bFhPbx5Iij7JPOddSGU8UlI5PC0YYQjSA5Kl64twwJ/ zB04uIElsNuFymYParesat7P3gIpSESzX430OFEWrn0jPOEOieM23J7PDdflkCPAPlSqKVeqsdX n+OTnTl3a7q0P4QNqK4cnuL2Oh5ye1Ju6KMG0bcQaq/mmNGZclEtOivC2+nm+4yQVNngT+2Ccfu bF+OyxJLmli4RZrfAtWnaXanKjZv5CuUW6QuxLc0CFei+izwMrRTRewFyQxom5bCaOuo1RiLsFy WWx3c6FSlcvqlXGxTr08kbWI2Re5Wyo9HVdjcJi4Up8PnLuU+mOgGu3M+q35vy84A3OSV3tBqFq /jc1s5EoSabrgkSRufLrGrRXMgVfOGjekjVZ7fIIJ0MGZvjxHgkKB+x9O0dx0cW4DfiJUzGuTjh 0AJG+dsKrtjNEAo3HTQRShLiXPK0tscilG X-Google-Smtp-Source: AGHT+IHSi6VF6s0uOD+PumlBjGkMUoulpOekOEwVZLQpfCJd1Jc4jSCHGMuyuANtbvnedJ6DnWPu/g== X-Received: by 2002:a17:907:7f0e:b0:b48:44bc:44f2 with SMTP id a640c23a62f3a-b50ac8e52b0mr657263766b.43.1759996782956; Thu, 09 Oct 2025 00:59:42 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:42 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 02/14] fs: spell out fenced ->i_state accesses with explicit smp_wmb/smp_rmb Date: Thu, 9 Oct 2025 09:59:16 +0200 Message-ID: <20251009075929.1203950-3-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" The incomming helpers don't ship with _release/_acquire variants, for the time being anyway. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- fs/fs-writeback.c | 5 +++-- include/linux/backing-dev.h | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 2b35e80037fe..9cda19a40ca2 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -476,10 +476,11 @@ static bool inode_do_switch_wbs(struct inode *inode, switched =3D true; skip_switch: /* - * Paired with load_acquire in unlocked_inode_to_wb_begin() and + * Paired with an acquire fence in unlocked_inode_to_wb_begin() and * ensures that the new wb is visible if they see !I_WB_SWITCH. */ - smp_store_release(&inode->i_state, inode->i_state & ~I_WB_SWITCH); + smp_wmb(); + inode->i_state &=3D ~I_WB_SWITCH; =20 xa_unlock_irq(&mapping->i_pages); spin_unlock(&inode->i_lock); diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index 3e64f14739dd..065cba5dc111 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h @@ -277,10 +277,11 @@ unlocked_inode_to_wb_begin(struct inode *inode, struc= t wb_lock_cookie *cookie) rcu_read_lock(); =20 /* - * Paired with store_release in inode_switch_wbs_work_fn() and + * Paired with a release fence in inode_do_switch_wbs() and * ensures that we see the new wb if we see cleared I_WB_SWITCH. */ - cookie->locked =3D smp_load_acquire(&inode->i_state) & I_WB_SWITCH; + cookie->locked =3D inode->i_state & I_WB_SWITCH; + smp_rmb(); =20 if (unlikely(cookie->locked)) xa_lock_irqsave(&inode->i_mapping->i_pages, cookie->flags); --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) (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 0AAC12D2398 for ; Thu, 9 Oct 2025 07:59:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996789; cv=none; b=D2k+VcF4R/0FyX+XZkd8vYLSFcX69QrdQAdoGOqL/0EtT7WKB07zSm1G0cyU2lf4ynXriDhgmBFc936IMBjDXV8qr4rHutpRU1NFRggUB28PjxGR4u03bV1VzBgiV8SAMJnNqnMXzZbMntF8OUAzj19HqZvrZ+ici43rmOJDJYw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996789; c=relaxed/simple; bh=JAU4oetIKsiFFQoxD4BOLbL092tRs1Y5zrd0wB8hP3E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IcMHTIlzmT9+OD+NyQ1Dg5t1z7/+2iprwNICOzhcvkFpv1AUze//2jIU29OSfNcxEyog07gyV3FR5+xVlQ1h9U5r2UaKnYQTv0EJJWUeMcDzJgiHD1qy1FcW9ckc1FUYw+OYVxs4jsj1KA1QRRECn/v66V9pE8mL33UM7vOFpbM= 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=E55vTmMQ; arc=none smtp.client-ip=209.85.208.49 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="E55vTmMQ" Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-639102bba31so1208547a12.2 for ; Thu, 09 Oct 2025 00:59:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996785; x=1760601585; 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=BImMKCDjo8UcgLF4QMJ2SKqY3V/e7t3G8DgvFQjtsv4=; b=E55vTmMQPuIsBWpR+wSLdHpUA7OJu+0uKgWLiQNF7rZ53zbtjoDnxV2lDTzB98VXPs PmpMv1T+jJCUb0JKHj88embadcVYrbbICu5CdZWG/sa7KKeeHGTw8i5qx1j0JVeq2w2k qP76iVEv3J5a8CzP1VQJzd7AoIHyt+hCzYdmXhyAIi9fkjVhuzdUm8qap8UGoiCY0YD/ cMZk0Joo8VFVz1XRUEgMZaFVWsIf7+6olS82P7R8EsbLGiqrnfLbK4RYvy0ceXHBlOhv a5XRmPQcERwzNZ5AZTbprOCXLAa31uQhgT96YekXlD0932f7tL+XC7IQ/wLfR2ovJqyI 8veg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996785; x=1760601585; 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=BImMKCDjo8UcgLF4QMJ2SKqY3V/e7t3G8DgvFQjtsv4=; b=fVtyWDevmDP9XeASc64MGqjmInIc4S2gpb2m5gQgMnrQ0rs8nlFehKKtC7rOxZWLWz iZ1fPdB2uLTm6yZMdmATHns652xiE31K6pDbahdbMRFcEW6YrOAk98rn7XT7sPRwHiRH Zus/m2dMWk5Y/Oz/cmWWhAXAwnqBR+euEPey+JycXlY+QfYbfgcXBe8jF+VlgSpE4E+8 B91SBIgo/JUuY+ZMrszsp/hMbCJLdhWMR4b3ElCg+nl6qmaw/GKNfiS+FEr0rjSgYRQo XdANpFgU3JtRh9dY6OxBNORTB6LbwpvZNdzaGftWa019bbVIzsKUNRzuBgiXHdlW1MPD poUw== X-Forwarded-Encrypted: i=1; AJvYcCWIyLnRAnuN6gVeA+pzsn7R2Ytq6259Grfygj/bjSUXXv3LFJcWf9YytP+OehnphUAzHwzf33VMOUPXhxc=@vger.kernel.org X-Gm-Message-State: AOJu0YxncpMs/00Zm0Zyw73u6lmAX9wQDhc0Btgz6b2+06JVk7ZYZoSq sCkqWClW4AIguwFD+eKhUt8l3YJhF66A0+UA+2OxN+3oqokK/rSAgygL X-Gm-Gg: ASbGnctaxhcw5nesTrzuac3ufVlNJS2/fSUbhFau12LZQyzK2vE1e8/vwlyhUXZK/vQ tNrs2vaT6buWivBHOpTZgTAMCUJYGXdVZxup7VVKzBpB/6D/SK2vNUgGemcFXwDfSVLUjcTzTbr ID9rA995IrTsg0l7F5iEi0RNEqXtfB7iJYMsSD4JaHS6uU/nVnK6Bsw07XSPeWIvaKOIeDC4VwR aK/2L7udpQxV83UHl6oz2LLQ53etsah5FU36A1GGTPN5BJYtcvsBKiIOcNvhO8HbmHonXGfgGMS Kc0q3bYp0HSBjo+zGj6B/bzX9spErhHgDUOiP674N2tBuS85xeyN5KBUdnIzefMZ2aboQAnzarE 3YrjjUETmNHWSQUhKTij7k/J/qg2jW2l/li7eeRAIRE4jda292IRMPiNH4LXN0Mhi1r8CilQ8eH DFgh88oHQwJ4EoVaMI7FsG7A== X-Google-Smtp-Source: AGHT+IENbCwcvaxD9DGquoigQ8tdDndKKU4pj4q2EF42sPm/388Ywdvf1nQR/63uusvC/5TSS5tPxg== X-Received: by 2002:a17:907:3daa:b0:b46:31be:e8f0 with SMTP id a640c23a62f3a-b50a9c5b3c8mr785496066b.3.1759996784546; Thu, 09 Oct 2025 00:59:44 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:43 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 03/14] fs: provide accessors for ->i_state Date: Thu, 9 Oct 2025 09:59:17 +0200 Message-ID: <20251009075929.1203950-4-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" Open-coded accesses prevent asserting they are done correctly. One obvious aspect is locking, but significantly more can checked. For example it can be detected when the code is clearing flags which are already missing, or is setting flags when it is illegal (e.g., I_FREEING when ->i_count > 0). In order to keep things manageable this patchset merely gets the thing off the ground with only lockdep checks baked in. Current consumers can be trivially converted. Suppose flags I_A and I_B are to be handled. If ->i_lock is held, then: state =3D inode->i_state =3D> state =3D inode_state_read(inode) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear(inode, I_A | I_B) inode->i_state =3D I_A | I_B =3D> inode_state_assign(inode, I_A | I_B) If ->i_lock is not held or only held conditionally: state =3D inode->i_state =3D> state =3D inode_state_read_once(inode) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set_raw(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear_raw(inode, I_A | I= _B) inode->i_state =3D I_A | I_B =3D> inode_state_assign_raw(inode, I_A | I_B) The "_once" vs "_raw" discrepancy stems from the read variant differing by READ_ONCE as opposed to just lockdep checks. Finally, if you want to atomically clear flags and set new ones, the following: state =3D inode->i_state; state &=3D ~I_A; state |=3D I_B; inode->i_state =3D state; turns into: inode_state_replace(inode, I_A, I_B); Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- include/linux/fs.h | 78 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 76 insertions(+), 2 deletions(-) diff --git a/include/linux/fs.h b/include/linux/fs.h index b35014ba681b..909eb1e68637 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -759,7 +759,7 @@ enum inode_state_bits { /* reserved wait address bit 3 */ }; =20 -enum inode_state_flags_t { +enum inode_state_flags_enum { I_NEW =3D (1U << __I_NEW), I_SYNC =3D (1U << __I_SYNC), I_LRU_ISOLATING =3D (1U << __I_LRU_ISOLATING), @@ -843,7 +843,7 @@ struct inode { #endif =20 /* Misc */ - enum inode_state_flags_t i_state; + enum inode_state_flags_enum i_state; /* 32-bit hole */ struct rw_semaphore i_rwsem; =20 @@ -902,6 +902,80 @@ struct inode { void *i_private; /* fs or device private pointer */ } __randomize_layout; =20 +/* + * i_state handling + * + * We hide all of it behind helpers so that we can validate consumers. + */ +static inline enum inode_state_flags_enum inode_state_read_once(struct ino= de *inode) +{ + return READ_ONCE(inode->i_state); +} + +static inline enum inode_state_flags_enum inode_state_read(struct inode *i= node) +{ + lockdep_assert_held(&inode->i_lock); + return inode->i_state; +} + +static inline void inode_state_set_raw(struct inode *inode, + enum inode_state_flags_enum flags) +{ + WRITE_ONCE(inode->i_state, inode->i_state | flags); +} + +static inline void inode_state_set(struct inode *inode, + enum inode_state_flags_enum flags) +{ + lockdep_assert_held(&inode->i_lock); + inode_state_set_raw(inode, flags); +} + +static inline void inode_state_clear_raw(struct inode *inode, + enum inode_state_flags_enum flags) +{ + WRITE_ONCE(inode->i_state, inode->i_state & ~flags); +} + +static inline void inode_state_clear(struct inode *inode, + enum inode_state_flags_enum flags) +{ + lockdep_assert_held(&inode->i_lock); + inode_state_clear_raw(inode, flags); +} + +static inline void inode_state_assign_raw(struct inode *inode, + enum inode_state_flags_enum flags) +{ + WRITE_ONCE(inode->i_state, flags); +} + +static inline void inode_state_assign(struct inode *inode, + enum inode_state_flags_enum flags) +{ + lockdep_assert_held(&inode->i_lock); + inode_state_assign_raw(inode, flags); +} + +static inline void inode_state_replace_raw(struct inode *inode, + enum inode_state_flags_enum clearflags, + enum inode_state_flags_enum setflags) +{ + enum inode_state_flags_enum flags; + flags =3D inode->i_state; + flags &=3D ~clearflags; + flags |=3D setflags; + inode_state_assign_raw(inode, flags); +} + +static inline void inode_state_replace(struct inode *inode, + enum inode_state_flags_enum clearflags, + enum inode_state_flags_enum setflags) +{ + lockdep_assert_held(&inode->i_lock); + inode_state_replace_raw(inode, clearflags, setflags); +} + static inline void inode_set_cached_link(struct inode *inode, char *link, = int linklen) { VFS_WARN_ON_INODE(strlen(link) !=3D linklen, inode); --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (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 DD5C62D593F for ; Thu, 9 Oct 2025 07:59:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996796; cv=none; b=l1GNdecHVkdr+WPwas5+WvMi7KXUY5cd+brQY8CJoeqTS3asxZYE/gPKFP9nu+6MDmavIGp2Lu+gt+7Pukl+1gzJT/Nmz7AdBNeCMSrC5/m/BLrwPqZxR4TG9RXsShtuA1tyPykXvxNGTzUNavmbRcvT2lwrEWkkZ/Kt6ZQmsXM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996796; c=relaxed/simple; bh=cufSrmyDW0uWHdfX8arSSIVv2GP2uza03kztsfD3kCI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qF/AACJ0e81JeIUKvNGApDn1Dni3PCY75z6iIdxOMS3WXveRPy9iRhNPUbWcy+Mw9A6kzmfqM6f5907iMitq20STeIe+TP6HzD5MfFGebWd5PV0Yztt58u4yeh99N83ofCGsLNy/OYVeUAAaHMZyTij6a2EtkNRsmo8d/zDF780= 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=h3CgIn8s; arc=none smtp.client-ip=209.85.218.50 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="h3CgIn8s" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-afcb7322da8so111573466b.0 for ; Thu, 09 Oct 2025 00:59:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996787; x=1760601587; 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=ODJwP34MaBpSxSDR36N4YTruQ+TAX69fxkWAUJugC7Y=; b=h3CgIn8sBsSEOBF3csi7SLnZNr6T9iWK5LmnOnzXZQYjUywMZh2npwIcgs9mkTr8E6 bZih7Sxv2smqY7YvyAW/7CmskQWCF8P1yeZYiSmm+Y1pfdQ9Yrc6OpMzQvrT4NWHm8E1 Slh9PcTIeGC3+sTzPgMRtGuzlh8EJsbGKCvIHu65H5sEzTPe49Q22I1JDbUszoyqDrQM m7DDFdKwk3xptP3C55WKjfL2/WjYBW26kJcjwHjM6LteD8AU2lF6Fu81GP0VtJTnHiGb ITM8ru6pBzHOfpBAFw5KUbFkyAk96MR3ctgfYPrCEdhX743BSJX4tf+G7FLBIIgri0lf fd0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996787; x=1760601587; 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=ODJwP34MaBpSxSDR36N4YTruQ+TAX69fxkWAUJugC7Y=; b=g6U9R71zwwZU8wKEe8az27NloBAiOxT/LfvRobq7t0tkPm/+wGXGcWy9EmANfwbtOJ HXJthkyUozvE5K1sSvA8heOYcO5fRdHyS4WoxUWRUvqk5J2brPZR9+IjB9MBXjC7xyng DO8vUtDZd+5ma8n3/FMU4+nTZdlBRsaErLKOl5pVJsfeyuvuxxuz0RmPwzdqUmeXxCQD dLS51lCyZUCk3SVL3eoyeMraNz4ytvGSKjd/ad0331A9UFok27y+vZXrrrHREoWIPKVU +Gn6dRDmo3flddHSLws5SNJWbRG0pLSwpgBq7KIzA6lDB/Z9Nk2+fdIJ5cDwT7QYhyMH BxNw== X-Forwarded-Encrypted: i=1; AJvYcCVI2WAbe32KwiNa39iMIFxDKbtxbwU4dvC+SRvRZGH4W1kiI1IgZW2GGhVpkC4OUSTvguphA0KXSA+yDyw=@vger.kernel.org X-Gm-Message-State: AOJu0YwyanoOLNtVXD2MFPB6jVrZervzSlJtAoV1kWJGlNcwMPXEe0d8 DB5eQkBROf2NpGf69AUdwquIIZmC93tGuZUkFZ+8NkkWDxgGWtg2AfNt X-Gm-Gg: ASbGnctbpwu5qsB5s2MYfa+pESjusSm9rPEVNtPcgFxbrbUWSg+5xq2nZQIVjkQ3q0v UXf+mf7zAexLML8JnypvOyT7wuuACz6yV9+9gCpbAUMf4euIrM4EFa3IsAX1Pg9ATWrTvfBz5cZ pMcOKe5vvUgmNgDMPyGBmEEXmCgpP/qjrQHnx9sbeWP/SoIh10/Hv9bSS8FotXyw/lswVIx/Koq ZGHVa1svUnL8R8qe9RedrewPGclhh91AEPyALYEkxAk4lT9cXQ+Oh0neePMwywdGvPD+4JLqwvd vm52j7UO9Aq2lZlCSZhExZz8V8OFnlTqGxsk2E+ClP4OuaRTitQUTFgSGdjCjot5AoB1nREQ/1g Nd5owHUv+JNz8TpnYAUhio6MImcEZuvSottbDcD3TNYkWe301gyEyVKTZF8ZwC/Oth3nYNwBuYd bvb6Jj9V0X+DakcVRf8BgHD/l7n6AciTpA X-Google-Smtp-Source: AGHT+IEieqhCYdRx0Ff3HzfXdAYFTgmRNW9jsu9K1glb+sDdLF3aKs4PUuYf+4bcU+vC4tP1CLqw2g== X-Received: by 2002:a17:907:3e1b:b0:b3e:b226:5bb0 with SMTP id a640c23a62f3a-b50ac0cc032mr657388266b.42.1759996786579; Thu, 09 Oct 2025 00:59:46 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:45 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 04/14] Coccinelle-based conversion to use ->i_state accessors Date: Thu, 9 Oct 2025 09:59:18 +0200 Message-ID: <20251009075929.1203950-5-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" All places were patched by coccinelle with the default expecting that ->i_lock is held, afterwards entries got fixed up by hand to use unlocked variants as needed. The script: @@ expression inode, flags; @@ - inode->i_state & flags + inode_state_read(inode) & flags @@ expression inode, flags; @@ - inode->i_state &=3D ~flags + inode_state_clear(inode, flags) @@ expression inode, flag1, flag2; @@ - inode->i_state &=3D ~flag1 & ~flag2 + inode_state_clear(inode, flag1 | flag2) @@ expression inode, flags; @@ - inode->i_state |=3D flags + inode_state_set(inode, flags) @@ expression inode, flags; @@ - inode->i_state =3D flags + inode_state_assign(inode, flags) @@ expression inode, flags; @@ - flags =3D inode->i_state + flags =3D inode_state_read(inode) @@ expression inode, flags; @@ - READ_ONCE(inode->i_state) & flags + inode_state_read(inode) & flags Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- block/bdev.c | 4 +- drivers/dax/super.c | 2 +- fs/9p/vfs_inode.c | 2 +- fs/9p/vfs_inode_dotl.c | 2 +- fs/affs/inode.c | 2 +- fs/afs/dynroot.c | 6 +- fs/afs/inode.c | 6 +- fs/befs/linuxvfs.c | 2 +- fs/bfs/inode.c | 2 +- fs/buffer.c | 4 +- fs/coda/cnode.c | 4 +- fs/cramfs/inode.c | 2 +- fs/crypto/keyring.c | 2 +- fs/crypto/keysetup.c | 2 +- fs/dcache.c | 8 +-- fs/drop_caches.c | 2 +- fs/ecryptfs/inode.c | 6 +- fs/efs/inode.c | 2 +- fs/erofs/inode.c | 2 +- fs/ext2/inode.c | 2 +- fs/freevxfs/vxfs_inode.c | 2 +- fs/fs-writeback.c | 120 +++++++++++++++++------------------ fs/fuse/inode.c | 4 +- fs/hfs/btree.c | 2 +- fs/hfs/inode.c | 2 +- fs/hfsplus/super.c | 2 +- fs/hostfs/hostfs_kern.c | 2 +- fs/hpfs/dir.c | 2 +- fs/hpfs/inode.c | 2 +- fs/inode.c | 92 +++++++++++++-------------- fs/isofs/inode.c | 2 +- fs/jffs2/fs.c | 4 +- fs/jfs/file.c | 4 +- fs/jfs/inode.c | 2 +- fs/jfs/jfs_txnmgr.c | 2 +- fs/kernfs/inode.c | 2 +- fs/libfs.c | 6 +- fs/minix/inode.c | 2 +- fs/namei.c | 8 +-- fs/netfs/misc.c | 8 +-- fs/netfs/read_single.c | 6 +- fs/nfs/inode.c | 2 +- fs/nfs/pnfs.c | 2 +- fs/nfsd/vfs.c | 2 +- fs/notify/fsnotify.c | 2 +- fs/ntfs3/inode.c | 2 +- fs/ocfs2/dlmglue.c | 2 +- fs/ocfs2/inode.c | 4 +- fs/omfs/inode.c | 2 +- fs/openpromfs/inode.c | 2 +- fs/orangefs/inode.c | 2 +- fs/orangefs/orangefs-utils.c | 6 +- fs/pipe.c | 2 +- fs/qnx4/inode.c | 2 +- fs/qnx6/inode.c | 2 +- fs/quota/dquot.c | 2 +- fs/romfs/super.c | 2 +- fs/squashfs/inode.c | 2 +- fs/sync.c | 2 +- fs/ubifs/file.c | 2 +- fs/ubifs/super.c | 2 +- fs/udf/inode.c | 2 +- fs/ufs/inode.c | 2 +- fs/zonefs/super.c | 4 +- mm/backing-dev.c | 2 +- security/landlock/fs.c | 2 +- 66 files changed, 199 insertions(+), 199 deletions(-) diff --git a/block/bdev.c b/block/bdev.c index 810707cca970..c33667e30eb7 100644 --- a/block/bdev.c +++ b/block/bdev.c @@ -67,7 +67,7 @@ static void bdev_write_inode(struct block_device *bdev) int ret; =20 spin_lock(&inode->i_lock); - while (inode->i_state & I_DIRTY) { + while (inode_state_read(inode) & I_DIRTY) { spin_unlock(&inode->i_lock); ret =3D write_inode_now(inode, true); if (ret) @@ -1265,7 +1265,7 @@ void sync_bdevs(bool wait) struct block_device *bdev; =20 spin_lock(&inode->i_lock); - if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW) || + if (inode_state_read(inode) & (I_FREEING | I_WILL_FREE | I_NEW) || mapping->nrpages =3D=3D 0) { spin_unlock(&inode->i_lock); continue; diff --git a/drivers/dax/super.c b/drivers/dax/super.c index d7714d8afb0f..c00b9dff4a06 100644 --- a/drivers/dax/super.c +++ b/drivers/dax/super.c @@ -433,7 +433,7 @@ static struct dax_device *dax_dev_get(dev_t devt) return NULL; =20 dax_dev =3D to_dax_dev(inode); - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { set_bit(DAXDEV_ALIVE, &dax_dev->flags); inode->i_cdev =3D &dax_dev->cdev; inode->i_mode =3D S_IFCHR; diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c index d0c77ec31b1d..8666c9c62258 100644 --- a/fs/9p/vfs_inode.c +++ b/fs/9p/vfs_inode.c @@ -422,7 +422,7 @@ static struct inode *v9fs_qid_iget(struct super_block *= sb, inode =3D iget5_locked(sb, QID2INO(qid), test, v9fs_set_inode, st); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; /* * initialize the inode with the stat info diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c index be297e335468..1661a25f2772 100644 --- a/fs/9p/vfs_inode_dotl.c +++ b/fs/9p/vfs_inode_dotl.c @@ -112,7 +112,7 @@ static struct inode *v9fs_qid_iget_dotl(struct super_bl= ock *sb, inode =3D iget5_locked(sb, QID2INO(qid), test, v9fs_set_inode_dotl, st); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; /* * initialize the inode with the stat info diff --git a/fs/affs/inode.c b/fs/affs/inode.c index 0210df8d3500..0bfc7d151dcd 100644 --- a/fs/affs/inode.c +++ b/fs/affs/inode.c @@ -29,7 +29,7 @@ struct inode *affs_iget(struct super_block *sb, unsigned = long ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 pr_debug("affs_iget(%lu)\n", inode->i_ino); diff --git a/fs/afs/dynroot.c b/fs/afs/dynroot.c index 8c6130789fde..475012555100 100644 --- a/fs/afs/dynroot.c +++ b/fs/afs/dynroot.c @@ -64,7 +64,7 @@ static struct inode *afs_iget_pseudo_dir(struct super_blo= ck *sb, ino_t ino) =20 vnode =3D AFS_FS_I(inode); =20 - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { netfs_inode_init(&vnode->netfs, NULL, false); simple_inode_init_ts(inode); set_nlink(inode, 2); @@ -258,7 +258,7 @@ static struct dentry *afs_lookup_atcell(struct inode *d= ir, struct dentry *dentry =20 vnode =3D AFS_FS_I(inode); =20 - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { netfs_inode_init(&vnode->netfs, NULL, false); simple_inode_init_ts(inode); set_nlink(inode, 1); @@ -383,7 +383,7 @@ struct inode *afs_dynroot_iget_root(struct super_block = *sb) vnode =3D AFS_FS_I(inode); =20 /* there shouldn't be an existing inode */ - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { netfs_inode_init(&vnode->netfs, NULL, false); simple_inode_init_ts(inode); set_nlink(inode, 2); diff --git a/fs/afs/inode.c b/fs/afs/inode.c index e1cb17b85791..2fe2ccf59c7a 100644 --- a/fs/afs/inode.c +++ b/fs/afs/inode.c @@ -579,7 +579,7 @@ struct inode *afs_iget(struct afs_operation *op, struct= afs_vnode_param *vp) inode, vnode->fid.vid, vnode->fid.vnode, vnode->fid.unique); =20 /* deal with an existing inode */ - if (!(inode->i_state & I_NEW)) { + if (!(inode_state_read_once(inode) & I_NEW)) { _leave(" =3D %p", inode); return inode; } @@ -639,7 +639,7 @@ struct inode *afs_root_iget(struct super_block *sb, str= uct key *key) =20 _debug("GOT ROOT INODE %p { vl=3D%llx }", inode, as->volume->vid); =20 - BUG_ON(!(inode->i_state & I_NEW)); + BUG_ON(!(inode_state_read_once(inode) & I_NEW)); =20 vnode =3D AFS_FS_I(inode); vnode->cb_v_check =3D atomic_read(&as->volume->cb_v_break); @@ -748,7 +748,7 @@ void afs_evict_inode(struct inode *inode) =20 if ((S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) && - (inode->i_state & I_DIRTY) && + (inode_state_read_once(inode) & I_DIRTY) && !sbi->dyn_root) { struct writeback_control wbc =3D { .sync_mode =3D WB_SYNC_ALL, diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c index 8f430ff8e445..9fcfdd6b8189 100644 --- a/fs/befs/linuxvfs.c +++ b/fs/befs/linuxvfs.c @@ -307,7 +307,7 @@ static struct inode *befs_iget(struct super_block *sb, = unsigned long ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 befs_ino =3D BEFS_I(inode); diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c index 1d41ce477df5..cb406a6ee811 100644 --- a/fs/bfs/inode.c +++ b/fs/bfs/inode.c @@ -42,7 +42,7 @@ struct inode *bfs_iget(struct super_block *sb, unsigned l= ong ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 if ((ino < BFS_ROOT_INO) || (ino > BFS_SB(inode->i_sb)->si_lasti)) { diff --git a/fs/buffer.c b/fs/buffer.c index 6a8752f7bbed..17b8ce567cc3 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -611,9 +611,9 @@ int generic_buffers_fsync_noflush(struct file *file, lo= ff_t start, loff_t end, return err; =20 ret =3D sync_mapping_buffers(inode->i_mapping); - if (!(inode->i_state & I_DIRTY_ALL)) + if (!(inode_state_read_once(inode) & I_DIRTY_ALL)) goto out; - if (datasync && !(inode->i_state & I_DIRTY_DATASYNC)) + if (datasync && !(inode_state_read_once(inode) & I_DIRTY_DATASYNC)) goto out; =20 err =3D sync_inode_metadata(inode, 1); diff --git a/fs/coda/cnode.c b/fs/coda/cnode.c index 62a3d2565c26..70bb0579b40c 100644 --- a/fs/coda/cnode.c +++ b/fs/coda/cnode.c @@ -70,7 +70,7 @@ struct inode * coda_iget(struct super_block * sb, struct = CodaFid * fid, if (!inode) return ERR_PTR(-ENOMEM); =20 - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { cii =3D ITOC(inode); /* we still need to set i_ino for things like stat(2) */ inode->i_ino =3D hash; @@ -148,7 +148,7 @@ struct inode *coda_fid_to_inode(struct CodaFid *fid, st= ruct super_block *sb) =20 /* we should never see newly created inodes because we intentionally * fail in the initialization callback */ - BUG_ON(inode->i_state & I_NEW); + BUG_ON(inode_state_read_once(inode) & I_NEW); =20 return inode; } diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c index ca54bf24b719..e54ebe402df7 100644 --- a/fs/cramfs/inode.c +++ b/fs/cramfs/inode.c @@ -95,7 +95,7 @@ static struct inode *get_cramfs_inode(struct super_block = *sb, inode =3D iget_locked(sb, cramino(cramfs_inode, offset)); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 switch (cramfs_inode->mode & S_IFMT) { diff --git a/fs/crypto/keyring.c b/fs/crypto/keyring.c index 3adbd7167055..5e939ea3ac28 100644 --- a/fs/crypto/keyring.c +++ b/fs/crypto/keyring.c @@ -945,7 +945,7 @@ static void evict_dentries_for_decrypted_inodes(struct = fscrypt_master_key *mk) list_for_each_entry(ci, &mk->mk_decrypted_inodes, ci_master_key_link) { inode =3D ci->ci_inode; spin_lock(&inode->i_lock); - if (inode->i_state & (I_FREEING | I_WILL_FREE | I_NEW)) { + if (inode_state_read(inode) & (I_FREEING | I_WILL_FREE | I_NEW)) { spin_unlock(&inode->i_lock); continue; } diff --git a/fs/crypto/keysetup.c b/fs/crypto/keysetup.c index 4bd3918f50e3..40fa05688d3a 100644 --- a/fs/crypto/keysetup.c +++ b/fs/crypto/keysetup.c @@ -834,7 +834,7 @@ int fscrypt_drop_inode(struct inode *inode) * userspace is still using the files, inodes can be dirtied between * then and now. We mustn't lose any writes, so skip dirty inodes here. */ - if (inode->i_state & I_DIRTY_ALL) + if (inode_state_read(inode) & I_DIRTY_ALL) return 0; =20 /* diff --git a/fs/dcache.c b/fs/dcache.c index 806d6a665124..78ffa7b7e824 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -794,7 +794,7 @@ void d_mark_dontcache(struct inode *inode) de->d_flags |=3D DCACHE_DONTCACHE; spin_unlock(&de->d_lock); } - inode->i_state |=3D I_DONTCACHE; + inode_state_set(inode, I_DONTCACHE); spin_unlock(&inode->i_lock); } EXPORT_SYMBOL(d_mark_dontcache); @@ -1073,7 +1073,7 @@ struct dentry *d_find_alias_rcu(struct inode *inode) spin_lock(&inode->i_lock); // ->i_dentry and ->i_rcu are colocated, but the latter won't be // used without having I_FREEING set, which means no aliases left - if (likely(!(inode->i_state & I_FREEING) && !hlist_empty(l))) { + if (likely(!(inode_state_read(inode) & I_FREEING) && !hlist_empty(l))) { if (S_ISDIR(inode->i_mode)) { de =3D hlist_entry(l->first, struct dentry, d_u.d_alias); } else { @@ -1980,12 +1980,12 @@ void d_instantiate_new(struct dentry *entry, struct= inode *inode) security_d_instantiate(entry, inode); spin_lock(&inode->i_lock); __d_instantiate(entry, inode); - WARN_ON(!(inode->i_state & I_NEW)); + WARN_ON(!(inode_state_read(inode) & I_NEW)); /* * Pairs with smp_rmb in wait_on_inode(). */ smp_wmb(); - inode->i_state &=3D ~I_NEW & ~I_CREATING; + inode_state_clear(inode, I_NEW | I_CREATING); /* * Pairs with the barrier in prepare_to_wait_event() to make sure * ___wait_var_event() either sees the bit cleared or diff --git a/fs/drop_caches.c b/fs/drop_caches.c index 019a8b4eaaf9..49f56a598ecb 100644 --- a/fs/drop_caches.c +++ b/fs/drop_caches.c @@ -28,7 +28,7 @@ static void drop_pagecache_sb(struct super_block *sb, voi= d *unused) * inodes without pages but we deliberately won't in case * we need to reschedule to avoid softlockups. */ - if ((inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) || + if ((inode_state_read(inode) & (I_FREEING | I_WILL_FREE | I_NEW)) || (mapping_empty(inode->i_mapping) && !need_resched())) { spin_unlock(&inode->i_lock); continue; diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index ed1394da8d6b..f3c68ef0271f 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c @@ -95,7 +95,7 @@ static struct inode *__ecryptfs_get_inode(struct inode *l= ower_inode, iput(lower_inode); return ERR_PTR(-EACCES); } - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) iput(lower_inode); =20 return inode; @@ -106,7 +106,7 @@ struct inode *ecryptfs_get_inode(struct inode *lower_in= ode, { struct inode *inode =3D __ecryptfs_get_inode(lower_inode, sb); =20 - if (!IS_ERR(inode) && (inode->i_state & I_NEW)) + if (!IS_ERR(inode) && (inode_state_read_once(inode) & I_NEW)) unlock_new_inode(inode); =20 return inode; @@ -364,7 +364,7 @@ static struct dentry *ecryptfs_lookup_interpose(struct = dentry *dentry, } } =20 - if (inode->i_state & I_NEW) + if (inode_state_read_once(inode) & I_NEW) unlock_new_inode(inode); return d_splice_alias(inode, dentry); } diff --git a/fs/efs/inode.c b/fs/efs/inode.c index 462619e59766..28407578f83a 100644 --- a/fs/efs/inode.c +++ b/fs/efs/inode.c @@ -62,7 +62,7 @@ struct inode *efs_iget(struct super_block *super, unsigne= d long ino) inode =3D iget_locked(super, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 in =3D INODE_INFO(inode); diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c index cb780c095d28..bce98c845a18 100644 --- a/fs/erofs/inode.c +++ b/fs/erofs/inode.c @@ -295,7 +295,7 @@ struct inode *erofs_iget(struct super_block *sb, erofs_= nid_t nid) if (!inode) return ERR_PTR(-ENOMEM); =20 - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { int err =3D erofs_fill_inode(inode); =20 if (err) { diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index e10c376843d7..dbfe9098a124 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c @@ -1398,7 +1398,7 @@ struct inode *ext2_iget (struct super_block *sb, unsi= gned long ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 ei =3D EXT2_I(inode); diff --git a/fs/freevxfs/vxfs_inode.c b/fs/freevxfs/vxfs_inode.c index 20600e9ea202..21fc94b98209 100644 --- a/fs/freevxfs/vxfs_inode.c +++ b/fs/freevxfs/vxfs_inode.c @@ -258,7 +258,7 @@ vxfs_iget(struct super_block *sbp, ino_t ino) ip =3D iget_locked(sbp, ino); if (!ip) return ERR_PTR(-ENOMEM); - if (!(ip->i_state & I_NEW)) + if (!(inode_state_read_once(ip) & I_NEW)) return ip; =20 vip =3D VXFS_INO(ip); diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 9cda19a40ca2..f784d8b09b04 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -121,7 +121,7 @@ static bool inode_io_list_move_locked(struct inode *ino= de, { assert_spin_locked(&wb->list_lock); assert_spin_locked(&inode->i_lock); - WARN_ON_ONCE(inode->i_state & I_FREEING); + WARN_ON_ONCE(inode_state_read(inode) & I_FREEING); =20 list_move(&inode->i_io_list, head); =20 @@ -304,9 +304,9 @@ static void inode_cgwb_move_to_attached(struct inode *i= node, { assert_spin_locked(&wb->list_lock); assert_spin_locked(&inode->i_lock); - WARN_ON_ONCE(inode->i_state & I_FREEING); + WARN_ON_ONCE(inode_state_read(inode) & I_FREEING); =20 - inode->i_state &=3D ~I_SYNC_QUEUED; + inode_state_clear(inode, I_SYNC_QUEUED); if (wb !=3D &wb->bdi->wb) list_move(&inode->i_io_list, &wb->b_attached); else @@ -408,7 +408,7 @@ static bool inode_do_switch_wbs(struct inode *inode, * Once I_FREEING or I_WILL_FREE are visible under i_lock, the eviction * path owns the inode and we shouldn't modify ->i_io_list. */ - if (unlikely(inode->i_state & (I_FREEING | I_WILL_FREE))) + if (unlikely(inode_state_read(inode) & (I_FREEING | I_WILL_FREE))) goto skip_switch; =20 trace_inode_switch_wbs(inode, old_wb, new_wb); @@ -451,7 +451,7 @@ static bool inode_do_switch_wbs(struct inode *inode, if (!list_empty(&inode->i_io_list)) { inode->i_wb =3D new_wb; =20 - if (inode->i_state & I_DIRTY_ALL) { + if (inode_state_read(inode) & I_DIRTY_ALL) { /* * We need to keep b_dirty list sorted by * dirtied_time_when. However properly sorting the @@ -480,7 +480,7 @@ static bool inode_do_switch_wbs(struct inode *inode, * ensures that the new wb is visible if they see !I_WB_SWITCH. */ smp_wmb(); - inode->i_state &=3D ~I_WB_SWITCH; + inode_state_clear(inode, I_WB_SWITCH); =20 xa_unlock_irq(&mapping->i_pages); spin_unlock(&inode->i_lock); @@ -601,12 +601,12 @@ static bool inode_prepare_wbs_switch(struct inode *in= ode, /* while holding I_WB_SWITCH, no one else can update the association */ spin_lock(&inode->i_lock); if (!(inode->i_sb->s_flags & SB_ACTIVE) || - inode->i_state & (I_WB_SWITCH | I_FREEING | I_WILL_FREE) || + inode_state_read(inode) & (I_WB_SWITCH | I_FREEING | I_WILL_FREE) || inode_to_wb(inode) =3D=3D new_wb) { spin_unlock(&inode->i_lock); return false; } - inode->i_state |=3D I_WB_SWITCH; + inode_state_set(inode, I_WB_SWITCH); __iget(inode); spin_unlock(&inode->i_lock); =20 @@ -636,7 +636,7 @@ static void inode_switch_wbs(struct inode *inode, int n= ew_wb_id) struct bdi_writeback *new_wb =3D NULL; =20 /* noop if seems to be already in progress */ - if (inode->i_state & I_WB_SWITCH) + if (inode_state_read_once(inode) & I_WB_SWITCH) return; =20 /* avoid queueing a new switch if too many are already in flight */ @@ -1237,9 +1237,9 @@ static void inode_cgwb_move_to_attached(struct inode = *inode, { assert_spin_locked(&wb->list_lock); assert_spin_locked(&inode->i_lock); - WARN_ON_ONCE(inode->i_state & I_FREEING); + WARN_ON_ONCE(inode_state_read(inode) & I_FREEING); =20 - inode->i_state &=3D ~I_SYNC_QUEUED; + inode_state_clear(inode, I_SYNC_QUEUED); list_del_init(&inode->i_io_list); wb_io_lists_depopulated(wb); } @@ -1352,7 +1352,7 @@ void inode_io_list_del(struct inode *inode) wb =3D inode_to_wb_and_lock_list(inode); spin_lock(&inode->i_lock); =20 - inode->i_state &=3D ~I_SYNC_QUEUED; + inode_state_clear(inode, I_SYNC_QUEUED); list_del_init(&inode->i_io_list); wb_io_lists_depopulated(wb); =20 @@ -1410,13 +1410,13 @@ static void redirty_tail_locked(struct inode *inode= , struct bdi_writeback *wb) { assert_spin_locked(&inode->i_lock); =20 - inode->i_state &=3D ~I_SYNC_QUEUED; + inode_state_clear(inode, I_SYNC_QUEUED); /* * When the inode is being freed just don't bother with dirty list * tracking. Flush worker will ignore this inode anyway and it will * trigger assertions in inode_io_list_move_locked(). */ - if (inode->i_state & I_FREEING) { + if (inode_state_read(inode) & I_FREEING) { list_del_init(&inode->i_io_list); wb_io_lists_depopulated(wb); return; @@ -1450,7 +1450,7 @@ static void inode_sync_complete(struct inode *inode) { assert_spin_locked(&inode->i_lock); =20 - inode->i_state &=3D ~I_SYNC; + inode_state_clear(inode, I_SYNC); /* If inode is clean an unused, put it into LRU now... */ inode_add_lru(inode); /* Called with inode->i_lock which ensures memory ordering. */ @@ -1494,7 +1494,7 @@ static int move_expired_inodes(struct list_head *dela= ying_queue, spin_lock(&inode->i_lock); list_move(&inode->i_io_list, &tmp); moved++; - inode->i_state |=3D I_SYNC_QUEUED; + inode_state_set(inode, I_SYNC_QUEUED); spin_unlock(&inode->i_lock); if (sb_is_blkdev_sb(inode->i_sb)) continue; @@ -1580,14 +1580,14 @@ void inode_wait_for_writeback(struct inode *inode) =20 assert_spin_locked(&inode->i_lock); =20 - if (!(inode->i_state & I_SYNC)) + if (!(inode_state_read(inode) & I_SYNC)) return; =20 wq_head =3D inode_bit_waitqueue(&wqe, inode, __I_SYNC); for (;;) { prepare_to_wait_event(wq_head, &wqe.wq_entry, TASK_UNINTERRUPTIBLE); /* Checking I_SYNC with inode->i_lock guarantees memory ordering. */ - if (!(inode->i_state & I_SYNC)) + if (!(inode_state_read(inode) & I_SYNC)) break; spin_unlock(&inode->i_lock); schedule(); @@ -1613,7 +1613,7 @@ static void inode_sleep_on_writeback(struct inode *in= ode) wq_head =3D inode_bit_waitqueue(&wqe, inode, __I_SYNC); prepare_to_wait_event(wq_head, &wqe.wq_entry, TASK_UNINTERRUPTIBLE); /* Checking I_SYNC with inode->i_lock guarantees memory ordering. */ - sleep =3D !!(inode->i_state & I_SYNC); + sleep =3D !!(inode_state_read(inode) & I_SYNC); spin_unlock(&inode->i_lock); if (sleep) schedule(); @@ -1632,7 +1632,7 @@ static void requeue_inode(struct inode *inode, struct= bdi_writeback *wb, struct writeback_control *wbc, unsigned long dirtied_before) { - if (inode->i_state & I_FREEING) + if (inode_state_read(inode) & I_FREEING) return; =20 /* @@ -1640,7 +1640,7 @@ static void requeue_inode(struct inode *inode, struct= bdi_writeback *wb, * shot. If still dirty, it will be redirty_tail()'ed below. Update * the dirty time to prevent enqueue and sync it again. */ - if ((inode->i_state & I_DIRTY) && + if ((inode_state_read(inode) & I_DIRTY) && (wbc->sync_mode =3D=3D WB_SYNC_ALL || wbc->tagged_writepages)) inode->dirtied_when =3D jiffies; =20 @@ -1651,7 +1651,7 @@ static void requeue_inode(struct inode *inode, struct= bdi_writeback *wb, * is odd for clean inodes, it can happen for some * filesystems so handle that gracefully. */ - if (inode->i_state & I_DIRTY_ALL) + if (inode_state_read(inode) & I_DIRTY_ALL) redirty_tail_locked(inode, wb); else inode_cgwb_move_to_attached(inode, wb); @@ -1677,17 +1677,17 @@ static void requeue_inode(struct inode *inode, stru= ct bdi_writeback *wb, */ redirty_tail_locked(inode, wb); } - } else if (inode->i_state & I_DIRTY) { + } else if (inode_state_read(inode) & I_DIRTY) { /* * Filesystems can dirty the inode during writeback operations, * such as delayed allocation during submission or metadata * updates after data IO completion. */ redirty_tail_locked(inode, wb); - } else if (inode->i_state & I_DIRTY_TIME) { + } else if (inode_state_read(inode) & I_DIRTY_TIME) { inode->dirtied_when =3D jiffies; inode_io_list_move_locked(inode, wb, &wb->b_dirty_time); - inode->i_state &=3D ~I_SYNC_QUEUED; + inode_state_clear(inode, I_SYNC_QUEUED); } else { /* The inode is clean. Remove from writeback lists. */ inode_cgwb_move_to_attached(inode, wb); @@ -1713,7 +1713,7 @@ __writeback_single_inode(struct inode *inode, struct = writeback_control *wbc) unsigned dirty; int ret; =20 - WARN_ON(!(inode->i_state & I_SYNC)); + WARN_ON(!(inode_state_read_once(inode) & I_SYNC)); =20 trace_writeback_single_inode_start(inode, wbc, nr_to_write); =20 @@ -1737,7 +1737,7 @@ __writeback_single_inode(struct inode *inode, struct = writeback_control *wbc) * mark_inode_dirty_sync() to notify the filesystem about it and to * change I_DIRTY_TIME into I_DIRTY_SYNC. */ - if ((inode->i_state & I_DIRTY_TIME) && + if ((inode_state_read_once(inode) & I_DIRTY_TIME) && (wbc->sync_mode =3D=3D WB_SYNC_ALL || time_after(jiffies, inode->dirtied_time_when + dirtytime_expire_interval * HZ))) { @@ -1752,8 +1752,8 @@ __writeback_single_inode(struct inode *inode, struct = writeback_control *wbc) * after handling timestamp expiration, as that may dirty the inode too. */ spin_lock(&inode->i_lock); - dirty =3D inode->i_state & I_DIRTY; - inode->i_state &=3D ~dirty; + dirty =3D inode_state_read(inode) & I_DIRTY; + inode_state_clear(inode, dirty); =20 /* * Paired with smp_mb() in __mark_inode_dirty(). This allows @@ -1769,10 +1769,10 @@ __writeback_single_inode(struct inode *inode, struc= t writeback_control *wbc) smp_mb(); =20 if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) - inode->i_state |=3D I_DIRTY_PAGES; - else if (unlikely(inode->i_state & I_PINNING_NETFS_WB)) { - if (!(inode->i_state & I_DIRTY_PAGES)) { - inode->i_state &=3D ~I_PINNING_NETFS_WB; + inode_state_set(inode, I_DIRTY_PAGES); + else if (unlikely(inode_state_read(inode) & I_PINNING_NETFS_WB)) { + if (!(inode_state_read(inode) & I_DIRTY_PAGES)) { + inode_state_clear(inode, I_PINNING_NETFS_WB); wbc->unpinned_netfs_wb =3D true; dirty |=3D I_PINNING_NETFS_WB; /* Cause write_inode */ } @@ -1808,11 +1808,11 @@ static int writeback_single_inode(struct inode *ino= de, =20 spin_lock(&inode->i_lock); if (!icount_read(inode)) - WARN_ON(!(inode->i_state & (I_WILL_FREE|I_FREEING))); + WARN_ON(!(inode_state_read(inode) & (I_WILL_FREE | I_FREEING))); else - WARN_ON(inode->i_state & I_WILL_FREE); + WARN_ON(inode_state_read(inode) & I_WILL_FREE); =20 - if (inode->i_state & I_SYNC) { + if (inode_state_read(inode) & I_SYNC) { /* * Writeback is already running on the inode. For WB_SYNC_NONE, * that's enough and we can just return. For WB_SYNC_ALL, we @@ -1823,7 +1823,7 @@ static int writeback_single_inode(struct inode *inode, goto out; inode_wait_for_writeback(inode); } - WARN_ON(inode->i_state & I_SYNC); + WARN_ON(inode_state_read(inode) & I_SYNC); /* * If the inode is already fully clean, then there's nothing to do. * @@ -1831,11 +1831,11 @@ static int writeback_single_inode(struct inode *ino= de, * still under writeback, e.g. due to prior WB_SYNC_NONE writeback. If * there are any such pages, we'll need to wait for them. */ - if (!(inode->i_state & I_DIRTY_ALL) && + if (!(inode_state_read(inode) & I_DIRTY_ALL) && (wbc->sync_mode !=3D WB_SYNC_ALL || !mapping_tagged(inode->i_mapping, PAGECACHE_TAG_WRITEBACK))) goto out; - inode->i_state |=3D I_SYNC; + inode_state_set(inode, I_SYNC); wbc_attach_and_unlock_inode(wbc, inode); =20 ret =3D __writeback_single_inode(inode, wbc); @@ -1848,18 +1848,18 @@ static int writeback_single_inode(struct inode *ino= de, * If the inode is freeing, its i_io_list shoudn't be updated * as it can be finally deleted at this moment. */ - if (!(inode->i_state & I_FREEING)) { + if (!(inode_state_read(inode) & I_FREEING)) { /* * If the inode is now fully clean, then it can be safely * removed from its writeback list (if any). Otherwise the * flusher threads are responsible for the writeback lists. */ - if (!(inode->i_state & I_DIRTY_ALL)) + if (!(inode_state_read(inode) & I_DIRTY_ALL)) inode_cgwb_move_to_attached(inode, wb); - else if (!(inode->i_state & I_SYNC_QUEUED)) { - if ((inode->i_state & I_DIRTY)) + else if (!(inode_state_read(inode) & I_SYNC_QUEUED)) { + if ((inode_state_read(inode) & I_DIRTY)) redirty_tail_locked(inode, wb); - else if (inode->i_state & I_DIRTY_TIME) { + else if (inode_state_read(inode) & I_DIRTY_TIME) { inode->dirtied_when =3D jiffies; inode_io_list_move_locked(inode, wb, @@ -1968,12 +1968,12 @@ static long writeback_sb_inodes(struct super_block = *sb, * kind writeout is handled by the freer. */ spin_lock(&inode->i_lock); - if (inode->i_state & (I_NEW | I_FREEING | I_WILL_FREE)) { + if (inode_state_read(inode) & (I_NEW | I_FREEING | I_WILL_FREE)) { redirty_tail_locked(inode, wb); spin_unlock(&inode->i_lock); continue; } - if ((inode->i_state & I_SYNC) && wbc.sync_mode !=3D WB_SYNC_ALL) { + if ((inode_state_read(inode) & I_SYNC) && wbc.sync_mode !=3D WB_SYNC_ALL= ) { /* * If this inode is locked for writeback and we are not * doing writeback-for-data-integrity, move it to @@ -1995,14 +1995,14 @@ static long writeback_sb_inodes(struct super_block = *sb, * are doing WB_SYNC_NONE writeback. So this catches only the * WB_SYNC_ALL case. */ - if (inode->i_state & I_SYNC) { + if (inode_state_read(inode) & I_SYNC) { /* Wait for I_SYNC. This function drops i_lock... */ inode_sleep_on_writeback(inode); /* Inode may be gone, start again */ spin_lock(&wb->list_lock); continue; } - inode->i_state |=3D I_SYNC; + inode_state_set(inode, I_SYNC); wbc_attach_and_unlock_inode(&wbc, inode); =20 write_chunk =3D writeback_chunk_size(wb, work); @@ -2040,7 +2040,7 @@ static long writeback_sb_inodes(struct super_block *s= b, */ tmp_wb =3D inode_to_wb_and_lock_list(inode); spin_lock(&inode->i_lock); - if (!(inode->i_state & I_DIRTY_ALL)) + if (!(inode_state_read(inode) & I_DIRTY_ALL)) total_wrote++; requeue_inode(inode, tmp_wb, &wbc, dirtied_before); inode_sync_complete(inode); @@ -2546,10 +2546,10 @@ void __mark_inode_dirty(struct inode *inode, int fl= ags) * We tell ->dirty_inode callback that timestamps need to * be updated by setting I_DIRTY_TIME in flags. */ - if (inode->i_state & I_DIRTY_TIME) { + if (inode_state_read_once(inode) & I_DIRTY_TIME) { spin_lock(&inode->i_lock); - if (inode->i_state & I_DIRTY_TIME) { - inode->i_state &=3D ~I_DIRTY_TIME; + if (inode_state_read(inode) & I_DIRTY_TIME) { + inode_state_clear(inode, I_DIRTY_TIME); flags |=3D I_DIRTY_TIME; } spin_unlock(&inode->i_lock); @@ -2586,16 +2586,16 @@ void __mark_inode_dirty(struct inode *inode, int fl= ags) */ smp_mb(); =20 - if ((inode->i_state & flags) =3D=3D flags) + if ((inode_state_read_once(inode) & flags) =3D=3D flags) return; =20 spin_lock(&inode->i_lock); - if ((inode->i_state & flags) !=3D flags) { - const int was_dirty =3D inode->i_state & I_DIRTY; + if ((inode_state_read(inode) & flags) !=3D flags) { + const int was_dirty =3D inode_state_read(inode) & I_DIRTY; =20 inode_attach_wb(inode, NULL); =20 - inode->i_state |=3D flags; + inode_state_set(inode, flags); =20 /* * Grab inode's wb early because it requires dropping i_lock and we @@ -2614,7 +2614,7 @@ void __mark_inode_dirty(struct inode *inode, int flag= s) * the inode it will place it on the appropriate superblock * list, based upon its state. */ - if (inode->i_state & I_SYNC_QUEUED) + if (inode_state_read(inode) & I_SYNC_QUEUED) goto out_unlock; =20 /* @@ -2625,7 +2625,7 @@ void __mark_inode_dirty(struct inode *inode, int flag= s) if (inode_unhashed(inode)) goto out_unlock; } - if (inode->i_state & I_FREEING) + if (inode_state_read(inode) & I_FREEING) goto out_unlock; =20 /* @@ -2640,7 +2640,7 @@ void __mark_inode_dirty(struct inode *inode, int flag= s) if (dirtytime) inode->dirtied_time_when =3D jiffies; =20 - if (inode->i_state & I_DIRTY) + if (inode_state_read(inode) & I_DIRTY) dirty_list =3D &wb->b_dirty; else dirty_list =3D &wb->b_dirty_time; @@ -2737,7 +2737,7 @@ static void wait_sb_inodes(struct super_block *sb) spin_unlock_irq(&sb->s_inode_wblist_lock); =20 spin_lock(&inode->i_lock); - if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) { + if (inode_state_read(inode) & (I_FREEING | I_WILL_FREE | I_NEW)) { spin_unlock(&inode->i_lock); =20 spin_lock_irq(&sb->s_inode_wblist_lock); diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index d1babf56f254..bbecd0e5855d 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -160,7 +160,7 @@ static void fuse_evict_inode(struct inode *inode) struct fuse_inode *fi =3D get_fuse_inode(inode); =20 /* Will write inode on close/munmap and in all other dirtiers */ - WARN_ON(inode->i_state & I_DIRTY_INODE); + WARN_ON(inode_state_read_once(inode) & I_DIRTY_INODE); =20 if (FUSE_IS_DAX(inode)) dax_break_layout_final(inode); @@ -505,7 +505,7 @@ struct inode *fuse_iget(struct super_block *sb, u64 nod= eid, if (!inode) return NULL; =20 - if ((inode->i_state & I_NEW)) { + if ((inode_state_read_once(inode) & I_NEW)) { inode->i_flags |=3D S_NOATIME; if (!fc->writeback_cache || !S_ISREG(attr->mode)) inode->i_flags |=3D S_NOCMTIME; diff --git a/fs/hfs/btree.c b/fs/hfs/btree.c index 22e62fe7448b..54c20d01c342 100644 --- a/fs/hfs/btree.c +++ b/fs/hfs/btree.c @@ -42,7 +42,7 @@ struct hfs_btree *hfs_btree_open(struct super_block *sb, = u32 id, btree_keycmp ke tree->inode =3D iget_locked(sb, id); if (!tree->inode) goto free_tree; - BUG_ON(!(tree->inode->i_state & I_NEW)); + BUG_ON(!(inode_state_read_once(tree->inode) & I_NEW)); { struct hfs_mdb *mdb =3D HFS_SB(sb)->mdb; HFS_I(tree->inode)->flags =3D 0; diff --git a/fs/hfs/inode.c b/fs/hfs/inode.c index 9cd449913dc8..81ad93e6312f 100644 --- a/fs/hfs/inode.c +++ b/fs/hfs/inode.c @@ -412,7 +412,7 @@ struct inode *hfs_iget(struct super_block *sb, struct h= fs_cat_key *key, hfs_cat_ return NULL; } inode =3D iget5_locked(sb, cnid, hfs_test_inode, hfs_read_inode, &data); - if (inode && (inode->i_state & I_NEW)) + if (inode && (inode_state_read_once(inode) & I_NEW)) unlock_new_inode(inode); return inode; } diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c index 16bc4abc67e0..54e85e25a259 100644 --- a/fs/hfsplus/super.c +++ b/fs/hfsplus/super.c @@ -65,7 +65,7 @@ struct inode *hfsplus_iget(struct super_block *sb, unsign= ed long ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 atomic_set(&HFSPLUS_I(inode)->opencnt, 0); diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index 1e1acf5775ab..76b643f7d05c 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c @@ -581,7 +581,7 @@ static struct inode *hostfs_iget(struct super_block *sb= , char *name) if (!inode) return ERR_PTR(-ENOMEM); =20 - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { unlock_new_inode(inode); } else { spin_lock(&inode->i_lock); diff --git a/fs/hpfs/dir.c b/fs/hpfs/dir.c index 49dd585c2b17..ceb50b2dc91a 100644 --- a/fs/hpfs/dir.c +++ b/fs/hpfs/dir.c @@ -247,7 +247,7 @@ struct dentry *hpfs_lookup(struct inode *dir, struct de= ntry *dentry, unsigned in result =3D ERR_PTR(-ENOMEM); goto bail1; } - if (result->i_state & I_NEW) { + if (inode_state_read_once(result) & I_NEW) { hpfs_init_inode(result); if (de->directory) hpfs_read_inode(result); diff --git a/fs/hpfs/inode.c b/fs/hpfs/inode.c index 34008442ee26..93d528f4f4f2 100644 --- a/fs/hpfs/inode.c +++ b/fs/hpfs/inode.c @@ -196,7 +196,7 @@ void hpfs_write_inode(struct inode *i) parent =3D iget_locked(i->i_sb, hpfs_inode->i_parent_dir); if (parent) { hpfs_inode->i_dirty =3D 0; - if (parent->i_state & I_NEW) { + if (inode_state_read_once(parent) & I_NEW) { hpfs_init_inode(parent); hpfs_read_inode(parent); unlock_new_inode(parent); diff --git a/fs/inode.c b/fs/inode.c index 37fc7a72aba5..f094ed3e6f30 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -233,7 +233,7 @@ int inode_init_always_gfp(struct super_block *sb, struc= t inode *inode, gfp_t gfp inode->i_sb =3D sb; inode->i_blkbits =3D sb->s_blocksize_bits; inode->i_flags =3D 0; - inode->i_state =3D 0; + inode_state_assign_raw(inode, 0); atomic64_set(&inode->i_sequence, 0); atomic_set(&inode->i_count, 1); inode->i_op =3D &empty_iops; @@ -471,7 +471,7 @@ EXPORT_SYMBOL(set_nlink); void inc_nlink(struct inode *inode) { if (unlikely(inode->i_nlink =3D=3D 0)) { - WARN_ON(!(inode->i_state & I_LINKABLE)); + WARN_ON(!(inode_state_read_once(inode) & I_LINKABLE)); atomic_long_dec(&inode->i_sb->s_remove_count); } =20 @@ -532,7 +532,7 @@ EXPORT_SYMBOL(ihold); =20 static void __inode_add_lru(struct inode *inode, bool rotate) { - if (inode->i_state & (I_DIRTY_ALL | I_SYNC | I_FREEING | I_WILL_FREE)) + if (inode_state_read(inode) & (I_DIRTY_ALL | I_SYNC | I_FREEING | I_WILL_= FREE)) return; if (icount_read(inode)) return; @@ -544,7 +544,7 @@ static void __inode_add_lru(struct inode *inode, bool r= otate) if (list_lru_add_obj(&inode->i_sb->s_inode_lru, &inode->i_lru)) this_cpu_inc(nr_unused); else if (rotate) - inode->i_state |=3D I_REFERENCED; + inode_state_set(inode, I_REFERENCED); } =20 struct wait_queue_head *inode_bit_waitqueue(struct wait_bit_queue_entry *w= qe, @@ -577,15 +577,15 @@ static void inode_lru_list_del(struct inode *inode) static void inode_pin_lru_isolating(struct inode *inode) { lockdep_assert_held(&inode->i_lock); - WARN_ON(inode->i_state & (I_LRU_ISOLATING | I_FREEING | I_WILL_FREE)); - inode->i_state |=3D I_LRU_ISOLATING; + WARN_ON(inode_state_read(inode) & (I_LRU_ISOLATING | I_FREEING | I_WILL_F= REE)); + inode_state_set(inode, I_LRU_ISOLATING); } =20 static void inode_unpin_lru_isolating(struct inode *inode) { spin_lock(&inode->i_lock); - WARN_ON(!(inode->i_state & I_LRU_ISOLATING)); - inode->i_state &=3D ~I_LRU_ISOLATING; + WARN_ON(!(inode_state_read(inode) & I_LRU_ISOLATING)); + inode_state_clear(inode, I_LRU_ISOLATING); /* Called with inode->i_lock which ensures memory ordering. */ inode_wake_up_bit(inode, __I_LRU_ISOLATING); spin_unlock(&inode->i_lock); @@ -597,7 +597,7 @@ static void inode_wait_for_lru_isolating(struct inode *= inode) struct wait_queue_head *wq_head; =20 lockdep_assert_held(&inode->i_lock); - if (!(inode->i_state & I_LRU_ISOLATING)) + if (!(inode_state_read(inode) & I_LRU_ISOLATING)) return; =20 wq_head =3D inode_bit_waitqueue(&wqe, inode, __I_LRU_ISOLATING); @@ -607,14 +607,14 @@ static void inode_wait_for_lru_isolating(struct inode= *inode) * Checking I_LRU_ISOLATING with inode->i_lock guarantees * memory ordering. */ - if (!(inode->i_state & I_LRU_ISOLATING)) + if (!(inode_state_read(inode) & I_LRU_ISOLATING)) break; spin_unlock(&inode->i_lock); schedule(); spin_lock(&inode->i_lock); } finish_wait(wq_head, &wqe.wq_entry); - WARN_ON(inode->i_state & I_LRU_ISOLATING); + WARN_ON(inode_state_read(inode) & I_LRU_ISOLATING); } =20 /** @@ -761,11 +761,11 @@ void clear_inode(struct inode *inode) */ xa_unlock_irq(&inode->i_data.i_pages); BUG_ON(!list_empty(&inode->i_data.i_private_list)); - BUG_ON(!(inode->i_state & I_FREEING)); - BUG_ON(inode->i_state & I_CLEAR); + BUG_ON(!(inode_state_read_once(inode) & I_FREEING)); + BUG_ON(inode_state_read_once(inode) & I_CLEAR); BUG_ON(!list_empty(&inode->i_wb_list)); /* don't need i_lock here, no concurrent mods to i_state */ - inode->i_state =3D I_FREEING | I_CLEAR; + inode_state_assign_raw(inode, I_FREEING | I_CLEAR); } EXPORT_SYMBOL(clear_inode); =20 @@ -786,7 +786,7 @@ static void evict(struct inode *inode) { const struct super_operations *op =3D inode->i_sb->s_op; =20 - BUG_ON(!(inode->i_state & I_FREEING)); + BUG_ON(!(inode_state_read_once(inode) & I_FREEING)); BUG_ON(!list_empty(&inode->i_lru)); =20 if (!list_empty(&inode->i_io_list)) @@ -879,12 +879,12 @@ void evict_inodes(struct super_block *sb) spin_unlock(&inode->i_lock); continue; } - if (inode->i_state & (I_NEW | I_FREEING | I_WILL_FREE)) { + if (inode_state_read(inode) & (I_NEW | I_FREEING | I_WILL_FREE)) { spin_unlock(&inode->i_lock); continue; } =20 - inode->i_state |=3D I_FREEING; + inode_state_set(inode, I_FREEING); inode_lru_list_del(inode); spin_unlock(&inode->i_lock); list_add(&inode->i_lru, &dispose); @@ -938,7 +938,7 @@ static enum lru_status inode_lru_isolate(struct list_he= ad *item, * sync, or the last page cache deletion will requeue them. */ if (icount_read(inode) || - (inode->i_state & ~I_REFERENCED) || + (inode_state_read(inode) & ~I_REFERENCED) || !mapping_shrinkable(&inode->i_data)) { list_lru_isolate(lru, &inode->i_lru); spin_unlock(&inode->i_lock); @@ -947,8 +947,8 @@ static enum lru_status inode_lru_isolate(struct list_he= ad *item, } =20 /* Recently referenced inodes get one more pass */ - if (inode->i_state & I_REFERENCED) { - inode->i_state &=3D ~I_REFERENCED; + if (inode_state_read(inode) & I_REFERENCED) { + inode_state_clear(inode, I_REFERENCED); spin_unlock(&inode->i_lock); return LRU_ROTATE; } @@ -975,8 +975,8 @@ static enum lru_status inode_lru_isolate(struct list_he= ad *item, return LRU_RETRY; } =20 - WARN_ON(inode->i_state & I_NEW); - inode->i_state |=3D I_FREEING; + WARN_ON(inode_state_read(inode) & I_NEW); + inode_state_set(inode, I_FREEING); list_lru_isolate_move(lru, &inode->i_lru, freeable); spin_unlock(&inode->i_lock); =20 @@ -1025,11 +1025,11 @@ static struct inode *find_inode(struct super_block = *sb, if (!test(inode, data)) continue; spin_lock(&inode->i_lock); - if (inode->i_state & (I_FREEING|I_WILL_FREE)) { + if (inode_state_read(inode) & (I_FREEING | I_WILL_FREE)) { __wait_on_freeing_inode(inode, is_inode_hash_locked); goto repeat; } - if (unlikely(inode->i_state & I_CREATING)) { + if (unlikely(inode_state_read(inode) & I_CREATING)) { spin_unlock(&inode->i_lock); rcu_read_unlock(); return ERR_PTR(-ESTALE); @@ -1066,11 +1066,11 @@ static struct inode *find_inode_fast(struct super_b= lock *sb, if (inode->i_sb !=3D sb) continue; spin_lock(&inode->i_lock); - if (inode->i_state & (I_FREEING|I_WILL_FREE)) { + if (inode_state_read(inode) & (I_FREEING | I_WILL_FREE)) { __wait_on_freeing_inode(inode, is_inode_hash_locked); goto repeat; } - if (unlikely(inode->i_state & I_CREATING)) { + if (unlikely(inode_state_read(inode) & I_CREATING)) { spin_unlock(&inode->i_lock); rcu_read_unlock(); return ERR_PTR(-ESTALE); @@ -1180,12 +1180,12 @@ void unlock_new_inode(struct inode *inode) { lockdep_annotate_inode_mutex_key(inode); spin_lock(&inode->i_lock); - WARN_ON(!(inode->i_state & I_NEW)); + WARN_ON(!(inode_state_read(inode) & I_NEW)); /* * Pairs with smp_rmb in wait_on_inode(). */ smp_wmb(); - inode->i_state &=3D ~I_NEW & ~I_CREATING; + inode_state_clear(inode, I_NEW | I_CREATING); /* * Pairs with the barrier in prepare_to_wait_event() to make sure * ___wait_var_event() either sees the bit cleared or @@ -1201,12 +1201,12 @@ void discard_new_inode(struct inode *inode) { lockdep_annotate_inode_mutex_key(inode); spin_lock(&inode->i_lock); - WARN_ON(!(inode->i_state & I_NEW)); + WARN_ON(!(inode_state_read(inode) & I_NEW)); /* * Pairs with smp_rmb in wait_on_inode(). */ smp_wmb(); - inode->i_state &=3D ~I_NEW; + inode_state_clear(inode, I_NEW); /* * Pairs with the barrier in prepare_to_wait_event() to make sure * ___wait_var_event() either sees the bit cleared or @@ -1318,7 +1318,7 @@ struct inode *inode_insert5(struct inode *inode, unsi= gned long hashval, * caller is responsible for filling in the contents */ spin_lock(&inode->i_lock); - inode->i_state |=3D I_NEW; + inode_state_set(inode, I_NEW); hlist_add_head_rcu(&inode->i_hash, head); spin_unlock(&inode->i_lock); =20 @@ -1460,7 +1460,7 @@ struct inode *iget_locked(struct super_block *sb, uns= igned long ino) if (!old) { inode->i_ino =3D ino; spin_lock(&inode->i_lock); - inode->i_state =3D I_NEW; + inode_state_assign(inode, I_NEW); hlist_add_head_rcu(&inode->i_hash, head); spin_unlock(&inode->i_lock); spin_unlock(&inode_hash_lock); @@ -1553,7 +1553,7 @@ EXPORT_SYMBOL(iunique); struct inode *igrab(struct inode *inode) { spin_lock(&inode->i_lock); - if (!(inode->i_state & (I_FREEING|I_WILL_FREE))) { + if (!(inode_state_read(inode) & (I_FREEING | I_WILL_FREE))) { __iget(inode); spin_unlock(&inode->i_lock); } else { @@ -1749,7 +1749,7 @@ struct inode *find_inode_rcu(struct super_block *sb, = unsigned long hashval, =20 hlist_for_each_entry_rcu(inode, head, i_hash) { if (inode->i_sb =3D=3D sb && - !(READ_ONCE(inode->i_state) & (I_FREEING | I_WILL_FREE)) && + !(inode_state_read_once(inode) & (I_FREEING | I_WILL_FREE)) && test(inode, data)) return inode; } @@ -1788,7 +1788,7 @@ struct inode *find_inode_by_ino_rcu(struct super_bloc= k *sb, hlist_for_each_entry_rcu(inode, head, i_hash) { if (inode->i_ino =3D=3D ino && inode->i_sb =3D=3D sb && - !(READ_ONCE(inode->i_state) & (I_FREEING | I_WILL_FREE))) + !(inode_state_read_once(inode) & (I_FREEING | I_WILL_FREE))) return inode; } return NULL; @@ -1812,7 +1812,7 @@ int insert_inode_locked(struct inode *inode) if (old->i_sb !=3D sb) continue; spin_lock(&old->i_lock); - if (old->i_state & (I_FREEING|I_WILL_FREE)) { + if (inode_state_read(old) & (I_FREEING | I_WILL_FREE)) { spin_unlock(&old->i_lock); continue; } @@ -1820,13 +1820,13 @@ int insert_inode_locked(struct inode *inode) } if (likely(!old)) { spin_lock(&inode->i_lock); - inode->i_state |=3D I_NEW | I_CREATING; + inode_state_set(inode, I_NEW | I_CREATING); hlist_add_head_rcu(&inode->i_hash, head); spin_unlock(&inode->i_lock); spin_unlock(&inode_hash_lock); return 0; } - if (unlikely(old->i_state & I_CREATING)) { + if (unlikely(inode_state_read(old) & I_CREATING)) { spin_unlock(&old->i_lock); spin_unlock(&inode_hash_lock); return -EBUSY; @@ -1851,7 +1851,7 @@ int insert_inode_locked4(struct inode *inode, unsigne= d long hashval, =20 might_sleep(); =20 - inode->i_state |=3D I_CREATING; + inode_state_set_raw(inode, I_CREATING); old =3D inode_insert5(inode, hashval, test, NULL, data); =20 if (old !=3D inode) { @@ -1886,7 +1886,7 @@ static void iput_final(struct inode *inode) unsigned long state; int drop; =20 - WARN_ON(inode->i_state & I_NEW); + WARN_ON(inode_state_read(inode) & I_NEW); VFS_BUG_ON_INODE(atomic_read(&inode->i_count) !=3D 0, inode); =20 if (op->drop_inode) @@ -1895,7 +1895,7 @@ static void iput_final(struct inode *inode) drop =3D inode_generic_drop(inode); =20 if (!drop && - !(inode->i_state & I_DONTCACHE) && + !(inode_state_read(inode) & I_DONTCACHE) && (sb->s_flags & SB_ACTIVE)) { __inode_add_lru(inode, true); spin_unlock(&inode->i_lock); @@ -1908,7 +1908,7 @@ static void iput_final(struct inode *inode) */ VFS_BUG_ON_INODE(atomic_read(&inode->i_count) !=3D 0, inode); =20 - state =3D inode->i_state; + state =3D inode_state_read(inode); if (!drop) { WRITE_ONCE(inode->i_state, state | I_WILL_FREE); spin_unlock(&inode->i_lock); @@ -1916,7 +1916,7 @@ static void iput_final(struct inode *inode) write_inode_now(inode, 1); =20 spin_lock(&inode->i_lock); - state =3D inode->i_state; + state =3D inode_state_read(inode); WARN_ON(state & I_NEW); state &=3D ~I_WILL_FREE; } @@ -1946,7 +1946,7 @@ void iput(struct inode *inode) =20 retry: lockdep_assert_not_held(&inode->i_lock); - VFS_BUG_ON_INODE(inode->i_state & I_CLEAR, inode); + VFS_BUG_ON_INODE(inode_state_read_once(inode) & I_CLEAR, inode); /* * Note this assert is technically racy as if the count is bogusly * equal to one, then two CPUs racing to further drop it can both @@ -1957,14 +1957,14 @@ void iput(struct inode *inode) if (atomic_add_unless(&inode->i_count, -1, 1)) return; =20 - if ((inode->i_state & I_DIRTY_TIME) && inode->i_nlink) { + if ((inode_state_read_once(inode) & I_DIRTY_TIME) && inode->i_nlink) { trace_writeback_lazytime_iput(inode); mark_inode_dirty_sync(inode); goto retry; } =20 spin_lock(&inode->i_lock); - if (unlikely((inode->i_state & I_DIRTY_TIME) && inode->i_nlink)) { + if (unlikely((inode_state_read(inode) & I_DIRTY_TIME) && inode->i_nlink))= { spin_unlock(&inode->i_lock); goto retry; } diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index 6f0e6b19383c..0d51f57f7ad7 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c @@ -1515,7 +1515,7 @@ struct inode *__isofs_iget(struct super_block *sb, if (!inode) return ERR_PTR(-ENOMEM); =20 - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { ret =3D isofs_read_inode(inode, relocated); if (ret < 0) { iget_failed(inode); diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c index d175cccb7c55..764bba8ba999 100644 --- a/fs/jffs2/fs.c +++ b/fs/jffs2/fs.c @@ -265,7 +265,7 @@ struct inode *jffs2_iget(struct super_block *sb, unsign= ed long ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 f =3D JFFS2_INODE_INFO(inode); @@ -373,7 +373,7 @@ void jffs2_dirty_inode(struct inode *inode, int flags) { struct iattr iattr; =20 - if (!(inode->i_state & I_DIRTY_DATASYNC)) { + if (!(inode_state_read_once(inode) & I_DIRTY_DATASYNC)) { jffs2_dbg(2, "%s(): not calling setattr() for ino #%lu\n", __func__, inode->i_ino); return; diff --git a/fs/jfs/file.c b/fs/jfs/file.c index 2a4a288b821c..87ad042221e7 100644 --- a/fs/jfs/file.c +++ b/fs/jfs/file.c @@ -26,8 +26,8 @@ int jfs_fsync(struct file *file, loff_t start, loff_t end= , int datasync) return rc; =20 inode_lock(inode); - if (!(inode->i_state & I_DIRTY_ALL) || - (datasync && !(inode->i_state & I_DIRTY_DATASYNC))) { + if (!(inode_state_read_once(inode) & I_DIRTY_ALL) || + (datasync && !(inode_state_read_once(inode) & I_DIRTY_DATASYNC))) { /* Make sure committed changes hit the disk */ jfs_flush_journal(JFS_SBI(inode->i_sb)->log, 1); inode_unlock(inode); diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c index 21f3d029da7d..4709762713ef 100644 --- a/fs/jfs/inode.c +++ b/fs/jfs/inode.c @@ -29,7 +29,7 @@ struct inode *jfs_iget(struct super_block *sb, unsigned l= ong ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 ret =3D diRead(inode); diff --git a/fs/jfs/jfs_txnmgr.c b/fs/jfs/jfs_txnmgr.c index 7840a03e5bcb..c16578af3a77 100644 --- a/fs/jfs/jfs_txnmgr.c +++ b/fs/jfs/jfs_txnmgr.c @@ -1287,7 +1287,7 @@ int txCommit(tid_t tid, /* transaction identifier */ * to verify this, only a trivial s/I_LOCK/I_SYNC/ was done. * Joern */ - if (tblk->u.ip->i_state & I_SYNC) + if (inode_state_read_once(tblk->u.ip) & I_SYNC) tblk->xflag &=3D ~COMMIT_LAZY; } =20 diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index 457f91c412d4..a36aaee98dce 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -251,7 +251,7 @@ struct inode *kernfs_get_inode(struct super_block *sb, = struct kernfs_node *kn) struct inode *inode; =20 inode =3D iget_locked(sb, kernfs_ino(kn)); - if (inode && (inode->i_state & I_NEW)) + if (inode && (inode_state_read_once(inode) & I_NEW)) kernfs_init_inode(kn, inode); =20 return inode; diff --git a/fs/libfs.c b/fs/libfs.c index ce8c496a6940..96e3d7fc7fc6 100644 --- a/fs/libfs.c +++ b/fs/libfs.c @@ -1542,9 +1542,9 @@ int __generic_file_fsync(struct file *file, loff_t st= art, loff_t end, =20 inode_lock(inode); ret =3D sync_mapping_buffers(inode->i_mapping); - if (!(inode->i_state & I_DIRTY_ALL)) + if (!(inode_state_read_once(inode) & I_DIRTY_ALL)) goto out; - if (datasync && !(inode->i_state & I_DIRTY_DATASYNC)) + if (datasync && !(inode_state_read_once(inode) & I_DIRTY_DATASYNC)) goto out; =20 err =3D sync_inode_metadata(inode, 1); @@ -1664,7 +1664,7 @@ struct inode *alloc_anon_inode(struct super_block *s) * list because mark_inode_dirty() will think * that it already _is_ on the dirty list. */ - inode->i_state =3D I_DIRTY; + inode_state_assign_raw(inode, I_DIRTY); /* * Historically anonymous inodes don't have a type at all and * userspace has come to rely on this. diff --git a/fs/minix/inode.c b/fs/minix/inode.c index 32db676127a9..f220d0e4aedf 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c @@ -589,7 +589,7 @@ struct inode *minix_iget(struct super_block *sb, unsign= ed long ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 if (INODE_VERSION(inode) =3D=3D MINIX_V1) diff --git a/fs/namei.c b/fs/namei.c index 7377020a2cba..354a9e844721 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -4036,7 +4036,7 @@ int vfs_tmpfile(struct mnt_idmap *idmap, inode =3D file_inode(file); if (!(open_flag & O_EXCL)) { spin_lock(&inode->i_lock); - inode->i_state |=3D I_LINKABLE; + inode_state_set(inode, I_LINKABLE); spin_unlock(&inode->i_lock); } security_inode_post_create_tmpfile(idmap, inode); @@ -4931,7 +4931,7 @@ int vfs_link(struct dentry *old_dentry, struct mnt_id= map *idmap, =20 inode_lock(inode); /* Make sure we don't allow creating hardlink to an unlinked file */ - if (inode->i_nlink =3D=3D 0 && !(inode->i_state & I_LINKABLE)) + if (inode->i_nlink =3D=3D 0 && !(inode_state_read_once(inode) & I_LINKABL= E)) error =3D -ENOENT; else if (max_links && inode->i_nlink >=3D max_links) error =3D -EMLINK; @@ -4941,9 +4941,9 @@ int vfs_link(struct dentry *old_dentry, struct mnt_id= map *idmap, error =3D dir->i_op->link(old_dentry, dir, new_dentry); } =20 - if (!error && (inode->i_state & I_LINKABLE)) { + if (!error && (inode_state_read_once(inode) & I_LINKABLE)) { spin_lock(&inode->i_lock); - inode->i_state &=3D ~I_LINKABLE; + inode_state_clear(inode, I_LINKABLE); spin_unlock(&inode->i_lock); } inode_unlock(inode); diff --git a/fs/netfs/misc.c b/fs/netfs/misc.c index 486166460e17..3b97bc35de77 100644 --- a/fs/netfs/misc.c +++ b/fs/netfs/misc.c @@ -147,10 +147,10 @@ bool netfs_dirty_folio(struct address_space *mapping,= struct folio *folio) if (!fscache_cookie_valid(cookie)) return true; =20 - if (!(inode->i_state & I_PINNING_NETFS_WB)) { + if (!(inode_state_read_once(inode) & I_PINNING_NETFS_WB)) { spin_lock(&inode->i_lock); - if (!(inode->i_state & I_PINNING_NETFS_WB)) { - inode->i_state |=3D I_PINNING_NETFS_WB; + if (!(inode_state_read(inode) & I_PINNING_NETFS_WB)) { + inode_state_set(inode, I_PINNING_NETFS_WB); need_use =3D true; } spin_unlock(&inode->i_lock); @@ -192,7 +192,7 @@ void netfs_clear_inode_writeback(struct inode *inode, c= onst void *aux) { struct fscache_cookie *cookie =3D netfs_i_cookie(netfs_inode(inode)); =20 - if (inode->i_state & I_PINNING_NETFS_WB) { + if (inode_state_read_once(inode) & I_PINNING_NETFS_WB) { loff_t i_size =3D i_size_read(inode); fscache_unuse_cookie(cookie, aux, &i_size); } diff --git a/fs/netfs/read_single.c b/fs/netfs/read_single.c index 5c0dc4efc792..8e6264f62a8f 100644 --- a/fs/netfs/read_single.c +++ b/fs/netfs/read_single.c @@ -36,12 +36,12 @@ void netfs_single_mark_inode_dirty(struct inode *inode) =20 mark_inode_dirty(inode); =20 - if (caching && !(inode->i_state & I_PINNING_NETFS_WB)) { + if (caching && !(inode_state_read_once(inode) & I_PINNING_NETFS_WB)) { bool need_use =3D false; =20 spin_lock(&inode->i_lock); - if (!(inode->i_state & I_PINNING_NETFS_WB)) { - inode->i_state |=3D I_PINNING_NETFS_WB; + if (!(inode_state_read(inode) & I_PINNING_NETFS_WB)) { + inode_state_set(inode, I_PINNING_NETFS_WB); need_use =3D true; } spin_unlock(&inode->i_lock); diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 18b57c7c2f97..9e3b1f10ce80 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -475,7 +475,7 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, st= ruct nfs_fattr *fattr) goto out_no_inode; } =20 - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { struct nfs_inode *nfsi =3D NFS_I(inode); unsigned long now =3D jiffies; =20 diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index a3135b5af7ee..f157d43d1312 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -317,7 +317,7 @@ pnfs_put_layout_hdr(struct pnfs_layout_hdr *lo) WARN_ONCE(1, "NFS: BUG unfreed layout segments.\n"); pnfs_detach_layout_hdr(lo); /* Notify pnfs_destroy_layout_final() that we're done */ - if (inode->i_state & (I_FREEING | I_CLEAR)) + if (inode_state_read(inode) & (I_FREEING | I_CLEAR)) wake_up_var_locked(lo, &inode->i_lock); spin_unlock(&inode->i_lock); pnfs_free_layout_hdr(lo); diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 9cb20d4aeab1..cf4062ac092a 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1159,7 +1159,7 @@ static int wait_for_concurrent_writes(struct file *fi= le) dprintk("nfsd: write resume %d\n", task_pid_nr(current)); } =20 - if (inode->i_state & I_DIRTY) { + if (inode_state_read_once(inode) & I_DIRTY) { dprintk("nfsd: write sync %d\n", task_pid_nr(current)); err =3D vfs_fsync(file, 0); } diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c index 46bfc543f946..d27ff5e5f165 100644 --- a/fs/notify/fsnotify.c +++ b/fs/notify/fsnotify.c @@ -52,7 +52,7 @@ static void fsnotify_unmount_inodes(struct super_block *s= b) * the inode cannot have any associated watches. */ spin_lock(&inode->i_lock); - if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) { + if (inode_state_read(inode) & (I_FREEING | I_WILL_FREE | I_NEW)) { spin_unlock(&inode->i_lock); continue; } diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index 3959f23c487a..08266adc42ba 100644 --- a/fs/ntfs3/inode.c +++ b/fs/ntfs3/inode.c @@ -537,7 +537,7 @@ struct inode *ntfs_iget5(struct super_block *sb, const = struct MFT_REF *ref, return ERR_PTR(-ENOMEM); =20 /* If this is a freshly allocated inode, need to read it now. */ - if (inode->i_state & I_NEW) + if (inode_state_read_once(inode) & I_NEW) inode =3D ntfs_read_mft(inode, name, ref); else if (ref->seq !=3D ntfs_i(inode)->mi.mrec->seq) { /* diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c index 92a6149da9c1..619ff03b15d6 100644 --- a/fs/ocfs2/dlmglue.c +++ b/fs/ocfs2/dlmglue.c @@ -2487,7 +2487,7 @@ int ocfs2_inode_lock_full_nested(struct inode *inode, * which hasn't been populated yet, so clear the refresh flag * and let the caller handle it. */ - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { status =3D 0; if (lockres) ocfs2_complete_lock_res_refresh(lockres, 0); diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c index 84115bf8b464..78f81950c9ee 100644 --- a/fs/ocfs2/inode.c +++ b/fs/ocfs2/inode.c @@ -152,8 +152,8 @@ struct inode *ocfs2_iget(struct ocfs2_super *osb, u64 b= lkno, unsigned flags, mlog_errno(PTR_ERR(inode)); goto bail; } - trace_ocfs2_iget5_locked(inode->i_state); - if (inode->i_state & I_NEW) { + trace_ocfs2_iget5_locked(inode_state_read_once(inode)); + if (inode_state_read_once(inode) & I_NEW) { rc =3D ocfs2_read_locked_inode(inode, &args); unlock_new_inode(inode); } diff --git a/fs/omfs/inode.c b/fs/omfs/inode.c index 135c49c5d848..db80af312678 100644 --- a/fs/omfs/inode.c +++ b/fs/omfs/inode.c @@ -212,7 +212,7 @@ struct inode *omfs_iget(struct super_block *sb, ino_t i= no) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 bh =3D omfs_bread(inode->i_sb, ino); diff --git a/fs/openpromfs/inode.c b/fs/openpromfs/inode.c index 26ecda0e4d19..fb8d84bdedfb 100644 --- a/fs/openpromfs/inode.c +++ b/fs/openpromfs/inode.c @@ -236,7 +236,7 @@ static struct dentry *openpromfs_lookup(struct inode *d= ir, struct dentry *dentry mutex_unlock(&op_mutex); if (IS_ERR(inode)) return ERR_CAST(inode); - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { simple_inode_init_ts(inode); ent_oi =3D OP_I(inode); ent_oi->type =3D ent_type; diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index a01400cd41fd..1eb4fbe35a46 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -1041,7 +1041,7 @@ struct inode *orangefs_iget(struct super_block *sb, if (!inode) return ERR_PTR(-ENOMEM); =20 - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 error =3D orangefs_inode_getattr(inode, ORANGEFS_GETATTR_NEW); diff --git a/fs/orangefs/orangefs-utils.c b/fs/orangefs/orangefs-utils.c index 0fdceb00ca07..9ab1119ebd28 100644 --- a/fs/orangefs/orangefs-utils.c +++ b/fs/orangefs/orangefs-utils.c @@ -247,7 +247,7 @@ int orangefs_inode_getattr(struct inode *inode, int fla= gs) spin_lock(&inode->i_lock); /* Must have all the attributes in the mask and be within cache time. */ if ((!flags && time_before(jiffies, orangefs_inode->getattr_time)) || - orangefs_inode->attr_valid || inode->i_state & I_DIRTY_PAGES) { + orangefs_inode->attr_valid || inode_state_read(inode) & I_DIRTY_PAGES= ) { if (orangefs_inode->attr_valid) { spin_unlock(&inode->i_lock); write_inode_now(inode, 1); @@ -281,13 +281,13 @@ int orangefs_inode_getattr(struct inode *inode, int f= lags) spin_lock(&inode->i_lock); /* Must have all the attributes in the mask and be within cache time. */ if ((!flags && time_before(jiffies, orangefs_inode->getattr_time)) || - orangefs_inode->attr_valid || inode->i_state & I_DIRTY_PAGES) { + orangefs_inode->attr_valid || inode_state_read(inode) & I_DIRTY_PAGES= ) { if (orangefs_inode->attr_valid) { spin_unlock(&inode->i_lock); write_inode_now(inode, 1); goto again2; } - if (inode->i_state & I_DIRTY_PAGES) { + if (inode_state_read(inode) & I_DIRTY_PAGES) { ret =3D 0; goto out_unlock; } diff --git a/fs/pipe.c b/fs/pipe.c index 42fead1efe52..2d0fed2ecbfd 100644 --- a/fs/pipe.c +++ b/fs/pipe.c @@ -908,7 +908,7 @@ static struct inode * get_pipe_inode(void) * list because "mark_inode_dirty()" will think * that it already _is_ on the dirty list. */ - inode->i_state =3D I_DIRTY; + inode_state_assign_raw(inode, I_DIRTY); inode->i_mode =3D S_IFIFO | S_IRUSR | S_IWUSR; inode->i_uid =3D current_fsuid(); inode->i_gid =3D current_fsgid(); diff --git a/fs/qnx4/inode.c b/fs/qnx4/inode.c index e399e2dd3a12..31d78da203ea 100644 --- a/fs/qnx4/inode.c +++ b/fs/qnx4/inode.c @@ -290,7 +290,7 @@ struct inode *qnx4_iget(struct super_block *sb, unsigne= d long ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 qnx4_inode =3D qnx4_raw_inode(inode); diff --git a/fs/qnx6/inode.c b/fs/qnx6/inode.c index 3310d1ad4d0e..88d285005083 100644 --- a/fs/qnx6/inode.c +++ b/fs/qnx6/inode.c @@ -521,7 +521,7 @@ struct inode *qnx6_iget(struct super_block *sb, unsigne= d ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 ei =3D QNX6_I(inode); diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 6c4a6ee1fa2b..376739f6420e 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -1033,7 +1033,7 @@ static int add_dquot_ref(struct super_block *sb, int = type) spin_lock(&sb->s_inode_list_lock); list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { spin_lock(&inode->i_lock); - if ((inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) || + if ((inode_state_read(inode) & (I_FREEING | I_WILL_FREE | I_NEW)) || !atomic_read(&inode->i_writecount) || !dqinit_needed(inode, type)) { spin_unlock(&inode->i_lock); diff --git a/fs/romfs/super.c b/fs/romfs/super.c index 0addcc849ff2..360b00854115 100644 --- a/fs/romfs/super.c +++ b/fs/romfs/super.c @@ -302,7 +302,7 @@ static struct inode *romfs_iget(struct super_block *sb,= unsigned long pos) if (!i) return ERR_PTR(-ENOMEM); =20 - if (!(i->i_state & I_NEW)) + if (!(inode_state_read_once(i) & I_NEW)) return i; =20 /* precalculate the data offset */ diff --git a/fs/squashfs/inode.c b/fs/squashfs/inode.c index cceae3b78698..82b687414e65 100644 --- a/fs/squashfs/inode.c +++ b/fs/squashfs/inode.c @@ -86,7 +86,7 @@ struct inode *squashfs_iget(struct super_block *sb, long = long ino, =20 if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 err =3D squashfs_read_inode(inode, ino); diff --git a/fs/sync.c b/fs/sync.c index 2955cd4c77a3..73b3efb35b26 100644 --- a/fs/sync.c +++ b/fs/sync.c @@ -182,7 +182,7 @@ int vfs_fsync_range(struct file *file, loff_t start, lo= ff_t end, int datasync) =20 if (!file->f_op->fsync) return -EINVAL; - if (!datasync && (inode->i_state & I_DIRTY_TIME)) + if (!datasync && (inode_state_read_once(inode) & I_DIRTY_TIME)) mark_inode_dirty_sync(inode); return file->f_op->fsync(file, start, end, datasync); } diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c index ca41ce8208c4..c3265b8804f5 100644 --- a/fs/ubifs/file.c +++ b/fs/ubifs/file.c @@ -1323,7 +1323,7 @@ int ubifs_fsync(struct file *file, loff_t start, loff= _t end, int datasync) inode_lock(inode); =20 /* Synchronize the inode unless this is a 'datasync()' call. */ - if (!datasync || (inode->i_state & I_DIRTY_DATASYNC)) { + if (!datasync || (inode_state_read_once(inode) & I_DIRTY_DATASYNC)) { err =3D inode->i_sb->s_op->write_inode(inode, NULL); if (err) goto out; diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 46952a33c4e6..f453c37cee37 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c @@ -114,7 +114,7 @@ struct inode *ubifs_iget(struct super_block *sb, unsign= ed long inum) inode =3D iget_locked(sb, inum); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; ui =3D ubifs_inode(inode); =20 diff --git a/fs/udf/inode.c b/fs/udf/inode.c index a79d73f28aa7..7fae8002344a 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -1962,7 +1962,7 @@ struct inode *__udf_iget(struct super_block *sb, stru= ct kernel_lb_addr *ino, if (!inode) return ERR_PTR(-ENOMEM); =20 - if (!(inode->i_state & I_NEW)) { + if (!(inode_state_read_once(inode) & I_NEW)) { if (UDF_I(inode)->i_hidden !=3D hidden_inode) { iput(inode); return ERR_PTR(-EFSCORRUPTED); diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c index 8361c00e8fa6..e2b0a35de2a7 100644 --- a/fs/ufs/inode.c +++ b/fs/ufs/inode.c @@ -655,7 +655,7 @@ struct inode *ufs_iget(struct super_block *sb, unsigned= long ino) inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 ufsi =3D UFS_I(inode); diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c index 70be0b3dda49..086a31269198 100644 --- a/fs/zonefs/super.c +++ b/fs/zonefs/super.c @@ -644,7 +644,7 @@ static struct inode *zonefs_get_file_inode(struct inode= *dir, inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) { + if (!(inode_state_read_once(inode) & I_NEW)) { WARN_ON_ONCE(inode->i_private !=3D z); return inode; } @@ -683,7 +683,7 @@ static struct inode *zonefs_get_zgroup_inode(struct sup= er_block *sb, inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 inode->i_ino =3D ino; diff --git a/mm/backing-dev.c b/mm/backing-dev.c index 41b6c9386b69..c5740c6d37a2 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -72,7 +72,7 @@ static void collect_wb_stats(struct wb_stats *stats, list_for_each_entry(inode, &wb->b_more_io, i_io_list) stats->nr_more_io++; list_for_each_entry(inode, &wb->b_dirty_time, i_io_list) - if (inode->i_state & I_DIRTY_TIME) + if (inode_state_read_once(inode) & I_DIRTY_TIME) stats->nr_dirty_time++; spin_unlock(&wb->list_lock); =20 diff --git a/security/landlock/fs.c b/security/landlock/fs.c index 0bade2c5aa1d..d4d72f406d58 100644 --- a/security/landlock/fs.c +++ b/security/landlock/fs.c @@ -1296,7 +1296,7 @@ static void hook_sb_delete(struct super_block *const = sb) * second call to iput() for the same Landlock object. Also * checks I_NEW because such inode cannot be tied to an object. */ - if (inode->i_state & (I_FREEING | I_WILL_FREE | I_NEW)) { + if (inode_state_read(inode) & (I_FREEING | I_WILL_FREE | I_NEW)) { spin_unlock(&inode->i_lock); continue; } --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.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 22DC62D6E55 for ; Thu, 9 Oct 2025 07:59:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996795; cv=none; b=braVSM40HNaXzt2j6ZdFn7vWFHvGs7YGTntH3opi8ZdKXdORzSmSIDb7XBfplbVAm3pVUpYG50FvHv88/E6kPbLE0kYWTpWniwrzCvqozEk+jRPyPQxIN8xVL0vC/buZq0dZw7H7ArQ8VcNcXYZFOH/GUK6O/snTUFckI+eEwMY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996795; c=relaxed/simple; bh=7xUHKKmfPguOYbqCkSOh/XEzW5J6tLa2ubAsl4Vcfj8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=N3PwMaMWTTobUZgBGQYDT1PHYvxkgIB0vqWrozbWgutyBbtiMgF7TwL2AfpKR16d3JtoUlAsVBo8kuA0qqQWD7aw43u9pBSFCKzt1Fy0WiFzJ/1/scsBbuEArbUvwhXP+ZFUjemeKH/7DjK4sCTUm90VwWAhm23gVg+vT4LLHd8= 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=ndcKtsZO; arc=none smtp.client-ip=209.85.218.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ndcKtsZO" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-b3ee18913c0so96929466b.3 for ; Thu, 09 Oct 2025 00:59:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996788; x=1760601588; 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=h86yzQGyqDxtRbYEe7hZoxXaqK6U2loB60w3ZTrgBuw=; b=ndcKtsZODzhUBcZcOMj77B6X9nUieRjAB4YYVPC6grTRDZhCE6odTSRSzMFVQiow2+ Ru4x4gcxVUPuUoOTLijHst+IAu3fGYEwcG2ibkoYpUqNEFBgDU0mGkAHlM/zTZbg4Roj qiFkkYivhMYYjSQ+hMWjCWfyeyVoR5awlkCONOEdIAeTvQXIWiW5VSibxSXCHyIkRRtP swaxnvmvVGX13ZuO8jS4BU9JYChwVgKm/z1wzPzZ1P82tN0Rfl54buscSt8U6ewA/i/n /n4sjC7QJsq2x+RFOSuQZ3KXPsJ7ymoPpQhmlwvCH3migjhgsrM9f9TTf8r/oNN2DNG9 f0/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996788; x=1760601588; 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=h86yzQGyqDxtRbYEe7hZoxXaqK6U2loB60w3ZTrgBuw=; b=F71nWWyB87QIK+a1cZKCvIqTTCztbCgG8+Tk91uVelBru0wsNUub2eHYRDnFblBsBr D42JMhD/YVy7Qd/TNZvyeJlVRv3RKfzldmbXJuovBOfItyxz+NIRxwgi8ddXQO6SxEwg CjOPiJj4FoxPvqNtRhd56s/+5cm7bssKHa+xXEAmzmATaYoaYSnjLrJdrdg3KAzuWOyq c7XGw0YkgkqlSTU0apc+jUdFy41CWissk+Yukefpy/RNZDsTPv/TeBBmqlbCzKRZDn8+ AYabYXqAPTkS2GEZEae3lDyMV0YMO23+XStjRs3Ja9gm61cv9BY/pg67CUPF5nrxj4ka duoQ== X-Forwarded-Encrypted: i=1; AJvYcCWQWW4Po9m4ergCO1opzMuV+xI1evLSSN8X99D19FYEc6ltpI0ZErWYhhlBwaF4c3AWFcTmffjGEiKyjn4=@vger.kernel.org X-Gm-Message-State: AOJu0YwqItklH20JbEmYs5v+4FvbnMMfweFDxH3SFHf8wWoJbjPK8d2I r0VbV8N6OPmqcbp932iPK2MAXy4cd6sgVDRp5mcHdB7XqaDkj0ebFTpQ X-Gm-Gg: ASbGncs8McinSXC0hxvE9Rcd7H7ESEorT1YMs3JiSnOx9vA9BSr8YGGfe2bhS3hhFZO kwIRwR71LQ4VTsnxsGMdHM5c2Wsjze/56r5CLdgfARBsWIBVQbY+8NHN6e5K3qWhDBJb8qzOVHa W1Y84SenZHKKASf7/JaIoiyO8R+6E1FZkxDjoP4t3Uua/uzQIm9uSBfShcqkEA+AaKLVS9+moqH Yf4dC4HcN/IYX6i0FY/bCQk+MZlxcVre2fhFS14zjwb5Z/rGi8ckm60KcC15uquIe3Nj+pW12Bn e22hYf9n8ihxAruLJDaNXPoKtjt6xVgces9EzTe8Wr68Yd/pRPgbjZ87owZH6AmmqAOaCASHnO6 wUV+D/jms2Xj42AvJ7xtkAO9UgUCqzmRAh2mMBbClbm7wXMzW3KEq84szCvTtPFC7ZmLSwx4Ysf 4ckfZEIzp2g6kZVxcHegus5Q== X-Google-Smtp-Source: AGHT+IEMoGFLpjykXHBKsokLO0dfoJW2SHYyf9tjQ+WYZKEAvvMAzQ8XfJrGfhly0MkTgczBqDnw7Q== X-Received: by 2002:a17:907:9486:b0:b2d:a873:38d with SMTP id a640c23a62f3a-b50abed1b44mr757779566b.43.1759996788159; Thu, 09 Oct 2025 00:59:48 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:47 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 05/14] Manual conversion to use ->i_state accessors of all places not covered by coccinelle Date: Thu, 9 Oct 2025 09:59:19 +0200 Message-ID: <20251009075929.1203950-6-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" Nothing to look at apart from iput_final(). Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- Documentation/filesystems/porting.rst | 2 +- fs/afs/inode.c | 2 +- fs/ext4/inode.c | 10 +++++----- fs/ext4/orphan.c | 4 ++-- fs/inode.c | 18 ++++++++---------- include/linux/backing-dev.h | 2 +- include/linux/fs.h | 6 +++--- include/linux/writeback.h | 2 +- include/trace/events/writeback.h | 8 ++++---- 9 files changed, 26 insertions(+), 28 deletions(-) diff --git a/Documentation/filesystems/porting.rst b/Documentation/filesyst= ems/porting.rst index 7233b04668fc..35f027981b21 100644 --- a/Documentation/filesystems/porting.rst +++ b/Documentation/filesystems/porting.rst @@ -211,7 +211,7 @@ test and set for you. e.g.:: =20 inode =3D iget_locked(sb, ino); - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { err =3D read_inode_from_disk(inode); if (err < 0) { iget_failed(inode); diff --git a/fs/afs/inode.c b/fs/afs/inode.c index 2fe2ccf59c7a..dde1857fcabb 100644 --- a/fs/afs/inode.c +++ b/fs/afs/inode.c @@ -427,7 +427,7 @@ static void afs_fetch_status_success(struct afs_operati= on *op) struct afs_vnode *vnode =3D vp->vnode; int ret; =20 - if (vnode->netfs.inode.i_state & I_NEW) { + if (inode_state_read_once(&vnode->netfs.inode) & I_NEW) { ret =3D afs_inode_init_from_status(op, vp, vnode); afs_op_set_error(op, ret); if (ret =3D=3D 0) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index f9e4ac87211e..b864e9645f85 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -425,7 +425,7 @@ void ext4_check_map_extents_env(struct inode *inode) if (!S_ISREG(inode->i_mode) || IS_NOQUOTA(inode) || IS_VERITY(inode) || is_special_ino(inode->i_sb, inode->i_ino) || - (inode->i_state & (I_FREEING | I_WILL_FREE | I_NEW)) || + (inode_state_read_once(inode) & (I_FREEING | I_WILL_FREE | I_NEW)) || ext4_test_inode_flag(inode, EXT4_INODE_EA_INODE) || ext4_verity_in_progress(inode)) return; @@ -3473,7 +3473,7 @@ static bool ext4_inode_datasync_dirty(struct inode *i= node) /* Any metadata buffers to write? */ if (!list_empty(&inode->i_mapping->i_private_list)) return true; - return inode->i_state & I_DIRTY_DATASYNC; + return inode_state_read_once(inode) & I_DIRTY_DATASYNC; } =20 static void ext4_set_iomap(struct inode *inode, struct iomap *iomap, @@ -4552,7 +4552,7 @@ int ext4_truncate(struct inode *inode) * or it's a completely new inode. In those cases we might not * have i_rwsem locked because it's not necessary. */ - if (!(inode->i_state & (I_NEW|I_FREEING))) + if (!(inode_state_read_once(inode) & (I_NEW | I_FREEING))) WARN_ON(!inode_is_locked(inode)); trace_ext4_truncate_enter(inode); =20 @@ -5210,7 +5210,7 @@ struct inode *__ext4_iget(struct super_block *sb, uns= igned long ino, inode =3D iget_locked(sb, ino); if (!inode) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) { + if (!(inode_state_read_once(inode) & I_NEW)) { ret =3D check_igot_inode(inode, flags, function, line); if (ret) { iput(inode); @@ -5541,7 +5541,7 @@ static void __ext4_update_other_inode_time(struct sup= er_block *sb, if (inode_is_dirtytime_only(inode)) { struct ext4_inode_info *ei =3D EXT4_I(inode); =20 - inode->i_state &=3D ~I_DIRTY_TIME; + inode_state_clear(inode, I_DIRTY_TIME); spin_unlock(&inode->i_lock); =20 spin_lock(&ei->i_raw_lock); diff --git a/fs/ext4/orphan.c b/fs/ext4/orphan.c index 33c3a89396b1..c4903d98ff81 100644 --- a/fs/ext4/orphan.c +++ b/fs/ext4/orphan.c @@ -107,7 +107,7 @@ int ext4_orphan_add(handle_t *handle, struct inode *ino= de) if (!sbi->s_journal || is_bad_inode(inode)) return 0; =20 - WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) && + WARN_ON_ONCE(!(inode_state_read_once(inode) & (I_NEW | I_FREEING)) && !inode_is_locked(inode)); if (ext4_inode_orphan_tracked(inode)) return 0; @@ -232,7 +232,7 @@ int ext4_orphan_del(handle_t *handle, struct inode *ino= de) if (!sbi->s_journal && !(sbi->s_mount_state & EXT4_ORPHAN_FS)) return 0; =20 - WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) && + WARN_ON_ONCE(!(inode_state_read_once(inode) & (I_NEW | I_FREEING)) && !inode_is_locked(inode)); if (ext4_test_inode_state(inode, EXT4_STATE_ORPHAN_FILE)) return ext4_orphan_file_del(handle, inode); diff --git a/fs/inode.c b/fs/inode.c index f094ed3e6f30..3153d725859c 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -829,7 +829,7 @@ static void evict(struct inode *inode) * This also means we don't need any fences for the call below. */ inode_wake_up_bit(inode, __I_NEW); - BUG_ON(inode->i_state !=3D (I_FREEING | I_CLEAR)); + BUG_ON(inode_state_read_once(inode) !=3D (I_FREEING | I_CLEAR)); =20 destroy_inode(inode); } @@ -1883,7 +1883,6 @@ static void iput_final(struct inode *inode) { struct super_block *sb =3D inode->i_sb; const struct super_operations *op =3D inode->i_sb->s_op; - unsigned long state; int drop; =20 WARN_ON(inode_state_read(inode) & I_NEW); @@ -1908,20 +1907,19 @@ static void iput_final(struct inode *inode) */ VFS_BUG_ON_INODE(atomic_read(&inode->i_count) !=3D 0, inode); =20 - state =3D inode_state_read(inode); - if (!drop) { - WRITE_ONCE(inode->i_state, state | I_WILL_FREE); + if (drop) { + inode_state_set(inode, I_FREEING); + } else { + inode_state_set(inode, I_WILL_FREE); spin_unlock(&inode->i_lock); =20 write_inode_now(inode, 1); =20 spin_lock(&inode->i_lock); - state =3D inode_state_read(inode); - WARN_ON(state & I_NEW); - state &=3D ~I_WILL_FREE; + WARN_ON(inode_state_read(inode) & I_NEW); + inode_state_replace(inode, I_WILL_FREE, I_FREEING); } =20 - WRITE_ONCE(inode->i_state, state | I_FREEING); if (!list_empty(&inode->i_lru)) inode_lru_list_del(inode); spin_unlock(&inode->i_lock); @@ -2985,7 +2983,7 @@ void dump_inode(struct inode *inode, const char *reas= on) pr_warn("%s encountered for inode %px\n" "fs %s mode %ho opflags 0x%hx flags 0x%x state 0x%x count %d\n", reason, inode, sb->s_type->name, inode->i_mode, inode->i_opflags, - inode->i_flags, inode->i_state, atomic_read(&inode->i_count)); + inode->i_flags, inode_state_read_once(inode), atomic_read(&inode->i_coun= t)); } =20 EXPORT_SYMBOL(dump_inode); diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index 065cba5dc111..0c8342747cab 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h @@ -280,7 +280,7 @@ unlocked_inode_to_wb_begin(struct inode *inode, struct = wb_lock_cookie *cookie) * Paired with a release fence in inode_do_switch_wbs() and * ensures that we see the new wb if we see cleared I_WB_SWITCH. */ - cookie->locked =3D inode->i_state & I_WB_SWITCH; + cookie->locked =3D inode_state_read_once(inode) & I_WB_SWITCH; smp_rmb(); =20 if (unlikely(cookie->locked)) diff --git a/include/linux/fs.h b/include/linux/fs.h index 909eb1e68637..77b6486dcae7 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1026,7 +1026,7 @@ static inline void inode_fake_hash(struct inode *inod= e) static inline void wait_on_inode(struct inode *inode) { wait_var_event(inode_state_wait_address(inode, __I_NEW), - !(READ_ONCE(inode->i_state) & I_NEW)); + !(inode_state_read_once(inode) & I_NEW)); /* * Pairs with routines clearing I_NEW. */ @@ -2719,8 +2719,8 @@ static inline int icount_read(const struct inode *ino= de) */ static inline bool inode_is_dirtytime_only(struct inode *inode) { - return (inode->i_state & (I_DIRTY_TIME | I_NEW | - I_FREEING | I_WILL_FREE)) =3D=3D I_DIRTY_TIME; + return (inode_state_read_once(inode) & + (I_DIRTY_TIME | I_NEW | I_FREEING | I_WILL_FREE)) =3D=3D I_DIRTY_T= IME; } =20 extern void inc_nlink(struct inode *inode); diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 06195c2a535b..102071ffedcb 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h @@ -227,7 +227,7 @@ static inline void inode_attach_wb(struct inode *inode,= struct folio *folio) static inline void inode_detach_wb(struct inode *inode) { if (inode->i_wb) { - WARN_ON_ONCE(!(inode->i_state & I_CLEAR)); + WARN_ON_ONCE(!(inode_state_read_once(inode) & I_CLEAR)); wb_put(inode->i_wb); inode->i_wb =3D NULL; } diff --git a/include/trace/events/writeback.h b/include/trace/events/writeb= ack.h index c08aff044e80..311a341e6fe4 100644 --- a/include/trace/events/writeback.h +++ b/include/trace/events/writeback.h @@ -120,7 +120,7 @@ DECLARE_EVENT_CLASS(writeback_dirty_inode_template, /* may be called for files on pseudo FSes w/ unregistered bdi */ strscpy_pad(__entry->name, bdi_dev_name(bdi), 32); __entry->ino =3D inode->i_ino; - __entry->state =3D inode->i_state; + __entry->state =3D inode_state_read_once(inode); __entry->flags =3D flags; ), =20 @@ -748,7 +748,7 @@ TRACE_EVENT(writeback_sb_inodes_requeue, strscpy_pad(__entry->name, bdi_dev_name(inode_to_bdi(inode)), 32); __entry->ino =3D inode->i_ino; - __entry->state =3D inode->i_state; + __entry->state =3D inode_state_read_once(inode); __entry->dirtied_when =3D inode->dirtied_when; __entry->cgroup_ino =3D __trace_wb_assign_cgroup(inode_to_wb(inode)); ), @@ -787,7 +787,7 @@ DECLARE_EVENT_CLASS(writeback_single_inode_template, strscpy_pad(__entry->name, bdi_dev_name(inode_to_bdi(inode)), 32); __entry->ino =3D inode->i_ino; - __entry->state =3D inode->i_state; + __entry->state =3D inode_state_read_once(inode); __entry->dirtied_when =3D inode->dirtied_when; __entry->writeback_index =3D inode->i_mapping->writeback_index; __entry->nr_to_write =3D nr_to_write; @@ -839,7 +839,7 @@ DECLARE_EVENT_CLASS(writeback_inode_template, TP_fast_assign( __entry->dev =3D inode->i_sb->s_dev; __entry->ino =3D inode->i_ino; - __entry->state =3D inode->i_state; + __entry->state =3D inode_state_read_once(inode); __entry->mode =3D inode->i_mode; __entry->dirtied_when =3D inode->dirtied_when; ), --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.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 3AC612D7805 for ; Thu, 9 Oct 2025 07:59:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996795; cv=none; b=nzbL6bCyl/rrtv0F5e6FUGZ3fCS9XKr2wGJF0nGxPJZ+g/ei2V8bDANGUutK+bBs2hGN3ltRIGnrog3w1uxHKcEoO/iBjUqw6VzlLtMAg353VTYQilrfIr0qBEidTagjNHVTTFyKoqGtlEAMA7Betita0iExrmf8STNx1u/M0Ks= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996795; c=relaxed/simple; bh=xlMZC6mRkrBvKfdW9aEiJ7hmUdu0jhNwT6sk3dKhWF8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=atMJW1ETOhDi9uECCMsCuUwq4SQJsIfl9sIFGhoB1gprs+ScNqkdBu0zCpAYD+VF44YE7StLVP0QHdv1alceMp8RC9ciqL3+9pEBWDG88YCuI9pxODLEqzyCb5thsPnjboLjeK87pBx+gKb8WVZo6k2bjjLd4yxKG+xmQA+JQhM= 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=kO81p+lx; arc=none smtp.client-ip=209.85.218.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kO81p+lx" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-b00a9989633so1886766b.0 for ; Thu, 09 Oct 2025 00:59:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996790; x=1760601590; 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=TW55q2BD5J3Xoi/y6lNGWsyXU6mmPNteHryX4kl4OTo=; b=kO81p+lxgFPhxMP0X3/LdyVOyCs64XBtcPFUwAsPIyUBMw6D0KPIVwOcT7bR/0M8g7 JnBfSKiY0QIB1eBSw6dz8ijpJea5WgKLTs72tqSE7/ppO1QNnBtnK9WVb65IxURN6Um7 L2beVoQ078EfQPOLJa5ZnZoEw8RT5Sa7iFx8xq2sYKz5np2rQmOvmU9XVVq5rJNCBA5k vNGK5j4QiMY8Z+wUvdD1Xt7C+yy+oA/Kcwv7NLOas4MCDZDjnMqetMaNxB/kF3Z/L4qW /pH7d93YL7JqN2prxrM4Jpud88fBY9ugK18KcWpHT3gmDQRKrDGUozgC7yIvOk0hko5X 5/wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996790; x=1760601590; 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=TW55q2BD5J3Xoi/y6lNGWsyXU6mmPNteHryX4kl4OTo=; b=IbD7JSAVjMkjSjDfz2kEcMJYjJ/2cCmFbHifbPXo7sq4okjjoCzc4nAO1IxAIvjBt0 jYvE4/92BpOwtCvzOna1jots0dBiiNNemDGZ4Aw8/wK9h8KtZFVX4Qwompbyl76w3eaR pj+JxR0PyyoLpucBWIvSF9KVDs5GiDQvJOK84cUh7AepIqQ4+LE/y8kyL7aLxNzFl21v HhrJKet9W/RwrnnagcsPTIDX5FK2YdCPciJo7F4IqOD9O2Bbvbz5c3oS0/4tdqaWtBLd PjpEftj2jViyRXNyitn28kjjf+ZkMBEDL4ObZJWFJgLG/MpO5M427jDWDO2YsgZo7AMW 3doA== X-Forwarded-Encrypted: i=1; AJvYcCV8IdwxrgPrZwnQueEstJTg8F3pedKX2NEgXU5TNv+1cio1DS/4syO6Dw6qE6INGvZwTFKaiCJLaQ1UWho=@vger.kernel.org X-Gm-Message-State: AOJu0Yxnh2jEeGww/HWAgTuFPX6y4Gzo2OCbuznvbcokvMAXI7f0/dHv lL8/CFtMBM7s6tyiBXsXtU/pNdj3BaMCAx7VyNXqdAEKfQIUyqHsaH8v X-Gm-Gg: ASbGncuoQvIRFr7SGvPBbiMaJhY0bwo5ueW86GuKZFD7sNRs80uzJaG2EZ56coxhV/N OzbzZBMKI6ff3G5hM4VPsl/of/rCRoQPg/CMcUsXjOTpMI5GR6VgTjnWaj2q3Qf7u+3Onp34Z08 /tjXmId8BO//idOc46e8Mm4gdurTA3QXJtMqSnsdUhbXD1aQNRb4hLbPccrgoLsxnHTC6PwgrJi ihBjjbS5ZgZWQJA6LJmVbzo/xRERR80ph/oGIoR+HtNGVBFsh5WmRwvWB8lM2mJsFKy//wa4naK SqKA2BG1IyK+lgrA2/suyOpts/LZPNKYc+DRjPX3VqvmYf1TkmWxHYWXNhjARKwSvvfPzOg9KUA nNNlPqlUGMPyeKf0VQo/wxRyilp+RHXicIAedjExz5Z7RfhOWcxHOnMkiGbb/LTtQwAoxPYqc/a fwd+Rzk4bZsustUVhO93rreXMpPW2ZEX31b+6qo+yxihc= X-Google-Smtp-Source: AGHT+IG8iDfDf6yR3N0dRnqDz6+DAj20GvNetdOlNJ4ULk45euX3/T1nyJA+A6Lbbc1K12QXDvop7Q== X-Received: by 2002:a17:907:a4c4:b0:b2a:657:e733 with SMTP id a640c23a62f3a-b4f429f034cmr1144008766b.15.1759996789761; Thu, 09 Oct 2025 00:59:49 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:49 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 06/14] btrfs: use the new ->i_state accessors Date: Thu, 9 Oct 2025 09:59:20 +0200 Message-ID: <20251009075929.1203950-7-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" Change generated with coccinelle and fixed up by hand as appropriate. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- cheat sheet: If ->i_lock is held, then: state =3D inode->i_state =3D> state =3D inode_state_read(inode) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear(inode, I_A | I_B) inode->i_state =3D I_A | I_B =3D> inode_state_assign(inode, I_A | I_B) If ->i_lock is not held or only held conditionally: state =3D inode->i_state =3D> state =3D inode_state_read_once(inod= e) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set_raw(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear_raw(inode, I_A | I= _B) inode->i_state =3D I_A | I_B =3D> inode_state_assign_raw(inode, I_A | = I_B) fs/btrfs/inode.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 3b1b3a0553ee..433ffe231546 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -3884,7 +3884,7 @@ static int btrfs_add_inode_to_root(struct btrfs_inode= *inode, bool prealloc) ASSERT(ret !=3D -ENOMEM); return ret; } else if (existing) { - WARN_ON(!(existing->vfs_inode.i_state & (I_WILL_FREE | I_FREEING))); + WARN_ON(!(inode_state_read_once(&existing->vfs_inode) & (I_WILL_FREE | I= _FREEING))); } =20 return 0; @@ -5361,7 +5361,7 @@ static void evict_inode_truncate_pages(struct inode *= inode) struct extent_io_tree *io_tree =3D &BTRFS_I(inode)->io_tree; struct rb_node *node; =20 - ASSERT(inode->i_state & I_FREEING); + ASSERT(inode_state_read_once(inode) & I_FREEING); truncate_inode_pages_final(&inode->i_data); =20 btrfs_drop_extent_map_range(BTRFS_I(inode), 0, (u64)-1, false); @@ -5799,7 +5799,7 @@ struct btrfs_inode *btrfs_iget_path(u64 ino, struct b= trfs_root *root, if (!inode) return ERR_PTR(-ENOMEM); =20 - if (!(inode->vfs_inode.i_state & I_NEW)) + if (!(inode_state_read_once(&inode->vfs_inode) & I_NEW)) return inode; =20 ret =3D btrfs_read_locked_inode(inode, path); @@ -5823,7 +5823,7 @@ struct btrfs_inode *btrfs_iget(u64 ino, struct btrfs_= root *root) if (!inode) return ERR_PTR(-ENOMEM); =20 - if (!(inode->vfs_inode.i_state & I_NEW)) + if (!(inode_state_read_once(&inode->vfs_inode) & I_NEW)) return inode; =20 path =3D btrfs_alloc_path(); @@ -7480,7 +7480,7 @@ static void btrfs_invalidate_folio(struct folio *foli= o, size_t offset, u64 page_start =3D folio_pos(folio); u64 page_end =3D page_start + folio_size(folio) - 1; u64 cur; - int inode_evicting =3D inode->vfs_inode.i_state & I_FREEING; + int inode_evicting =3D inode_state_read_once(&inode->vfs_inode) & I_FREEI= NG; =20 /* * We have folio locked so no new ordered extent can be created on this --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.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 02B872D7DCF for ; Thu, 9 Oct 2025 07:59:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996798; cv=none; b=TdB3FZMn/3r/0p4lFQ9Z3eeT2c9aSb3p4lVFxHLZAYZmB+mDchr7sUb9sPIjA3bK0z2UcDb4mL25e4zkYznH73SAPPabF+rQlpAeAm2wqpwr6Evewm7C2C5oSlvwztOlQ3yr2HgM0APiUELnCgfbL9fI/3nd3HiJVKf9Sxx329Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996798; c=relaxed/simple; bh=C2dm91mSHiXEN5ZR1LoL61DaMO1AWxjUqLWD/0PM02A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cbxt/Fyj6vTXzdJYQyei+kZOqFkWrQ4WE2y9rjdE7kueoXmweQ8TvvuVdD+RFXc69l29orw7OuDLYPGR6GDvWrB915c/9Uj2cQHYTRMz+v9SrROS78b723zvhg1lWFGlQTM0s7TNJQkgerGgiqvS8teS4he4poEv3D9Wdkhu8K0= 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=AP2BOWtO; arc=none smtp.client-ip=209.85.218.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AP2BOWtO" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-b3e9d633b78so2083766b.1 for ; Thu, 09 Oct 2025 00:59:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996791; x=1760601591; 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=7+oN/DyZ5OmjZbLZHfaeiaZe3fElqmiRAqyveNfIkiY=; b=AP2BOWtO+wxZIsfs9g4bk2rM3k9+am+gL2+hdfNTlvusJzfUgyo8maloNT0XFCahbw Q7U6+tj/Jy4eG3M+BHPpn92xvMkgkTsThTeGK+aHqc36bo6LHMBdc+Q7SoLM6hRyC7sq eLwP5rvxi7i+6P8n0AHQ1T8cQRRz/bH5vcZRd++o2VIxobFj/1hTvDUeSzZnoEK7l+6o SxGVjzdaWHo0BDDQgWVLQnbT0a4kwIZutA4qxMBFXNdzNS6Js9BVfhx1m46vFBYr6UZM 9h8M9VGH4ehn6xj/9VfG9yazGeA+nzebqz8IO3JgNJuDo7pB1uqtfsDNbIsbJ/TDB4B0 ArpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996791; x=1760601591; 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=7+oN/DyZ5OmjZbLZHfaeiaZe3fElqmiRAqyveNfIkiY=; b=KIBfugEH6r3DgR+e2QwfJSegCYE/4lrRghUYCG1n1iMtOdnbZ6DNZgJazrUjLy7+sv KFn3T07HsfKzs+TsITSQE6cOI2ZtXtN4aTwuzSSVXeJsU+Kg5V9rfjrvVbNuOngUlK5g CgceATpZK5V24QJN51Dta70uOlQ17wPhG5YmV+kNW3cpvABmn/Ql8lYLPz0OnDf5v4Be Qt9u9c6wcEq2KJpg7w+/spzOfWylCx4/iE7hhmNN4rj+cgVg4HLHjlCmmzsefAUNlrKu MG2RHDEoK7xyPyC8XwL4m6uvK40VDtYBGQRiFNRpu5iYOfY1e1ACn1H1dlXMwWVvlF7A t3cA== X-Forwarded-Encrypted: i=1; AJvYcCXCAxPzTTC1EBWfpmxKqDoYO7fGe+6M3INGxqGweQzMG9IDtWC4+wRRTbaOfPrZiYRMxA59wuZi+0+Si34=@vger.kernel.org X-Gm-Message-State: AOJu0YzLx8zjX7EC6bsIubh1O3f0S7B8srstnJFFU2dIGCG3RS+eD+GS 4D44rdmuuiw3K4c3n9fw46+Zyk8kR/N3FpcYrDzCdVq3SyRfwX+htXZFpQDdeQ== X-Gm-Gg: ASbGncuKxQeoKfZaXszfgqR4PzafYoXWF0xF+GLpIUiwkchCQViHZiUYspNLnKSANZ8 zn8jR9qvLKgh/8nzeyFz2QDSIZPtUA7Lbzdl6Y+PVyAy+LN8VbDxlcV0opxUDZociSkrJ68ygkm WmuvVpSarpflgXMThI6246cmbB5oKaTuBJT17GTUhbH+TkQp+48yfJVz3vccjOSCoZ4HAgTXdU7 E+4hS0s3aef7/iTPj60wgMQXmwh3MHVRbmx0/2vvK1cNfMnUOqzzO72rETAL5VLnM6ZNSUTvLhu bWS/nqYiJl14NRp32JARTEZ3Uamv4O8umOaiFedROXV0ee96gyuBv0AJq59na/34NwDv6Osps5m 8R5lB+C8RNaF8oWDe0twrHJ8T22VbJPVrteKRKhVg1X6hHEZkyoPJ04Eq3BCPoGCDdeQ/tCM66T ov/Guua2Tbu9Gzhj1eZ2Vn2CXizn5XndEA X-Google-Smtp-Source: AGHT+IH3ImJkM3/bzzYQyK/9TOJC1LdehI/1ru2uvVM6TTb9f7+7EjH48P+FdhY/X4IZrQot7gdX+w== X-Received: by 2002:a17:907:d7ca:b0:b3d:a295:5445 with SMTP id a640c23a62f3a-b4f4116a343mr1423263866b.13.1759996791435; Thu, 09 Oct 2025 00:59:51 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:50 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 07/14] ceph: use the new ->i_state accessors Date: Thu, 9 Oct 2025 09:59:21 +0200 Message-ID: <20251009075929.1203950-8-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" Change generated with coccinelle and fixed up by hand as appropriate. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- cheat sheet: If ->i_lock is held, then: state =3D inode->i_state =3D> state =3D inode_state_read(inode) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear(inode, I_A | I_B) inode->i_state =3D I_A | I_B =3D> inode_state_assign(inode, I_A | I_B) If ->i_lock is not held or only held conditionally: state =3D inode->i_state =3D> state =3D inode_state_read_once(inod= e) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set_raw(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear_raw(inode, I_A | I= _B) inode->i_state =3D I_A | I_B =3D> inode_state_assign_raw(inode, I_A | = I_B) fs/ceph/cache.c | 2 +- fs/ceph/crypto.c | 4 ++-- fs/ceph/file.c | 4 ++-- fs/ceph/inode.c | 28 ++++++++++++++-------------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/fs/ceph/cache.c b/fs/ceph/cache.c index 930fbd54d2c8..f678bab189d8 100644 --- a/fs/ceph/cache.c +++ b/fs/ceph/cache.c @@ -26,7 +26,7 @@ void ceph_fscache_register_inode_cookie(struct inode *ino= de) return; =20 /* Only new inodes! */ - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return; =20 WARN_ON_ONCE(ci->netfs.cache); diff --git a/fs/ceph/crypto.c b/fs/ceph/crypto.c index 7026e794813c..928746b92512 100644 --- a/fs/ceph/crypto.c +++ b/fs/ceph/crypto.c @@ -329,7 +329,7 @@ int ceph_encode_encrypted_dname(struct inode *parent, c= har *buf, int elen) out: kfree(cryptbuf); if (dir !=3D parent) { - if ((dir->i_state & I_NEW)) + if ((inode_state_read_once(dir) & I_NEW)) discard_new_inode(dir); else iput(dir); @@ -438,7 +438,7 @@ int ceph_fname_to_usr(const struct ceph_fname *fname, s= truct fscrypt_str *tname, fscrypt_fname_free_buffer(&_tname); out_inode: if (dir !=3D fname->dir) { - if ((dir->i_state & I_NEW)) + if ((inode_state_read_once(dir) & I_NEW)) discard_new_inode(dir); else iput(dir); diff --git a/fs/ceph/file.c b/fs/ceph/file.c index 978acd3d4b32..1c9d73523b88 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c @@ -741,7 +741,7 @@ static int ceph_finish_async_create(struct inode *dir, = struct inode *inode, vino.ino, ceph_ino(dir), dentry->d_name.name); ceph_dir_clear_ordered(dir); ceph_init_inode_acls(inode, as_ctx); - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { /* * If it's not I_NEW, then someone created this before * we got here. Assume the server is aware of it at @@ -903,7 +903,7 @@ int ceph_atomic_open(struct inode *dir, struct dentry *= dentry, new_inode =3D NULL; goto out_req; } - WARN_ON_ONCE(!(new_inode->i_state & I_NEW)); + WARN_ON_ONCE(!(inode_state_read_once(new_inode) & I_NEW)); =20 spin_lock(&dentry->d_lock); di->flags |=3D CEPH_DENTRY_ASYNC_CREATE; diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 949f0badc944..4044a13969ad 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -132,7 +132,7 @@ struct inode *ceph_new_inode(struct inode *dir, struct = dentry *dentry, goto out_err; } =20 - inode->i_state =3D 0; + inode_state_assign_raw(inode, 0); inode->i_mode =3D *mode; =20 err =3D ceph_security_init_secctx(dentry, *mode, as_ctx); @@ -201,7 +201,7 @@ struct inode *ceph_get_inode(struct super_block *sb, st= ruct ceph_vino vino, =20 doutc(cl, "on %llx=3D%llx.%llx got %p new %d\n", ceph_present_inode(inode), ceph_vinop(inode), inode, - !!(inode->i_state & I_NEW)); + !!(inode_state_read_once(inode) & I_NEW)); return inode; } =20 @@ -228,7 +228,7 @@ struct inode *ceph_get_snapdir(struct inode *parent) goto err; } =20 - if (!(inode->i_state & I_NEW) && !S_ISDIR(inode->i_mode)) { + if (!(inode_state_read_once(inode) & I_NEW) && !S_ISDIR(inode->i_mode)) { pr_warn_once_client(cl, "bad snapdir inode type (mode=3D0%o)\n", inode->i_mode); goto err; @@ -261,7 +261,7 @@ struct inode *ceph_get_snapdir(struct inode *parent) } } #endif - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { inode->i_op =3D &ceph_snapdir_iops; inode->i_fop =3D &ceph_snapdir_fops; ci->i_snap_caps =3D CEPH_CAP_PIN; /* so we can open */ @@ -270,7 +270,7 @@ struct inode *ceph_get_snapdir(struct inode *parent) =20 return inode; err: - if ((inode->i_state & I_NEW)) + if ((inode_state_read_once(inode) & I_NEW)) discard_new_inode(inode); else iput(inode); @@ -744,7 +744,7 @@ void ceph_evict_inode(struct inode *inode) =20 netfs_wait_for_outstanding_io(inode); truncate_inode_pages_final(&inode->i_data); - if (inode->i_state & I_PINNING_NETFS_WB) + if (inode_state_read_once(inode) & I_PINNING_NETFS_WB) ceph_fscache_unuse_cookie(inode, true); clear_inode(inode); =20 @@ -1013,7 +1013,7 @@ int ceph_fill_inode(struct inode *inode, struct page = *locked_page, le64_to_cpu(info->version), ci->i_version); =20 /* Once I_NEW is cleared, we can't change type or dev numbers */ - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { inode->i_mode =3D mode; } else { if (inode_wrong_type(inode, mode)) { @@ -1090,7 +1090,7 @@ int ceph_fill_inode(struct inode *inode, struct page = *locked_page, =20 #ifdef CONFIG_FS_ENCRYPTION if (iinfo->fscrypt_auth_len && - ((inode->i_state & I_NEW) || (ci->fscrypt_auth_len =3D=3D 0))) { + ((inode_state_read_once(inode) & I_NEW) || (ci->fscrypt_auth_len =3D= =3D 0))) { kfree(ci->fscrypt_auth); ci->fscrypt_auth_len =3D iinfo->fscrypt_auth_len; ci->fscrypt_auth =3D iinfo->fscrypt_auth; @@ -1692,13 +1692,13 @@ int ceph_fill_trace(struct super_block *sb, struct = ceph_mds_request *req) pr_err_client(cl, "badness %p %llx.%llx\n", in, ceph_vinop(in)); req->r_target_inode =3D NULL; - if (in->i_state & I_NEW) + if (inode_state_read_once(in) & I_NEW) discard_new_inode(in); else iput(in); goto done; } - if (in->i_state & I_NEW) + if (inode_state_read_once(in) & I_NEW) unlock_new_inode(in); } =20 @@ -1887,11 +1887,11 @@ static int readdir_prepopulate_inodes_only(struct c= eph_mds_request *req, pr_err_client(cl, "inode badness on %p got %d\n", in, rc); err =3D rc; - if (in->i_state & I_NEW) { + if (inode_state_read_once(in) & I_NEW) { ihold(in); discard_new_inode(in); } - } else if (in->i_state & I_NEW) { + } else if (inode_state_read_once(in) & I_NEW) { unlock_new_inode(in); } =20 @@ -2103,7 +2103,7 @@ int ceph_readdir_prepopulate(struct ceph_mds_request = *req, pr_err_client(cl, "badness on %p %llx.%llx\n", in, ceph_vinop(in)); if (d_really_is_negative(dn)) { - if (in->i_state & I_NEW) { + if (inode_state_read_once(in) & I_NEW) { ihold(in); discard_new_inode(in); } @@ -2113,7 +2113,7 @@ int ceph_readdir_prepopulate(struct ceph_mds_request = *req, err =3D ret; goto next_item; } - if (in->i_state & I_NEW) + if (inode_state_read_once(in) & I_NEW) unlock_new_inode(in); =20 if (d_really_is_negative(dn)) { --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (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 8972B2D5920 for ; Thu, 9 Oct 2025 07:59:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996799; cv=none; b=AlxVEI76rqPc8pZlrpTatZ22PgWrKvdx4SjGwHlfR9ECIi7oKx1vLxpSF/JrYXHxCI79ZMWkPm0jvZaHXzNE53N2siqjQASYdhCLdm3pBuYj76vMuJQlpe1WVPduJj8k2GiFJbtwWw40TPXEJpN9d0kPinljfZUQ1Hm46iT8jUA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996799; c=relaxed/simple; bh=CjghRbVJnrrRxsFC/uqUg1E0WT10jkJULO+lABGoVkM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QiPuW2DCkfM/IKwFNgZXsd+snXO2gFNuc9bxI073pyjTkzwHzoPy9LG8ndXfucs3sm8SoJyDqrp1yC6XSQ7Wgsl/BmBB7QfcT/GhDzLx9E+a9uUSlXZjOl5vI6XcP1ZeuaM8NTJjh+DPeglqEh145tdFpgtRLzlMLORQY+crAJA= 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=XagQkyNV; arc=none smtp.client-ip=209.85.218.46 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="XagQkyNV" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-b3dbf11fa9eso105160566b.0 for ; Thu, 09 Oct 2025 00:59:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996793; x=1760601593; 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=8qUy8w4oQhAgPl6fOZI4wnlmjsFcl6OG6QfU8CrT8Pk=; b=XagQkyNVxo10BmQPyZD+yu//5tUJ2oRbuqYr1gAYVHfL+oBGf2DHyKr5NUSSOpszo9 XNVfIA7L2ILl3KlexyL25l2DusOVsoonl03HpxhblrhT/dSehwjKS4WCbhIuWCkU1sZz +yql5aQB76ryOHiSeI12l1yC8ghJFwdrGCCcfYtPTy91qDr3ksDgSx19jQIBI6I0Qrmb 6jVvsF6aacudvR7O4N7kmfCLBUsV2jdX+n+evXIeoLGKN1p241aiIXIjDZp/h2cyiiuQ uWHjDw9pGWbQjxRdbbUchADmgaYabJOE075a81KPgOTaVMvpTKKn1pw+dy1b0nkFz57T rHOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996793; x=1760601593; 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=8qUy8w4oQhAgPl6fOZI4wnlmjsFcl6OG6QfU8CrT8Pk=; b=crNt6lcCa/loXa8KyX0OIQ38KW/dLrO4LbQILhGWPVlBLM8yF/zWwMJINmoBIuEzt4 rCTX5RJnh80Jjyp+bkJC5J1s5JkrJUkyMZ+jb84fNFn2xsXO6dS2c0Sh80Yf0e/lclM0 v/XVWMS1Gcumb9fegBJ65B2NZ+6cD/b0sAFzt+NiHNd3Jx0qXMT5jY/dyXvFWqu8gV35 f5lwoaGUTDvxeGg7VOEHy5mp1ZFcayXVzKGHAqNgwyzdMDmxfPANFlFXzx6Pw8D69Nh4 PAIwcePQ3zUhjENFL7otTDXz6HC9mJa5ZpnjXOfHzinLE8qbEmyHaJZvvoy3cbMqP5v2 x4iQ== X-Forwarded-Encrypted: i=1; AJvYcCWUqTSyM59M9eFp8P5GeMjMKs9swu8zwpKXxGx2fl1n4++31Pw8qcFLiQE9UB2xIURRSIAl3YZd7vS5aPI=@vger.kernel.org X-Gm-Message-State: AOJu0YxppkOJgoVSafNeAyrRO7EsIsqAWhUBSSg4ajlElLj8fEBUHUoR m4D8yJkWAjRjp1O5famQWc1QvjUpPc8t8Hi5u+UiIIS7GmGbH5DPqqUh X-Gm-Gg: ASbGncuabnhK4Jm/AOesPSx8usxTSxkjq/UU68OOcjkNve6s/eprzm3Y9jH8leOs9aV Z36RWxmtXLsQqy7k2yXW+/u/EMLw/11kEFRq6Koc6QO9umATcDT2bO+w9x6Lvqe9nHFrJBBczdR klg+54n19V2k9p84Vf9NOkUMUWMke91BCNeBXGLrkZu2cKamBSVURyJGtP0/igbfnvi36aP0r2K xpXEPCQVlWGW0wzkMH4opPI4YQoz3dQkP24vBZ4DXvsLNnHDHki7S5ov8CoMyXGjQf24dmWOm5T nJ8GhourAt3zkMLJeNhTipjQwslaz6ci3xJCuVf+NWH3SSWdWUoH9jCtE8HwXh4aozo+F3bv0dq Ab5cWkeeFrhsMZNTeC334jD0wmR3lNkOh1NhiWDI5jPWcK9EEIYEbDgL5GzjYcMiwF9oxXkSH9g GGhWHiQHSlCA7frz/0T6MamA== X-Google-Smtp-Source: AGHT+IGbrd08TTcAFiqwbpW9BDTUl/1zMbIp8ia/BbOIaKggRHixcVaV3Fgadc1Z9T3iA/deAE80rw== X-Received: by 2002:a17:907:9702:b0:b3c:6093:679b with SMTP id a640c23a62f3a-b50ac2d58b3mr707002766b.36.1759996793003; Thu, 09 Oct 2025 00:59:53 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:52 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 08/14] smb: use the new ->i_state accessors Date: Thu, 9 Oct 2025 09:59:22 +0200 Message-ID: <20251009075929.1203950-9-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" Change generated with coccinelle and fixed up by hand as appropriate. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- cheat sheet: If ->i_lock is held, then: state =3D inode->i_state =3D> state =3D inode_state_read(inode) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear(inode, I_A | I_B) inode->i_state =3D I_A | I_B =3D> inode_state_assign(inode, I_A | I_B) If ->i_lock is not held or only held conditionally: state =3D inode->i_state =3D> state =3D inode_state_read_once(inod= e) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set_raw(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear_raw(inode, I_A | I= _B) inode->i_state =3D I_A | I_B =3D> inode_state_assign_raw(inode, I_A | = I_B) fs/smb/client/cifsfs.c | 2 +- fs/smb/client/inode.c | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/fs/smb/client/cifsfs.c b/fs/smb/client/cifsfs.c index 1775c2b7528f..103289451bd7 100644 --- a/fs/smb/client/cifsfs.c +++ b/fs/smb/client/cifsfs.c @@ -484,7 +484,7 @@ cifs_evict_inode(struct inode *inode) { netfs_wait_for_outstanding_io(inode); truncate_inode_pages_final(&inode->i_data); - if (inode->i_state & I_PINNING_NETFS_WB) + if (inode_state_read_once(inode) & I_PINNING_NETFS_WB) cifs_fscache_unuse_inode_cookie(inode, true); cifs_fscache_release_inode_cookie(inode); clear_inode(inode); diff --git a/fs/smb/client/inode.c b/fs/smb/client/inode.c index 8bb544be401e..32d9054a77fc 100644 --- a/fs/smb/client/inode.c +++ b/fs/smb/client/inode.c @@ -101,7 +101,7 @@ cifs_revalidate_cache(struct inode *inode, struct cifs_= fattr *fattr) cifs_dbg(FYI, "%s: revalidating inode %llu\n", __func__, cifs_i->uniqueid); =20 - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { cifs_dbg(FYI, "%s: inode %llu is new\n", __func__, cifs_i->uniqueid); return; @@ -146,7 +146,7 @@ cifs_nlink_fattr_to_inode(struct inode *inode, struct c= ifs_fattr *fattr) */ if (fattr->cf_flags & CIFS_FATTR_UNKNOWN_NLINK) { /* only provide fake values on a new inode */ - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { if (fattr->cf_cifsattrs & ATTR_DIRECTORY) set_nlink(inode, 2); else @@ -167,12 +167,12 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_= fattr *fattr, struct cifsInodeInfo *cifs_i =3D CIFS_I(inode); struct cifs_sb_info *cifs_sb =3D CIFS_SB(inode->i_sb); =20 - if (!(inode->i_state & I_NEW) && + if (!(inode_state_read_once(inode) & I_NEW) && unlikely(inode_wrong_type(inode, fattr->cf_mode))) { CIFS_I(inode)->time =3D 0; /* force reval */ return -ESTALE; } - if (inode->i_state & I_NEW) + if (inode_state_read_once(inode) & I_NEW) CIFS_I(inode)->netfs.zero_point =3D fattr->cf_eof; =20 cifs_revalidate_cache(inode, fattr); @@ -194,7 +194,7 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fa= ttr *fattr, inode->i_gid =3D fattr->cf_gid; =20 /* if dynperm is set, don't clobber existing mode */ - if (inode->i_state & I_NEW || + if (inode_state_read(inode) & I_NEW || !(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM)) inode->i_mode =3D fattr->cf_mode; =20 @@ -236,7 +236,7 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fa= ttr *fattr, =20 if (fattr->cf_flags & CIFS_FATTR_JUNCTION) inode->i_flags |=3D S_AUTOMOUNT; - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { cifs_set_netfs_context(inode); cifs_set_ops(inode); } @@ -1638,7 +1638,7 @@ cifs_iget(struct super_block *sb, struct cifs_fattr *= fattr) cifs_fattr_to_inode(inode, fattr, false); if (sb->s_flags & SB_NOATIME) inode->i_flags |=3D S_NOATIME | S_NOCMTIME; - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { inode->i_ino =3D hash; cifs_fscache_get_inode_cookie(inode); unlock_new_inode(inode); --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (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 3BBF42D9EDD for ; Thu, 9 Oct 2025 07:59:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996800; cv=none; b=qnW7iqMpVh1rOb3o/lQK5L39NU9t8jV1BskQ1PPi52CWLvBDcjBw2yetrtssaoLEFdR8EUJjgzAb6tEWBQxSnFWCv+UjEVMQh3yTus5guWijEsOGCmcFaeb8QRorMSgdiJ7JacgnKCZC9wz8EWEMMol7FtZY6zRbpRiD8hNYO8s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996800; c=relaxed/simple; bh=QVMfbOgdcHUC8MA0FXNAvsLx1wDWQy6WIvHpfH+dzno=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MfI1phqYLVki4t79cTSAkD1JLfk4qJms3agOZmbDcoAJr9iezbdZ4kqsVH8TOiFaBNN02FNmpQ+BrOzMnENrVhUnI/2rVw7XjL25JbQ/szE/Kqnwtns2GrXfiFSmGalG/Z1jCuLIWWp3h3aTGAwiEMb3Ae3D3DFCCRTXX3trmZY= 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=Uf6GuUdU; arc=none smtp.client-ip=209.85.218.49 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="Uf6GuUdU" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-b4539dddd99so127360766b.1 for ; Thu, 09 Oct 2025 00:59:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996795; x=1760601595; 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=bIPlImYUmrVBYfxz+HlFQqCPCvc3ID3O+4ctjIKepMc=; b=Uf6GuUdU5qGcyXY/QE0xsvc54ppyyNy+WjunZiiid9wZoBoElQZtYJhTqfkdGsZ/Dw UOPCKCzEjlofEbYCIUeVQ7UGhPL5ZOTIKVqK8IEywi9Qw2A6b7E2zU76IaRm/F+2jYz9 ISQRvZARuGcwOvQOCvRAxj8EBFu52MKxUw9K2fkR9Bvm0Ryt/dc7WWgqEiGemOvCbCQV Vpr9uf6Rx78KsW953fmxOg95jKHx3sEvASdCnIFwVw0HesGxeTSCrQrESsvm1FyGJDu1 8xSEeEEUTtfg6bKph0Kq3YSkzGdNGmpXa/Gxp89Mf6xlMss0vBudN7iH1xiGByi+FtcT gpUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996795; x=1760601595; 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=bIPlImYUmrVBYfxz+HlFQqCPCvc3ID3O+4ctjIKepMc=; b=S3InsFPoZaLbVR6TNrxZQcvfZpweT/iEsvvQJmb6pVNVIFDYkSpPlEZju1X9g/YheK T4EX1MxVXaeWxyowAVn7TZ+HMVtdh5NDdJKYRuOonj8/alIqzKGoJKhppP/5o9drJV34 fXp+AW7Iz8WM3P1MtCJ/p5SKXawuYLjHvvMrt9qzqHmP6xAdndxCpVkzGgCQ9FIkUE07 n9M+lx97RoDi16n0p+cdvISmk3Kxq+H2B/ds08r0IR9NtLYd2U0NFDOFkuYGI37hjwHu nsIlVDEY8g/hLGLmdQVE6AqQzhHrK47Bxs5z6ffWi5C3ARYbZ7ppgL6qU2dGhAPWbTzJ k7YQ== X-Forwarded-Encrypted: i=1; AJvYcCUvCU03A3PLf+BTodtHxl7lwGUPqg3OjkFEwq1BuPcDTNAm9puuoj9XcxBNIdbAVlmemWsGNMKuXvsv3iQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxJFniGi1gxrlVYIiKZS7oTYlLNEtQReOTGcIRvKU4nsa+u2bkT Izalk9DGBdBuvXWIye+0kt8pXoqfqmIw4jEegbp/KGPrJTOuL3KRAPhWAx4UtA== X-Gm-Gg: ASbGncs2xEmAVn56TShGcX4sK+Or63/85iq4ni4DWUOE0Fld4u9HwW2L4iYKeL5l+Y5 fFoUEsSdJbbM02JoFgPmDO9eKpqHcA5uyg1QlVkHcB56jJwjMo5vYvCL2mmxCzT2q/sauAvY9ry fMzRE+pa+BUBhggiJcuzs700i473VpcfwzaAmPCWNILwh9D5p0sxwdXvVK22RuaocwxhUL/z1GV cQK/G7M/feA3cOqzEY7E7l0TKt5QQqnPt//9cG/xOD+sTgH6jTDPynKP2q23xkUvbrF7siw1un5 qemkPPaGCGYlnsMXSmetCYKp9UnZ6g/aOd7DJ9WAB4u3cOMZboQrdSnSaPmJR5j26NRUtLaQwk7 MEicdu8p3F8+VkyS0Xe+wl8bFOZfQ0gw4vuQgNrpl5iQRmJjm8QQbaF9Ipnrz4Y3nLeezakFclK yMfJenc9GdVG6q3YEmm6BqiA== X-Google-Smtp-Source: AGHT+IFNrrAwL3X54wIwGninQDRe5HCAzI3hX5RakrOFeGNwzcDRNVEDhJxmZSvdgNTCtAirMAoMEA== X-Received: by 2002:a17:907:5c8:b0:b40:b6a9:f70f with SMTP id a640c23a62f3a-b50a9c5b352mr706189766b.4.1759996794568; Thu, 09 Oct 2025 00:59:54 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:54 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 09/14] f2fs: use the new ->i_state accessors Date: Thu, 9 Oct 2025 09:59:23 +0200 Message-ID: <20251009075929.1203950-10-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" Change generated with coccinelle and fixed up by hand as appropriate. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- cheat sheet: If ->i_lock is held, then: state =3D inode->i_state =3D> state =3D inode_state_read(inode) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear(inode, I_A | I_B) inode->i_state =3D I_A | I_B =3D> inode_state_assign(inode, I_A | I_B) If ->i_lock is not held or only held conditionally: state =3D inode->i_state =3D> state =3D inode_state_read_once(inod= e) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set_raw(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear_raw(inode, I_A | I= _B) inode->i_state =3D I_A | I_B =3D> inode_state_assign_raw(inode, I_A | = I_B) fs/f2fs/data.c | 2 +- fs/f2fs/inode.c | 2 +- fs/f2fs/namei.c | 4 ++-- fs/f2fs/super.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index ef38e62cda8f..c5319864e4ff 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -4222,7 +4222,7 @@ static int f2fs_iomap_begin(struct inode *inode, loff= _t offset, loff_t length, =20 if (map.m_flags & F2FS_MAP_NEW) iomap->flags |=3D IOMAP_F_NEW; - if ((inode->i_state & I_DIRTY_DATASYNC) || + if ((inode_state_read_once(inode) & I_DIRTY_DATASYNC) || offset + length > i_size_read(inode)) iomap->flags |=3D IOMAP_F_DIRTY; =20 diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index 8c4eafe9ffac..f1cda1900658 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c @@ -569,7 +569,7 @@ struct inode *f2fs_iget(struct super_block *sb, unsigne= d long ino) if (!inode) return ERR_PTR(-ENOMEM); =20 - if (!(inode->i_state & I_NEW)) { + if (!(inode_state_read_once(inode) & I_NEW)) { if (is_meta_ino(sbi, ino)) { f2fs_err(sbi, "inaccessible inode: %lu, run fsck to repair", ino); set_sbi_flag(sbi, SBI_NEED_FSCK); diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c index b882771e4699..af40282a6948 100644 --- a/fs/f2fs/namei.c +++ b/fs/f2fs/namei.c @@ -844,7 +844,7 @@ static int __f2fs_tmpfile(struct mnt_idmap *idmap, stru= ct inode *dir, f2fs_i_links_write(inode, false); =20 spin_lock(&inode->i_lock); - inode->i_state |=3D I_LINKABLE; + inode_state_set(inode, I_LINKABLE); spin_unlock(&inode->i_lock); } else { if (file) @@ -1057,7 +1057,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struc= t inode *old_dir, goto put_out_dir; =20 spin_lock(&whiteout->i_lock); - whiteout->i_state &=3D ~I_LINKABLE; + inode_state_clear(whiteout, I_LINKABLE); spin_unlock(&whiteout->i_lock); =20 iput(whiteout); diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index fd8e7b0b2166..8806a1f221cf 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -1798,7 +1798,7 @@ static int f2fs_drop_inode(struct inode *inode) * - f2fs_gc -> iput -> evict * - inode_wait_for_writeback(inode) */ - if ((!inode_unhashed(inode) && inode->i_state & I_SYNC)) { + if ((!inode_unhashed(inode) && inode_state_read(inode) & I_SYNC)) { if (!inode->i_nlink && !is_bad_inode(inode)) { /* to avoid evict_inode call simultaneously */ __iget(inode); --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (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 375732DE715 for ; Thu, 9 Oct 2025 07:59:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996802; cv=none; b=diGeskb7cFyyNSRqqTuicaX6OXgN4PulfkRTvLUrYclgWF6BMHD+gLBaKLgOH34wiU7y+b6GPf8tMpTrjujyd7OdqvYd2SqZS/9eSEQqIjKoPPESneL60SqvsisYKMqsDl9c5u/y0XC5wZ3DSuRWLTZG+m1JAORYzf4PWa0TNfw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996802; c=relaxed/simple; bh=/cqQv1oOvMBB/gcvyCBa5YEa/IRjaQrlQOy43h9dHwA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m5n+IB/q+k0fAA3EKg4nfFUCvPUTMaDq+zzeTbCmwmDHvZdjlUvWAm/C4JXPJj9Mu0/k0rpT4tSWimfQLq9kafwcOX+MBhj8ksDsbR7ZagxK6QtGZX7xC8IQQGjSH7ZIka8QwqPP2oYSd3+N/VNW+qjszIJ2VwTd1mER5qdMcUk= 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=ew5zYcEq; arc=none smtp.client-ip=209.85.218.48 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="ew5zYcEq" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-b3d80891c6cso269087066b.1 for ; Thu, 09 Oct 2025 00:59:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996796; x=1760601596; 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=/vvnOkz4atcWA58/jQeeHXsdoEGYAYVoEEVQml2bbRs=; b=ew5zYcEqadDCdgfUV94LO5s5dKRdiH+8Dutj252LuqFpGQY3Al5ZbBAEvxojhptiJR rl1xUN4umLW6XOvHlxU5+c6ZWtUsAy892+6aOjsQFQX7m65Fc/ttE7TR+P/aAjdIyAGJ sH0REWKNY2CgVor/+4ZIgNyCRL0vbfKsMTxQpI8eMqJdIfvKp2d545gMdWLP0fJrLcMq qZ7b4bT1XKcWCCzKOi7AcqA0BgH6lD4E0YOXuX3O+1HvgRy0/V8bDlTgIgtGqJFf+lCb /mmt6jsAV9783xlDpf+hcOwio7PpIOL+M1MnEux3epL3MXBORiw04cOYKoM7fgZkuotU vw0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996796; x=1760601596; 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=/vvnOkz4atcWA58/jQeeHXsdoEGYAYVoEEVQml2bbRs=; b=bm2draclBA6211MO8FuMgzywJE3eejf6ZfIQuKyhTw7Ctg1PI1VU/3mjUzHgW10c9j xzxIKLoE91+RNGp4KQ7RBAOvtYyoe0MySQm1vpmumyEdOz1pt0kth865OiiknXnDUKr4 Ejp2oHW7Benq43tuiyQEQkZUMmopXDdQJYt8ZHd7pPip/a1g3jbcZy79jL27WHReoYmf 8vHguxhmf/0xp4chf9Ksnq+M724IXHvOYW7aTplI2OEP51EQJmOSCPQS6PRrrPreHBXR 6K3T3fWMu3jSlv5KXWp9Y07XkxENFA/Le4Q3Q9XhllBmXDI/JE3FzZcu9ls8jxqj9p1i /jbA== X-Forwarded-Encrypted: i=1; AJvYcCVQ6MjQjQKALbHBjdo+BrtuPsUjQ9Xj2gjQ3zIp4zd7aBdOF10QNOKVwM1eeLREaAn9GpiV+LL7UqFLc0s=@vger.kernel.org X-Gm-Message-State: AOJu0YzWqlPHdtREJR6LaaX3xnFIqVsw04F/kCVRtbOp/xyWmlZkWd62 WHgRcfFtw3nY1adrf2Hbv6Ba/xlRQ2MeC8tZHeJDSZe1K2ZZHy5I2Bmh X-Gm-Gg: ASbGncsNmE4vqSLmrfFjbkZsvQzUHNMLou4NywrNmVGTFODf/4vc0o6X9uJ79PQt/9x mE2/DjSb3ncS/32/Yb+0XkGtFaUkodN1Vc4zVieNSm595QqC4Im0DZrFBcQSJzrc5+iXbVFzJOf SHh5JEJRRKDmQ4o7GQeH5d9a1j5wiD1ghu0wbgzctu+XN6EWTvj1coe8m2xWP0Mwv+ncz/hbymZ ouabO15EO60g38POyYwTgggOwk9SxyEGRL2x7ZG9Ivrq+TLEv6ySOPDqocqK6tgpB/NA/IZmQ+1 Z2jnKe6QLgr7ZV/rB4uA5ENw7dNFo5/rt78N/3Vm2ZoS0ptMVq6Mmmd6opE32aaQxVf7B+2a66+ 2G14OTUYJgvX64IXXeQ177HE6ofq2eR+EMga3qd/f8ZmEwFiHeRiI9+kqPG3JaET8qABJNDi4ri mZ7hHGLILLJt+/7TavCcH4wZ0TKUp8UJfo X-Google-Smtp-Source: AGHT+IFk+plQU3gbT8WHeH+M0VCYeK9zkslYVYbphoqJ8EvM8SjW4SFtpg6ttNALumPDiCOlAkCHiA== X-Received: by 2002:a17:906:f58c:b0:b50:a87e:efe5 with SMTP id a640c23a62f3a-b50bedbf41fmr714239766b.19.1759996796348; Thu, 09 Oct 2025 00:59:56 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:55 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 10/14] gfs2: use the new ->i_state accessors Date: Thu, 9 Oct 2025 09:59:24 +0200 Message-ID: <20251009075929.1203950-11-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" Change generated with coccinelle and fixed up by hand as appropriate. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- cheat sheet: If ->i_lock is held, then: state =3D inode->i_state =3D> state =3D inode_state_read(inode) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear(inode, I_A | I_B) inode->i_state =3D I_A | I_B =3D> inode_state_assign(inode, I_A | I_B) If ->i_lock is not held or only held conditionally: state =3D inode->i_state =3D> state =3D inode_state_read_once(inod= e) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set_raw(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear_raw(inode, I_A | I= _B) inode->i_state =3D I_A | I_B =3D> inode_state_assign_raw(inode, I_A | = I_B) fs/gfs2/file.c | 2 +- fs/gfs2/glops.c | 2 +- fs/gfs2/inode.c | 4 ++-- fs/gfs2/ops_fstype.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index bc67fa058c84..ee92f5910ae1 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -744,7 +744,7 @@ static int gfs2_fsync(struct file *file, loff_t start, = loff_t end, { struct address_space *mapping =3D file->f_mapping; struct inode *inode =3D mapping->host; - int sync_state =3D inode->i_state & I_DIRTY; + int sync_state =3D inode_state_read_once(inode) & I_DIRTY; struct gfs2_inode *ip =3D GFS2_I(inode); int ret =3D 0, ret1 =3D 0; =20 diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c index 0c0a80b3baca..c94e42b0c94d 100644 --- a/fs/gfs2/glops.c +++ b/fs/gfs2/glops.c @@ -394,7 +394,7 @@ static int gfs2_dinode_in(struct gfs2_inode *ip, const = void *buf) u16 height, depth; umode_t mode =3D be32_to_cpu(str->di_mode); struct inode *inode =3D &ip->i_inode; - bool is_new =3D inode->i_state & I_NEW; + bool is_new =3D inode_state_read_once(inode) & I_NEW; =20 if (unlikely(ip->i_no_addr !=3D be64_to_cpu(str->di_num.no_addr))) { gfs2_consist_inode(ip); diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index 8a7ed80d9f2d..890c87e3e365 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c @@ -127,7 +127,7 @@ struct inode *gfs2_inode_lookup(struct super_block *sb,= unsigned int type, =20 ip =3D GFS2_I(inode); =20 - if (inode->i_state & I_NEW) { + if (inode_state_read_once(inode) & I_NEW) { struct gfs2_sbd *sdp =3D GFS2_SB(inode); struct gfs2_glock *io_gl; int extra_flags =3D 0; @@ -924,7 +924,7 @@ static int gfs2_create_inode(struct inode *dir, struct = dentry *dentry, gfs2_dir_no_add(&da); gfs2_glock_dq_uninit(&d_gh); if (!IS_ERR_OR_NULL(inode)) { - if (inode->i_state & I_NEW) + if (inode_state_read_once(inode) & I_NEW) iget_failed(inode); else iput(inode); diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c index aa15183f9a16..889682f051ea 100644 --- a/fs/gfs2/ops_fstype.c +++ b/fs/gfs2/ops_fstype.c @@ -1751,7 +1751,7 @@ static void gfs2_evict_inodes(struct super_block *sb) spin_lock(&sb->s_inode_list_lock); list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { spin_lock(&inode->i_lock); - if ((inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) && + if ((inode_state_read(inode) & (I_FREEING | I_WILL_FREE | I_NEW)) && !need_resched()) { spin_unlock(&inode->i_lock); continue; --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 61C342DF71B for ; Thu, 9 Oct 2025 08:00:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996804; cv=none; b=EB55ZZZOsAre9z2fbl1ninD2d3Ph1bDzSyecGFUldhkkYGtF3HBvA5Fyf52HQ7pXGg/cD7DLGiI9z9N6j+ZY8vtWxpAOp2fw6rpaT0+MSbs5854DLlA6b78Ktf45QB4Qn7rBOj6/FTt566kK55qtj9eH+C+JUxA8VdWxiBzQ2cs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996804; c=relaxed/simple; bh=jQNHepm+GfxiH8iJqPWkaNzoPhlEV+QYfSEO5RaRoCE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mm/GtIOSQSqqddJRXDT35e30gp2H8CVmAq1v4gYbrJAupog23QitS7mUepTMPC9U3UQh4KxjH+5a9HXcoM6aDXU2/1hK3QRxtj2G+IWaGftWWniWFUht6AllGxCp53wOkbyBezqf/0n2wmZghOs0MDmsDwsZcKE0yHKTEEWuJ1U= 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=c5K+GMVy; arc=none smtp.client-ip=209.85.218.54 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="c5K+GMVy" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-afcb7ae31caso106770866b.3 for ; Thu, 09 Oct 2025 01:00:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996798; x=1760601598; 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=ij6PghlUCkvZUM92+6FKF+AKyv5iaQdA6DsJZ2ToQxg=; b=c5K+GMVyvYS40R24tzKNe19Haju195Y5qlAxziozaALQvmrqE9I5VLb9jvbvL3ce0S 9KJjhQJZc0VFZh1hu0PVkW30bq8WYihS0YgD7WOyxL9T2A2DT4OPO9gevJTckIpMfDur /4F/eAI9OI8Z/aJwx9rvfVTln4d1R/uvsYFQAMMiSNScOd5c2Mg0Z4lWxtbFfD2TkpVo UmaEhCgZ99AvhhNYboANd05myEtwvtiBHrUW5Nktd4C3ouEQhbnnFV0WxCxP8g+rIBPD qq2T2jcjtJY8imtE0I/20zxHlgHjUwvCudFbPpVoWJWr1HmZxlgv3+v568Zfs3a+Zmbr sBQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996798; x=1760601598; 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=ij6PghlUCkvZUM92+6FKF+AKyv5iaQdA6DsJZ2ToQxg=; b=ZDWJhQ7Cl+EjhWOwYZZYxD5zj7ccY7GEM/dZwL8gylo2M99B9Z6escOY3K3IvH2VOL sIW035DIE2rfWi7xy93nwT8EpKwA0RhILQELFZgQDh0mti+KTrGVgqNkb+3UcHlf2zT4 voK+UX/iDFoAWHI9FA3Rs4gN/MjGVJstMi00nE3TotMFTglqDLmzQ8OuagZ+2Aaq4wfR WiD+UAOckYplhlF36z2r9GMy2Gyo2UmGBvhndByC5Rlp1ysYBMnyWnyDJhptOFRpDXky VZ1EVlDSRVkGL3vfeHvDPlILCyU+G0E4rslv/rsSHAfZIo+Ra9M85IK4NLuU5cr4tkVm J7KA== X-Forwarded-Encrypted: i=1; AJvYcCUAdcOILtZw0zdtkBFGYaGGa3A6mMuPH5/TNzCDlgi2ItNCV1Zqf99X574Ipy87PkV9zxv2RfoucMtOqoI=@vger.kernel.org X-Gm-Message-State: AOJu0YxzM3MnMVCCI1Ln6dxmo8J6HdEjjYQf9ehF6T/ciYWMBk71pU0d aCiXFTt9SCTan+1YPPJIh/PupcEF1d5luVJJMAR0M9T/RNc62xzqbrMX X-Gm-Gg: ASbGncvq+bzFRy1T0BDLMjRk6BmKTSA0la797cPWKVSNIBylUi5pwzrd5L7Y7PNpr1l TXCuBMR9ePjmLm5yeIKwWi3k+w9+VDuGQ+rGUtl0YIvIenWonVyMIenH427YU/KVj6LOfg7h2ly 3jTl+WFBDAwj1XFzlQPSeKVm/h+YTVUmvOZG8QkF6FqFFzfKvux16kEngv+qLk7Omy9h/8rvgNe DQNieIb+VwyODx1u2rt4VIME1+rx3ckmvTBp4QU4YAOgdsSmwpso6fBrDuslDZKBe9YaB4QzcKw 2pSmsf5F8zREbob6XBfJS0ZIBeH5PYIkioCy1YiiGMIzN0hF6zSQqRClNpUw0RO+B60YRcLjpuI u2FVZUbYMJrZGZba04tXeICAZsZcd05sk0su/lW8QrcCM2Aa5Ub4yFLsCGN3HpBelYx/3DTIdzk z7D3rsRt5jBm4M7nf/PWz1eg== X-Google-Smtp-Source: AGHT+IF3XO1P9pAg2+/sOoYw+aIYYoO0vgMYpDeSqig4GnRovdBm66KN0sJELngmUliGaQKvYfh3Bw== X-Received: by 2002:a17:906:c144:b0:b04:48b5:6e8a with SMTP id a640c23a62f3a-b50aa292fb7mr691075466b.7.1759996798297; Thu, 09 Oct 2025 00:59:58 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 00:59:57 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 11/14] overlayfs: use the new ->i_state accessors Date: Thu, 9 Oct 2025 09:59:25 +0200 Message-ID: <20251009075929.1203950-12-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" Change generated with coccinelle and fixed up by hand as appropriate. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- cheat sheet: If ->i_lock is held, then: state =3D inode->i_state =3D> state =3D inode_state_read(inode) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear(inode, I_A | I_B) inode->i_state =3D I_A | I_B =3D> inode_state_assign(inode, I_A | I_B) If ->i_lock is not held or only held conditionally: state =3D inode->i_state =3D> state =3D inode_state_read_once(inod= e) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set_raw(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear_raw(inode, I_A | I= _B) inode->i_state =3D I_A | I_B =3D> inode_state_assign_raw(inode, I_A | = I_B) fs/overlayfs/dir.c | 2 +- fs/overlayfs/inode.c | 6 +++--- fs/overlayfs/util.c | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index a5e9ddf3023b..83b955a1d55c 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c @@ -686,7 +686,7 @@ static int ovl_create_object(struct dentry *dentry, int= mode, dev_t rdev, goto out_drop_write; =20 spin_lock(&inode->i_lock); - inode->i_state |=3D I_CREATING; + inode_state_set(inode, I_CREATING); spin_unlock(&inode->i_lock); =20 inode_init_owner(&nop_mnt_idmap, inode, dentry->d_parent->d_inode, mode); diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index aaa4cf579561..b7938dd43b95 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -1149,7 +1149,7 @@ struct inode *ovl_get_trap_inode(struct super_block *= sb, struct dentry *dir) if (!trap) return ERR_PTR(-ENOMEM); =20 - if (!(trap->i_state & I_NEW)) { + if (!(inode_state_read_once(trap) & I_NEW)) { /* Conflicting layer roots? */ iput(trap); return ERR_PTR(-ELOOP); @@ -1240,7 +1240,7 @@ struct inode *ovl_get_inode(struct super_block *sb, inode =3D ovl_iget5(sb, oip->newinode, key); if (!inode) goto out_err; - if (!(inode->i_state & I_NEW)) { + if (!(inode_state_read_once(inode) & I_NEW)) { /* * Verify that the underlying files stored in the inode * match those in the dentry. @@ -1300,7 +1300,7 @@ struct inode *ovl_get_inode(struct super_block *sb, if (upperdentry) ovl_check_protattr(inode, upperdentry); =20 - if (inode->i_state & I_NEW) + if (inode_state_read_once(inode) & I_NEW) unlock_new_inode(inode); out: return inode; diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c index f76672f2e686..2da1c035f716 100644 --- a/fs/overlayfs/util.c +++ b/fs/overlayfs/util.c @@ -1019,8 +1019,8 @@ bool ovl_inuse_trylock(struct dentry *dentry) bool locked =3D false; =20 spin_lock(&inode->i_lock); - if (!(inode->i_state & I_OVL_INUSE)) { - inode->i_state |=3D I_OVL_INUSE; + if (!(inode_state_read(inode) & I_OVL_INUSE)) { + inode_state_set(inode, I_OVL_INUSE); locked =3D true; } spin_unlock(&inode->i_lock); @@ -1034,8 +1034,8 @@ void ovl_inuse_unlock(struct dentry *dentry) struct inode *inode =3D d_inode(dentry); =20 spin_lock(&inode->i_lock); - WARN_ON(!(inode->i_state & I_OVL_INUSE)); - inode->i_state &=3D ~I_OVL_INUSE; + WARN_ON(!(inode_state_read(inode) & I_OVL_INUSE)); + inode_state_clear(inode, I_OVL_INUSE); spin_unlock(&inode->i_lock); } } @@ -1046,7 +1046,7 @@ bool ovl_is_inuse(struct dentry *dentry) bool inuse; =20 spin_lock(&inode->i_lock); - inuse =3D (inode->i_state & I_OVL_INUSE); + inuse =3D (inode_state_read(inode) & I_OVL_INUSE); spin_unlock(&inode->i_lock); =20 return inuse; --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.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 232B9275844 for ; Thu, 9 Oct 2025 08:00:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996806; cv=none; b=syx8RB2Sq9WvMCLAboUkMjBD25Vx5VFnfrB1RHtktDg3TT2rVisdEo15u0b0/ogXle0IaE5JHZR5EgBp2LZZnqHmzjJN3xynHbZb3bXAFOp6fX5mzkbw0ypFoAQSasDLIQZYV6ZyCB05doRUt/7lKCjF4YSEzRABBN1RBRXYO60= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996806; c=relaxed/simple; bh=2QbAfN1sDtH46T0pCil6VIq2aE98LlEN+X//kMc9EFo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nashJyBhtTSED97OgYFNlFGQkh4U24ZFMc4vVEv1cMiW06qoitOIYX46fsDTj45v1fbwnw7txBzIbRhsUHcJPTDrC5qPGdiE5HpWM1NBlU8kP+2WU+nySsFWRfZnmZg7kujTsaCtmSup+QlY6yj+Sfa2HKwZ7DMppwiLVk8q/x8= 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=LF9Acp4Z; arc=none smtp.client-ip=209.85.218.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LF9Acp4Z" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-b3e7cc84b82so124972866b.0 for ; Thu, 09 Oct 2025 01:00:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996801; x=1760601601; 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=WcQp0Bvlo76VjH/2Gk47KW1XiQMa/UaY/lp0sfvKhm8=; b=LF9Acp4Z0v/otroXtjSTqW3xlQnBsb7MuvlVLBETK5o+7XrUh5w5r5nGGSYpX1j0Bb 7i053xdG/e+wuOcCAvQwYddSFkwGnz25Wg8cHVeNdeoN0oNfEnAdWYWt+YmT58C+xzn6 CMq4s6GDjq71u5pQm/lSm+6kEXiOAoQ6RT6PyMX2bvbEifNZNEIhyse+aX4BdyD+okaa JEpzU+w0Ix2tp4ovi0zcNCQH8hLAvddj6vBhcTYVUwbFmb6gIwjoUogoICD+fou9CdLi mnNN5fyvNu5h2Kr7l8jB9SZJwUadhkVqj6p303P7nlH+j0ilcxwRQJaVtVVArL5gXomV Tq+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996801; x=1760601601; 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=WcQp0Bvlo76VjH/2Gk47KW1XiQMa/UaY/lp0sfvKhm8=; b=A/O4RlVNYfIGBdSgOsIwstiCUROWAiFryTQvdgmqr28oHwxOvNW8+NZDZ0MEGV5cs4 gUntF3kDhabvd93gc8dGrm1iFGdfQ38IDNSa/X5ZAkSNWh01aOxZJj4sdpoWkDmko7zd Izg8G9cglQkq0+M/u0econPdfmiOgFT5EJg87DfOFbDvEo2JE/ML+4vqG1gKY5UUts/a BY14LfOcPGwpZhhlyW/YOGqzQGCpQfvg1EYwuMDAmGbcXZ+Q3yLhag5al3NTXuGNKUg8 nNyDe1wRASmaFwu59/bpCJdpfw2iCMU7Q2ggrOnBFS40an9yqgOZ/4YLPBeiMoN6HpNk sx+Q== X-Forwarded-Encrypted: i=1; AJvYcCVT1vcpA+mi9iaKrrvV8sllX9an6tdIBUDwXNQAeK+hCFEwmO8yRa9JacYv56IkSxgSWmNoTGRyW8nMK5E=@vger.kernel.org X-Gm-Message-State: AOJu0YzclvK6Soc20a46qO2gW9GeLOZaBRXO7Q0EEQX78RhXrvi3KNJI 8fF4d9yXjn8vHYroikaR4xRcKrzsYGWwk0KdUxcpdAbCPWUlXk02la+/ X-Gm-Gg: ASbGncs4McDxANSSdm0l6068ENpOdIg9IWkAidGEsFZAlEhk6tPeK8qdvQF2o8++IdP khBLJOX9Yle1MBkdWXmJoJCa6Vt2GUScpO4wLo6+eykaz5RPc7p5dZYSisXu67PELKRrIG13pMt DngvWLeAegGkWvC/Ck18cpBbpCq82+L2IiPofzywXIY8YXbC9FYG1RaDboOKtu8QnVpliHXfPP1 0CycMosgxoD2qTo3Ov76hUSGb/4O6arqU5gunLcdjinsIL6uSVG6IEjHJC/nSpB34P7dJAhUBdj Zl27jQASm2PoTaU+lf/3ebZHWaZNs5M9n8W97ULQ1H/9hQMhAzv5CdbMAoaJbBk9MinXpS3p4rY wgPz42qNwersUjrjXR3WOBnrnZvGWgVyZdHaXn9Hh1kBkcVhkru5MAVfFG14qJnm0D+Wc+ZOIa2 UcK0Ci+1MwSxH4ekLOZof+xA== X-Google-Smtp-Source: AGHT+IHI7X0nz7MjsrUKXypB4cmDE9TvfyLdOuNT3vqztpfqSus7Fl9xUq6dWkzlfRFPUljWQHHtvA== X-Received: by 2002:a17:907:9447:b0:b04:3302:d7a8 with SMTP id a640c23a62f3a-b50aca012f2mr709847066b.58.1759996801156; Thu, 09 Oct 2025 01:00:01 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.00.59.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 01:00:00 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 12/14] nilfs2: use the new ->i_state accessors Date: Thu, 9 Oct 2025 09:59:26 +0200 Message-ID: <20251009075929.1203950-13-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" Change generated with coccinelle and fixed up by hand as appropriate. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- cheat sheet: If ->i_lock is held, then: state =3D inode->i_state =3D> state =3D inode_state_read(inode) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear(inode, I_A | I_B) inode->i_state =3D I_A | I_B =3D> inode_state_assign(inode, I_A | I_B) If ->i_lock is not held or only held conditionally: state =3D inode->i_state =3D> state =3D inode_state_read_once(inod= e) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set_raw(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear_raw(inode, I_A | I= _B) inode->i_state =3D I_A | I_B =3D> inode_state_assign_raw(inode, I_A | = I_B) fs/nilfs2/cpfile.c | 2 +- fs/nilfs2/dat.c | 2 +- fs/nilfs2/ifile.c | 2 +- fs/nilfs2/inode.c | 10 +++++----- fs/nilfs2/sufile.c | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/fs/nilfs2/cpfile.c b/fs/nilfs2/cpfile.c index bcc7d76269ac..4bbdc832d7f2 100644 --- a/fs/nilfs2/cpfile.c +++ b/fs/nilfs2/cpfile.c @@ -1148,7 +1148,7 @@ int nilfs_cpfile_read(struct super_block *sb, size_t = cpsize, cpfile =3D nilfs_iget_locked(sb, NULL, NILFS_CPFILE_INO); if (unlikely(!cpfile)) return -ENOMEM; - if (!(cpfile->i_state & I_NEW)) + if (!(inode_state_read_once(cpfile) & I_NEW)) goto out; =20 err =3D nilfs_mdt_init(cpfile, NILFS_MDT_GFP, 0); diff --git a/fs/nilfs2/dat.c b/fs/nilfs2/dat.c index c664daba56ae..674380837ab9 100644 --- a/fs/nilfs2/dat.c +++ b/fs/nilfs2/dat.c @@ -506,7 +506,7 @@ int nilfs_dat_read(struct super_block *sb, size_t entry= _size, dat =3D nilfs_iget_locked(sb, NULL, NILFS_DAT_INO); if (unlikely(!dat)) return -ENOMEM; - if (!(dat->i_state & I_NEW)) + if (!(inode_state_read_once(dat) & I_NEW)) goto out; =20 err =3D nilfs_mdt_init(dat, NILFS_MDT_GFP, sizeof(*di)); diff --git a/fs/nilfs2/ifile.c b/fs/nilfs2/ifile.c index c4cd4a4dedd0..99eb8a59009e 100644 --- a/fs/nilfs2/ifile.c +++ b/fs/nilfs2/ifile.c @@ -188,7 +188,7 @@ int nilfs_ifile_read(struct super_block *sb, struct nil= fs_root *root, ifile =3D nilfs_iget_locked(sb, root, NILFS_IFILE_INO); if (unlikely(!ifile)) return -ENOMEM; - if (!(ifile->i_state & I_NEW)) + if (!(inode_state_read_once(ifile) & I_NEW)) goto out; =20 err =3D nilfs_mdt_init(ifile, NILFS_MDT_GFP, diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c index 87ddde159f0c..51bde45d5865 100644 --- a/fs/nilfs2/inode.c +++ b/fs/nilfs2/inode.c @@ -365,7 +365,7 @@ struct inode *nilfs_new_inode(struct inode *dir, umode_= t mode) =20 failed_after_creation: clear_nlink(inode); - if (inode->i_state & I_NEW) + if (inode_state_read_once(inode) & I_NEW) unlock_new_inode(inode); iput(inode); /* * raw_inode will be deleted through @@ -562,7 +562,7 @@ struct inode *nilfs_iget(struct super_block *sb, struct= nilfs_root *root, if (unlikely(!inode)) return ERR_PTR(-ENOMEM); =20 - if (!(inode->i_state & I_NEW)) { + if (!(inode_state_read_once(inode) & I_NEW)) { if (!inode->i_nlink) { iput(inode); return ERR_PTR(-ESTALE); @@ -591,7 +591,7 @@ struct inode *nilfs_iget_for_gc(struct super_block *sb,= unsigned long ino, inode =3D iget5_locked(sb, ino, nilfs_iget_test, nilfs_iget_set, &args); if (unlikely(!inode)) return ERR_PTR(-ENOMEM); - if (!(inode->i_state & I_NEW)) + if (!(inode_state_read_once(inode) & I_NEW)) return inode; =20 err =3D nilfs_init_gcinode(inode); @@ -631,7 +631,7 @@ int nilfs_attach_btree_node_cache(struct inode *inode) nilfs_iget_set, &args); if (unlikely(!btnc_inode)) return -ENOMEM; - if (btnc_inode->i_state & I_NEW) { + if (inode_state_read_once(btnc_inode) & I_NEW) { nilfs_init_btnc_inode(btnc_inode); unlock_new_inode(btnc_inode); } @@ -686,7 +686,7 @@ struct inode *nilfs_iget_for_shadow(struct inode *inode) nilfs_iget_set, &args); if (unlikely(!s_inode)) return ERR_PTR(-ENOMEM); - if (!(s_inode->i_state & I_NEW)) + if (!(inode_state_read_once(s_inode) & I_NEW)) return inode; =20 NILFS_I(s_inode)->i_flags =3D 0; diff --git a/fs/nilfs2/sufile.c b/fs/nilfs2/sufile.c index 330f269abedf..83f93337c01b 100644 --- a/fs/nilfs2/sufile.c +++ b/fs/nilfs2/sufile.c @@ -1226,7 +1226,7 @@ int nilfs_sufile_read(struct super_block *sb, size_t = susize, sufile =3D nilfs_iget_locked(sb, NULL, NILFS_SUFILE_INO); if (unlikely(!sufile)) return -ENOMEM; - if (!(sufile->i_state & I_NEW)) + if (!(inode_state_read_once(sufile) & I_NEW)) goto out; =20 err =3D nilfs_mdt_init(sufile, NILFS_MDT_GFP, sizeof(*sui)); --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.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 66E102D23BF for ; Thu, 9 Oct 2025 08:00:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996808; cv=none; b=FkLRMmwXma0G1AEm9OUWbOX5RRgZOyKsU8FoTHOM1a4NRCqXL6w2TUm96YjiXOyYQ0TMLx1OYFY9L9PPUp0N4JNvBhmpq3BWj7o8IFEHAi2IjhOFZkQfueeUvf4E1SsSg/1PUgWfn+y8haoXdIgGLBlvoExFhSThC5v6KOGfHPY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996808; c=relaxed/simple; bh=+RBRF6meQwn3q9nzPryP2p+8250ep4XlqqidEyLjj2A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Zw9YpNmvzVqb8wdIU5z6L2yBr/Qb4htupS5HUSAbnH31w+t5kIinj3X42st1OMa6//FzvPPClA+ehmihb0a8WMLKGXWbjq6I75xnBOE70c4y/6d2hRoJhsekhwLgEd2TBRJYHj9ShvDrvTHJuy9Hj7lz4xJNp0yqdHnhpROoBeI= 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=fnp/ZE+S; arc=none smtp.client-ip=209.85.218.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fnp/ZE+S" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-b403bb7843eso127565766b.3 for ; Thu, 09 Oct 2025 01:00:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996804; x=1760601604; 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=XtNZzXzCxxpF7eJNzzGGCepg+EzDGtZJGp4a5sIIOtw=; b=fnp/ZE+SnFGGqdYjPEXfYpM67VICjbU02VFp7wjSOOatBehRt/dBhsNMOHO/6nwVB3 jnkwlcziHlgHkK+PG9v4A7K6/v71B1HLzZsRdjyCgik+sJjW2Z4oXjgZnzu2mSWH649Z ok9IUTJdev1mL0m0ApggQrjrtN9Q+Ovi1n6hlLE6mzYX6MbK+6jmx84UkuJKT/vIT7iv nRVPcGAX2ADZuFB3rYRyQwdEw+ZkvvPLvd3/n7bH/wM6y39oc7ln4cYHS3Tx1kaSYZbS cO2kIpTowdX+8+e5lqNGIu/Y75FfzPi8hqZ/Wj+ImxxFdrf/Vg9xCWOEs2BjNuvIHvp/ wh6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996804; x=1760601604; 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=XtNZzXzCxxpF7eJNzzGGCepg+EzDGtZJGp4a5sIIOtw=; b=kDsy+hnqOvvrRHm7pk1yBT37xIimbw4+T7k2MWE0KONhHpi8xLNH7VEr9P1/TyQzha edrSAK39Yk/RVNmkb34Q5B/yYYfsryAx0+Ae7V3kIE2txDKjiXGRYcxLMYXrMDKvbXLK 1ph8lyrgEng9F/bUAWKL/Ro56XutfKerck4iIhnA4jXz5ea6Moga5F67y9HNHB/y5v5O 4s/IldYZI78B7rOA9XG1RgRx8aLi+3dgxf0DkclJnnw+C375xCbiSX92QTnOGFfRl1t6 In1zXmNxZoW2u5uygcA5eXw3yxIv/sKnGcUz4y3Nx0L6zPxVmQVUx/D2/ENqYXj+x+kf 1/Kg== X-Forwarded-Encrypted: i=1; AJvYcCXCIqX+q5oNhpnLMj3ttGnf/0kclOJbmFiv0T/7K/xC+23Z8bypXbqzTN80jg3MHO5rwqp3UhJXoX67pKc=@vger.kernel.org X-Gm-Message-State: AOJu0YyyXWyQoYwOxOJ/zsBb2p0duaifqIbehHLDKl2pcO/euTiiY08f wey0uynCUY6Iyb+erNml8lVgBeePHuz4AvEeCH2YZaYTl4as+0WrDciJ X-Gm-Gg: ASbGncvYLPRPaB0GLaoRooMuxL+oMDkWGcPmDQlqcDa8NgMB7fGhQBbJbru7VUeqDcQ ltVVr5vpSlelBFK2+fKtLMZjr1U9pQmTLFhAHHy4mr4nND68vlodvH4Bfh+tpbCMisfVdE02BO/ fSZWTy8+EDVuc7+Ms2Z8tBjzouSIRABR1wtLS0YEH3gg/YMMnCDZIVLb9WM/8+woKwyWeeXHSg5 rPitKtFiTw5jMlgKrVCKVY1nwUsCsDnhI8SrStisJPOfxHbs5AMTW2aIdjrdwvbwYGnsjQAGA28 8v2L/V0g0qWSCADGxL2oxQqmv6FsDcwL6tGf5F/ZmtgJUi3AiSccy9H02AI5Qd7VC7b9gg7II/I /SiLCn7SbxwAeVNtrnBzOvt3Zn8y8+7aemV/ggONhCUKOE5kZT9Cp9Ls4CKtNU9XgNvcdmK98Gs Fm6Sbr+02jXaF9Kzlkqt9OYJTX2C67dulWkPTdwjjwO4M= X-Google-Smtp-Source: AGHT+IEouxbTI3/2qFJGFL8V5mVY3HAotK98uqu1QC3hyrh6oGwfceS36G8V1F2YUkpXySTgyqtUfg== X-Received: by 2002:a17:907:2d8a:b0:b3e:e16a:8cf2 with SMTP id a640c23a62f3a-b50aca0b087mr678905866b.56.1759996803728; Thu, 09 Oct 2025 01:00:03 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.01.00.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 01:00:03 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 13/14] xfs: use the new ->i_state accessors Date: Thu, 9 Oct 2025 09:59:27 +0200 Message-ID: <20251009075929.1203950-14-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" Change generated with coccinelle and fixed up by hand as appropriate. Signed-off-by: Mateusz Guzik --- cheat sheet: If ->i_lock is held, then: state =3D inode->i_state =3D> state =3D inode_state_read(inode) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear(inode, I_A | I_B) inode->i_state =3D I_A | I_B =3D> inode_state_assign(inode, I_A | I_B) If ->i_lock is not held or only held conditionally: state =3D inode->i_state =3D> state =3D inode_state_read_once(inod= e) inode->i_state |=3D (I_A | I_B) =3D> inode_state_set_raw(inode, I_A | I_B) inode->i_state &=3D ~(I_A | I_B) =3D> inode_state_clear_raw(inode, I_A | I= _B) inode->i_state =3D I_A | I_B =3D> inode_state_assign_raw(inode, I_A | = I_B) fs/xfs/scrub/common.c | 2 +- fs/xfs/scrub/inode_repair.c | 2 +- fs/xfs/scrub/parent.c | 2 +- fs/xfs/xfs_bmap_util.c | 2 +- fs/xfs/xfs_health.c | 4 ++-- fs/xfs/xfs_icache.c | 6 +++--- fs/xfs/xfs_inode.c | 6 +++--- fs/xfs/xfs_inode_item.c | 4 ++-- fs/xfs/xfs_iops.c | 2 +- fs/xfs/xfs_reflink.h | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/fs/xfs/scrub/common.c b/fs/xfs/scrub/common.c index 2ef7742be7d3..7bfa37c99480 100644 --- a/fs/xfs/scrub/common.c +++ b/fs/xfs/scrub/common.c @@ -1249,7 +1249,7 @@ xchk_irele( * hits do not clear DONTCACHE, so we must do it here. */ spin_lock(&VFS_I(ip)->i_lock); - VFS_I(ip)->i_state &=3D ~I_DONTCACHE; + inode_state_clear(VFS_I(ip), I_DONTCACHE); spin_unlock(&VFS_I(ip)->i_lock); } =20 diff --git a/fs/xfs/scrub/inode_repair.c b/fs/xfs/scrub/inode_repair.c index a90a011c7e5f..4f7040c9ddf0 100644 --- a/fs/xfs/scrub/inode_repair.c +++ b/fs/xfs/scrub/inode_repair.c @@ -1933,7 +1933,7 @@ xrep_inode_pptr( * Unlinked inodes that cannot be added to the directory tree will not * have a parent pointer. */ - if (inode->i_nlink =3D=3D 0 && !(inode->i_state & I_LINKABLE)) + if (inode->i_nlink =3D=3D 0 && !(inode_state_read_once(inode) & I_LINKABL= E)) return 0; =20 /* Children of the superblock do not have parent pointers. */ diff --git a/fs/xfs/scrub/parent.c b/fs/xfs/scrub/parent.c index 3b692c4acc1e..11d5de10fd56 100644 --- a/fs/xfs/scrub/parent.c +++ b/fs/xfs/scrub/parent.c @@ -915,7 +915,7 @@ xchk_pptr_looks_zapped( * Temporary files that cannot be linked into the directory tree do not * have attr forks because they cannot ever have parents. */ - if (inode->i_nlink =3D=3D 0 && !(inode->i_state & I_LINKABLE)) + if (inode->i_nlink =3D=3D 0 && !(inode_state_read_once(inode) & I_LINKABL= E)) return false; =20 /* diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 06ca11731e43..2208a720ec3f 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -514,7 +514,7 @@ xfs_can_free_eofblocks( * Caller must either hold the exclusive io lock; or be inactivating * the inode, which guarantees there are no other users of the inode. */ - if (!(VFS_I(ip)->i_state & I_FREEING)) + if (!(inode_state_read_once(VFS_I(ip)) & I_FREEING)) xfs_assert_ilocked(ip, XFS_IOLOCK_EXCL); =20 /* prealloc/delalloc exists only on regular files */ diff --git a/fs/xfs/xfs_health.c b/fs/xfs/xfs_health.c index 7c541fb373d5..3c1557fb1cf0 100644 --- a/fs/xfs/xfs_health.c +++ b/fs/xfs/xfs_health.c @@ -285,7 +285,7 @@ xfs_inode_mark_sick( * is not the case here. */ spin_lock(&VFS_I(ip)->i_lock); - VFS_I(ip)->i_state &=3D ~I_DONTCACHE; + inode_state_clear(VFS_I(ip), I_DONTCACHE); spin_unlock(&VFS_I(ip)->i_lock); } =20 @@ -309,7 +309,7 @@ xfs_inode_mark_corrupt( * is not the case here. */ spin_lock(&VFS_I(ip)->i_lock); - VFS_I(ip)->i_state &=3D ~I_DONTCACHE; + inode_state_clear(VFS_I(ip), I_DONTCACHE); spin_unlock(&VFS_I(ip)->i_lock); } =20 diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c index e44040206851..f3fc4d21bfe1 100644 --- a/fs/xfs/xfs_icache.c +++ b/fs/xfs/xfs_icache.c @@ -334,7 +334,7 @@ xfs_reinit_inode( dev_t dev =3D inode->i_rdev; kuid_t uid =3D inode->i_uid; kgid_t gid =3D inode->i_gid; - unsigned long state =3D inode->i_state; + unsigned long state =3D inode_state_read_once(inode); =20 error =3D inode_init_always(mp->m_super, inode); =20 @@ -345,7 +345,7 @@ xfs_reinit_inode( inode->i_rdev =3D dev; inode->i_uid =3D uid; inode->i_gid =3D gid; - inode->i_state =3D state; + inode_state_assign_raw(inode, state); mapping_set_folio_min_order(inode->i_mapping, M_IGEO(mp)->min_folio_order); return error; @@ -411,7 +411,7 @@ xfs_iget_recycle( ip->i_flags |=3D XFS_INEW; xfs_perag_clear_inode_tag(pag, XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); - inode->i_state =3D I_NEW; + inode_state_assign_raw(inode, I_NEW); spin_unlock(&ip->i_flags_lock); spin_unlock(&pag->pag_ici_lock); =20 diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 36b39539e561..f1f88e48fe22 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1580,7 +1580,7 @@ xfs_iunlink_reload_next( next_ip->i_prev_unlinked =3D prev_agino; trace_xfs_iunlink_reload_next(next_ip); rele: - ASSERT(!(VFS_I(next_ip)->i_state & I_DONTCACHE)); + ASSERT(!(inode_state_read_once(VFS_I(next_ip)) & I_DONTCACHE)); if (xfs_is_quotacheck_running(mp) && next_ip) xfs_iflags_set(next_ip, XFS_IQUOTAUNCHECKED); xfs_irele(next_ip); @@ -2111,7 +2111,7 @@ xfs_rename_alloc_whiteout( */ xfs_setup_iops(tmpfile); xfs_finish_inode_setup(tmpfile); - VFS_I(tmpfile)->i_state |=3D I_LINKABLE; + inode_state_set_raw(VFS_I(tmpfile), I_LINKABLE); =20 *wip =3D tmpfile; return 0; @@ -2330,7 +2330,7 @@ xfs_rename( * flag from the inode so it doesn't accidentally get misused in * future. */ - VFS_I(du_wip.ip)->i_state &=3D ~I_LINKABLE; + inode_state_clear_raw(VFS_I(du_wip.ip), I_LINKABLE); } =20 out_commit: diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c index 1bd411a1114c..2eb0c6011a2e 100644 --- a/fs/xfs/xfs_inode_item.c +++ b/fs/xfs/xfs_inode_item.c @@ -113,9 +113,9 @@ xfs_inode_item_precommit( * to log the timestamps, or will clear already cleared fields in the * worst case. */ - if (inode->i_state & I_DIRTY_TIME) { + if (inode_state_read_once(inode) & I_DIRTY_TIME) { spin_lock(&inode->i_lock); - inode->i_state &=3D ~I_DIRTY_TIME; + inode_state_clear(inode, I_DIRTY_TIME); spin_unlock(&inode->i_lock); } =20 diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index caff0125faea..ad94fbf55014 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -1420,7 +1420,7 @@ xfs_setup_inode( bool is_meta =3D xfs_is_internal_inode(ip); =20 inode->i_ino =3D ip->i_ino; - inode->i_state |=3D I_NEW; + inode_state_set_raw(inode, I_NEW); =20 inode_sb_list_add(inode); /* make the inode look hashed for the writeback code */ diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index 36cda724da89..9d1ed9bb0bee 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -17,7 +17,7 @@ xfs_can_free_cowblocks(struct xfs_inode *ip) { struct inode *inode =3D VFS_I(ip); =20 - if ((inode->i_state & I_DIRTY_PAGES) || + if ((inode_state_read_once(inode) & I_DIRTY_PAGES) || mapping_tagged(inode->i_mapping, PAGECACHE_TAG_DIRTY) || mapping_tagged(inode->i_mapping, PAGECACHE_TAG_WRITEBACK) || atomic_read(&inode->i_dio_count)) --=20 2.34.1 From nobody Wed Dec 17 16:10:15 2025 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.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 F263C2E8E1F for ; Thu, 9 Oct 2025 08:00:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996814; cv=none; b=ZzNloB7YT2t3596d9SLuB6j/GA8xFjWMDufjR9qFd2TAapvroHlNk/y4OMJ7gC3fInfBsqMIwxF4B1Dh4NQcToJ69DtcKyqvlhS0TVATSf8ff1sbcZDFUeVV/AILZw7bhEoIabiwYu0jRtYbiPXAESeDUOhuTxF2WBjw0jqOl6E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759996814; c=relaxed/simple; bh=xlG7nR5Wpn4toAnFh4yZG5U7bqMO2Ibqli2pgrWdpe4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZL6FRb1OVnnHsr1uEXPTeoIZfQ1w5JUUYDKi4bryStE2diJ2TU6tiMnUKXasKHzvvOuJqugSxWzV6nvc7sz6pbTYO4YbSWJabmmi5o9qMfJY9r1FOc2DVe0q8mI0myJpx/mbTjiWRdtkP3gj6aVKIbLbNxczmVpAligdfm9jO5c= 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=SbvDejU9; arc=none smtp.client-ip=209.85.218.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SbvDejU9" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-b456d2dc440so97379566b.0 for ; Thu, 09 Oct 2025 01:00:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759996809; x=1760601609; 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=/5cEv8KCvxqRx2Vo792Uxij3yHT/Pkk8+e6W56mfmGo=; b=SbvDejU9ggXuvwZcyBQN7Wh/w7QFoavPE+9gM8uuiuVmO1ELw5sKW93FFpq0UEpTkq Ryj/7rO/SHMvr+NwtFE5QTSf5WS341LygOQn3KW7t0vLGZCQTLjHrjRyobIyOLnCITUf tzlzCFocGJ4GpNMGGc8xHvX9bSHUppgKd1qcC+NjyZxY8Z7hp+K3ixktQxfiZtv7ESnw xndW9hExYjaGy3CHpa5bkadYCG5PWfhGVNiCZT9uLlc+c8hEjNrRTCQ82+h6MLHDdNu/ WvQgPk7LktcDwjsfXh7eYvK/3q2818LaXoD+P0Hwqy+j8s9Z8YVRBE6t9qPBrNSb0JHf 54fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759996809; x=1760601609; 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=/5cEv8KCvxqRx2Vo792Uxij3yHT/Pkk8+e6W56mfmGo=; b=RdWSWrRivUKxu1TF7yAsvJAYjeb+/WBwlP7ivqowfS4wXdUeuXsaiso76QphGbDuGI LIYwAxjlpqjLDe2XAYMMR0fsuCE12h9KmMRrZYfOOYVha15tp5SHv3l5sDomvWM7Y6sI TYuyJ7uAG+ZY438W6lNK671rx2TaJHGA9gvqp+LcT3r6FaD3jktHZ5Q8M5tYQsF/2Hb6 PypElOG+X1UehRGVMZp+MdSyRGqkraxYkDmflOTja8vSJOuxfBmMHKcHZXCCCED4o6Hb Rxo6+ecXixa7m8EDhFGDsFPPxzggeSXR58T8eJVV3F/D5dPQlvdJKBj4rT9jlAURVZN2 s0tA== X-Forwarded-Encrypted: i=1; AJvYcCVysIqAG0LmAzdNXywbFzrg4jz6eOqpyWbqqwHjGDZiAsiv1dNCSJaH6KUGhzDEVDZubvE9Pr1a/aw9nq0=@vger.kernel.org X-Gm-Message-State: AOJu0Yywzh6UXJnVIY19NOhzrWc5BdOIGoBXnKT3Ix5qYVrHrn7I2Ug0 ATb5g6Eab7HMaLVriXNGEdkJ5qTX45NiItpYz5QZjvI/Ofb7wzxzosfq X-Gm-Gg: ASbGnctCdRUn2aYr96Z6V9/hsJjWrrUy7B7523pFi8iAmkkm2VLYKjsqAyhAYE02iXc 9Y4cnlpmoMWmI4qfhj7Zes44VoTRfTeUtVvkNv9LVAnZButwNeIz5bxcs5TOtaL0ygsnA+y1RYK DxB+55K+3BZmsRT5ox4HJdfp+ZbSHXYgKUeDk3fpEqd9KIx49GAb/qarbj9F7Bs2nILuJ6HjkSs GlI4aMCDERcuu4LTKO1tKlA6St+WkvWcpuKYuN6nxEHZLhrftb8WsDBC18h4ERbHaS2XpEe+ufu YvcLJLIHadblE/AKjYA2yaZ38RRegBCjDZ+yVvgml9wrbHFvlGsGBWL/302UVMcSNhCoWL5eMUH Ei7UJ4f7bI34RSlXisKKvBk7PMa99badSLv6EzpqnEleyoSLnciCXIIDcS1f5BNUhA7PpiabrLs j1jNVmOf66SAtNNMXPR3R12DpJsTbQ5u8L X-Google-Smtp-Source: AGHT+IHLM13r5LQMnt/OJInRecUisomAa2MvrC2cG1/52NjvwtuMZLiyrwCa048XZprJyFm6wajB2w== X-Received: by 2002:a17:907:3daa:b0:b40:5dac:ed3f with SMTP id a640c23a62f3a-b50a9d59a8cmr718516366b.7.1759996806312; Thu, 09 Oct 2025 01:00:06 -0700 (PDT) Received: from f.. (cst-prg-66-155.cust.vodafone.cz. [46.135.66.155]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5007639379sm553509366b.48.2025.10.09.01.00.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Oct 2025 01:00:05 -0700 (PDT) From: Mateusz Guzik To: brauner@kernel.org Cc: viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, josef@toxicpanda.com, kernel-team@fb.com, amir73il@gmail.com, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, ceph-devel@vger.kernel.org, linux-unionfs@vger.kernel.org, Mateusz Guzik Subject: [PATCH v7 14/14] fs: make plain ->i_state access fail to compile Date: Thu, 9 Oct 2025 09:59:28 +0200 Message-ID: <20251009075929.1203950-15-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251009075929.1203950-1-mjguzik@gmail.com> References: <20251009075929.1203950-1-mjguzik@gmail.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" ... to make sure all accesses are properly validated. Merely renaming the var to __i_state still lets the compiler make the following suggestion: error: 'struct inode' has no member named 'i_state'; did you mean '__i_stat= e'? Unfortunately some people will add the __'s and call it a day. In order to make it harder to mess up in this way, hide it behind a struct. The resulting error message should be convincing in terms of checking what to do: error: invalid operands to binary & (have 'struct inode_state_flags' and 'i= nt') Of course people determined to do a plain access can still do it, but nothing can be done for that case. Signed-off-by: Mateusz Guzik Reviewed-by: Jan Kara --- include/linux/fs.h | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/include/linux/fs.h b/include/linux/fs.h index 77b6486dcae7..21c73df3ce75 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -785,6 +785,13 @@ enum inode_state_flags_enum { #define I_DIRTY (I_DIRTY_INODE | I_DIRTY_PAGES) #define I_DIRTY_ALL (I_DIRTY | I_DIRTY_TIME) =20 +/* + * Use inode_state_read() & friends to access. + */ +struct inode_state_flags { + enum inode_state_flags_enum __state; +}; + /* * Keep mostly read-only and often accessed (especially for * the RCU path lookup and 'stat' data) fields at the beginning @@ -843,7 +850,7 @@ struct inode { #endif =20 /* Misc */ - enum inode_state_flags_enum i_state; + struct inode_state_flags i_state; /* 32-bit hole */ struct rw_semaphore i_rwsem; =20 @@ -909,19 +916,19 @@ struct inode { */ static inline enum inode_state_flags_enum inode_state_read_once(struct ino= de *inode) { - return READ_ONCE(inode->i_state); + return READ_ONCE(inode->i_state.__state); } =20 static inline enum inode_state_flags_enum inode_state_read(struct inode *i= node) { lockdep_assert_held(&inode->i_lock); - return inode->i_state; + return inode->i_state.__state; } =20 static inline void inode_state_set_raw(struct inode *inode, enum inode_state_flags_enum flags) { - WRITE_ONCE(inode->i_state, inode->i_state | flags); + WRITE_ONCE(inode->i_state.__state, inode->i_state.__state | flags); } =20 static inline void inode_state_set(struct inode *inode, @@ -934,7 +941,7 @@ static inline void inode_state_set(struct inode *inode, static inline void inode_state_clear_raw(struct inode *inode, enum inode_state_flags_enum flags) { - WRITE_ONCE(inode->i_state, inode->i_state & ~flags); + WRITE_ONCE(inode->i_state.__state, inode->i_state.__state & ~flags); } =20 static inline void inode_state_clear(struct inode *inode, @@ -947,7 +954,7 @@ static inline void inode_state_clear(struct inode *inod= e, static inline void inode_state_assign_raw(struct inode *inode, enum inode_state_flags_enum flags) { - WRITE_ONCE(inode->i_state, flags); + WRITE_ONCE(inode->i_state.__state, flags); } =20 static inline void inode_state_assign(struct inode *inode, @@ -962,7 +969,7 @@ static inline void inode_state_replace_raw(struct inode= *inode, enum inode_state_flags_enum setflags) { enum inode_state_flags_enum flags; - flags =3D inode->i_state; + flags =3D inode->i_state.__state; flags &=3D ~clearflags; flags |=3D setflags; inode_state_assign_raw(inode, flags); --=20 2.34.1