From nobody Sun Oct 5 10:48:55 2025 Received: from sonic.asd.mail.yahoo.com (sonic314-20.consmr.mail.sg3.yahoo.com [106.10.240.144]) (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 25AEE21D5B6 for ; Tue, 5 Aug 2025 20:20:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=106.10.240.144 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754425249; cv=none; b=fy3ZkoAPyoB7lTWUIlJJBeglhgpb0qTmQKbKXjtNN6L2wwwJCGB/E3d5uuCcXAYyEvbdVu1JWQ84IMsyjyOOUJ1pMGu4viw0mfYjtI/eRPxzHd8BHiex+qBJRYw/JbhNcPPEoelBR7VJqKTWGBh7US67tOllH2Z/1mJHRJsl2o8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754425249; c=relaxed/simple; bh=ajefu/XpiABW3hLAC6IZOz6zrZrUpYBpFvddSuDg7o4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:References; b=egCI09fiFioxmopgirtXsSLZCCLWaS9C1VG4FmGiDHJqsb0LBldhA3B2tGYwOg8PIOgSG6s7ERdeU3Ps9SBy4SmjoBBnQ2gBLpmRBTKHX00O3SttGgUjS3ZIVwKo6M4p0EMboPr/581SR80kPO4NXC8MuBKj0HdGH8PRnUEG/Yo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=yahoo.com; spf=pass smtp.mailfrom=yahoo.com; dkim=pass (2048-bit key) header.d=yahoo.com header.i=@yahoo.com header.b=fB5OW3QU; arc=none smtp.client-ip=106.10.240.144 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=yahoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=yahoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=yahoo.com header.i=@yahoo.com header.b="fB5OW3QU" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1754425245; bh=+MODNQyYtZacIV3M94jpCN5VGFvspUT3n/gFK38eANc=; h=From:To:Cc:Subject:Date:References:From:Subject:Reply-To; b=fB5OW3QUx05NykobhAKSnF8UJls9bNHIwjOR3tLkd46BqgKCIPNWpiIdj6smi8grbXiaa6ntEbVb+QYZkTP2tuC95iplM2VJwQT798sEUt3dTj4j8p0Bon/hX53IpqzgoWVDBw+tUxoaQrq+dI3fTBfG/CnHTREeC7wyPgz7Kc7HsoJG8I1+rCLZEvDSzVFD+EJnD85aXFjjo5o5xok3nAXOiNN47ydBvtSO0dHd2OIBVWYNyNtTcNjvTrcMIeMDTR8zbkXKN37jt5y2kiWM2uec9/g0W6cF77KUqTb8BMc1eGl8zsQs+buCegGu7UKFFF7Rs3Ih8sY1OBIA9HXNkw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1754425245; bh=zR/3Vu+7wDgY+yUQ7K3OkG3PKi3u1qAd6z6jBTVGS5J=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=AEod2H6m5y6iliKSLcGwzDij9Cq01mpYrtRYkhglpRCRjv0CZV67ml2fp0zfGp7R6ZiHsXdgKwXdZ9imIoNr9y+72qIgtyNdrPOnOy+pHyHrobIBHlYMzySdt3Zzy41lELV486RGxqlCiTBjbadtVkAmbFkL2YPoky/5zQ4f4mHNryT+uENgeCSX4QeJ0IYQzoNQyuSeICaDr15/69GoQED038BgAjyEZ6k6eEP3Z19qmofVTsxUz4RMd4WwiPIGeBEZGlvacBHwTiEB57kVyKs6Z54kcLphacVZ8Dmuq5RUcXQ5ptT8oUQleWRyAYLu/qVYnCTV3qVB4pO+HtvvUg== X-YMail-OSG: lbh.FcEVM1kwGVRa6plSVmx5SyRcOda_HdGGIl_9QhbT5ZGqT4DmHJJjbbHMCi3 DqS6hBc8yb.CRixsQNTPXHzdGtzUPgWvVrFnO7ikqj.i32TzSTQ0TX_JIzGKk_TOY1zM3jFI4.ly qQBr34HnjJx09rfgRjG.aXs2lMk6KINUd._dYwYMnp_9O5Q.Y6qdD2QO6.PsfpY5peAgxZVAYfHD vMDSHbtwEgQ8vSrBSoBK.AaXZmsxOm19l6oMpjtP1GUXEeS_zdqUFiJ0e0rn4Gd5RtZ_utthTUMy F98LzuPPfOvPABiXFS_TD8DMXnUOyaX8hDPn04dBftx5uRG.TsFG1Uz8hmd9bjocPgB79WrNvAMh YoZj1enFuTEuvAyq3nDI2ogIDH9v9XvCwOMNFfogAl8RKTObqv2ayU_3yqnVYqN.c2v5vkrdXqZl XPXMUv2KS9QGUSVy6JT5fd_IM1dWjAzEwD7rXIcmN6hvAP47ZlOgGmgvrSDss.yVEmfFXNmfTT5x _Wr9FKs0KgLSr_anJ5DtgcHqyDiEbQ3TiTSyK_k7650lad5l_QjrrkezlXwdw.HzlyPm_5C31Fq_ Y1.Ro8uQhd5zDuReZrBeS3idofBxkItcUvg76zjoU5ANlFvWHVi3iyGC79pHHI2RZOL36Bm7FPmg L_Mi6Clf2V4jyD_RxrON.JQlAbmao0brAWU_M429c.rbM2FjrkgNIauhLva2mKCvKi4Jka5TKQOq RcsRQ.kX9lckI_a5u3T3kLZ4g75AKb06uuldPnf4JAMG3t3LBBMaYtUz3U69PB5jnlGTCptqAXdZ duTOQ85C197MMZJySYeILqJs.QyvAZ2p5WvIuTp8fpgCMU.AZGK6QmEtoXPOoiw7CTlHl0GC7wDE mrqU7v.3LRjdKw6KIt2DuD.CSODcaJJnZ7hw6QcrRmcsyDaB2RYYaPhKiv4.eBUzcOq6HtDmcKas NEvDM8ttHpuqEO0RC2Jn_h2k3pOmIS4plFlXiI6JQme62HIKrFQLijsUsltJ5nFpYC1WM_ePvuG0 mkyDHb5A8HedBAs2biRr.KNfxEkFmzFfYSAXfMaUaSepkKv5ZBlsGxwEDTM85Z.gu_JMn1jNjzNp Bo3HjYgSCgmL9p8pNavUkyZOC1jqNX8d3OsvqeVVjNNjYFzmW3uAemAGsSvf5XiNCQCtS8tjV_R6 KcpwxCD46rvPGgekwJEU1oWaY6ngBZHLgk280.Y_TKGgQnS8HCG00oa87t7DLRQObsIzhE2fM8N9 7MkxwVc2CgDVlBhR3OdUUDNT6SWjujbeES51SoeDx6JhJSBgkpgjqhRHxaMO5_pEs9NTH8eixP5b OcORJvHGVUjKaXZ78u_Ee8FWIm5Nm5bgF1aKr6nJdda8HvZ0kYAr1zLmL500bJyrbqy2fTv2mDpN AXF6uGhra97Eg98zzrYpgBStiwZPM.rYE381XOd8srFoBU5T9LNYltLP8uy8cEL8JfdIQiYNZrQk 0Eu3SEaTM4RtEhY7qbZiXljPk8rdePvnZxoeNNAFYHkybvNPaUcKypYU83_b1gmqY9KLHNNTAD79 4UQZhByk.rCNz4ylDgh4BjB6PN9RIKRvZ.YUoyf87wq7nrHjDh_y_oUc4FumPvp6d9uGoSzwmxzN jj7fO_hlYmdvBRRZAmcsFvg9IiqAdoTzK.hE9.rEMsPm4GhpPJfleMJAdNuD.Ds2Q0_KZGGnrjER iHoPqCQ0eiEUfgTWxx11ujkkyzXx1UTjRY0LTV.kYdKeHHm4CIQWIKwrLyWbpo2bfj9EUS0OS.OZ CLcZGJ4nI3hgIfvMKcxoHUNkt8NahgiNE5bGix7gnwjeHhPqx_Ij.glcl8.dZRq7r6MVGyKjG.nP yDsyZowLuAL20ijrE0GheEvA4vvd5NQ_Dwl4.dS9RLvOx2zvYGTr.XmQIfsxRfVj8SKS5n4TmupY _ir6VzRBK2mPZf4eCAvFYWLzLqm2AZFcNwcWCjUa.mZpDyxnz9prxxH33WqTqDkBy6ItcVtLOpYK HYqMfGqgXrVWV5LAE.Ht0f6QeNQTz2nw0tKKMyqg9IA_WVgAThJzuUbeaWvGM7HbjU40LB__vI4J csNg1THGZ4bIVk_sAxrB8C4zm4Rf0bsYsHEkilhcOW.yXSmzcXK_GdNFcYvydgi2U75Ymp.B.01c 39cx659epNtUn3AL68cbhneNmt.Yi6_AzQNRMZ2f1djojSwImPxM3Y3BO33BA8aTKc2.Q56lnYiO 0JCwmwKeP6C6_93qQlbPbF3vSkZV2kh76rdNI7Hocw_eVTky0MXtLXl.Qh12WHQSsdRoEOjZ0XSO kPwkPSs8xqHczLw.TdBwbohmBEKX7yI9gQcfHGg-- X-Sonic-MF: X-Sonic-ID: 138cfcb2-21cd-401b-983d-d750719ac2a1 Received: from sonic.gate.mail.ne1.yahoo.com by sonic314.consmr.mail.sg3.yahoo.com with HTTP; Tue, 5 Aug 2025 20:20:45 +0000 Received: by hermes--production-ne1-9495dc4d7-27szc (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 6c357f7640c1af4f723f6a091515b028; Tue, 05 Aug 2025 19:40:09 +0000 (UTC) From: Sumanth Gavini To: rpeterso@redhat.com, agruenba@redhat.com Cc: Sumanth Gavini , gfs2@lists.linux.dev, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCH 6.6] gfs2: replace sd_aspace with sd_inode Date: Tue, 5 Aug 2025 14:40:04 -0500 Message-ID: <20250805194005.327445-1-sumanth.gavini@yahoo.com> X-Mailer: git-send-email 2.43.0 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 References: <20250805194005.327445-1-sumanth.gavini.ref@yahoo.com> Content-Type: text/plain; charset="utf-8" commit ae9f3bd8259a0a8f67be2420e66bb05fbb95af48 upstream. Currently, sdp->sd_aspace and the per-inode metadata address spaces use sb->s_bdev->bd_mapping->host as their ->host; folios in those address spaces will thus appear to be on bdev rather than on gfs2 filesystems. This is a problem because gfs2 doesn't support cgroup writeback (SB_I_CGROUPWB), but bdev does. Fix that by using a "dummy" gfs2 inode as ->host in those address spaces. When coming from a folio, folio->mapping->host->i_sb will then be a gfs2 super block and the SB_I_CGROUPWB flag will not be set in sb->s_iflags. Based on a previous version from Bob Peterson from several years ago. Thanks to Tetsuo Handa, Jan Kara, and Rafael Aquini for helping figure this out. Fixes: aaa2cacf8184 ("writeback: add lockdep annotation to inode_to_wb()") Signed-off-by: Andreas Gruenbacher Signed-off-by: Sumanth Gavini --- fs/gfs2/glock.c | 3 +-- fs/gfs2/glops.c | 4 ++-- fs/gfs2/incore.h | 9 ++++++++- fs/gfs2/meta_io.c | 2 +- fs/gfs2/meta_io.h | 4 +--- fs/gfs2/ops_fstype.c | 28 ++++++++++++++++------------ fs/gfs2/super.c | 2 +- 7 files changed, 30 insertions(+), 22 deletions(-) diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 4a280be229a6..7ab1b4dac0bb 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -1146,7 +1146,6 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number, const struct gfs2_glock_operations *glops, int create, struct gfs2_glock **glp) { - struct super_block *s =3D sdp->sd_vfs; struct lm_lockname name =3D { .ln_number =3D number, .ln_type =3D glops->go_type, .ln_sbd =3D sdp }; @@ -1210,7 +1209,7 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number, mapping =3D gfs2_glock2aspace(gl); if (mapping) { mapping->a_ops =3D &gfs2_meta_aops; - mapping->host =3D s->s_bdev->bd_inode; + mapping->host =3D sdp->sd_inode; mapping->flags =3D 0; mapping_set_gfp_mask(mapping, GFP_NOFS); mapping->private_data =3D NULL; diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c index f41ca89d216b..5877afdb11c5 100644 --- a/fs/gfs2/glops.c +++ b/fs/gfs2/glops.c @@ -165,7 +165,7 @@ void gfs2_ail_flush(struct gfs2_glock *gl, bool fsync) static int gfs2_rgrp_metasync(struct gfs2_glock *gl) { struct gfs2_sbd *sdp =3D gl->gl_name.ln_sbd; - struct address_space *metamapping =3D &sdp->sd_aspace; + struct address_space *metamapping =3D gfs2_aspace(sdp); struct gfs2_rgrpd *rgd =3D gfs2_glock2rgrp(gl); const unsigned bsize =3D sdp->sd_sb.sb_bsize; loff_t start =3D (rgd->rd_addr * bsize) & PAGE_MASK; @@ -222,7 +222,7 @@ static int rgrp_go_sync(struct gfs2_glock *gl) static void rgrp_go_inval(struct gfs2_glock *gl, int flags) { struct gfs2_sbd *sdp =3D gl->gl_name.ln_sbd; - struct address_space *mapping =3D &sdp->sd_aspace; + struct address_space *mapping =3D gfs2_aspace(sdp); struct gfs2_rgrpd *rgd =3D gfs2_glock2rgrp(gl); const unsigned bsize =3D sdp->sd_sb.sb_bsize; loff_t start, end; diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index a8c95c5293c6..52712ec33d91 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h @@ -795,7 +795,7 @@ struct gfs2_sbd { =20 /* Log stuff */ =20 - struct address_space sd_aspace; + struct inode *sd_inode; =20 spinlock_t sd_log_lock; =20 @@ -850,6 +850,13 @@ struct gfs2_sbd { unsigned long sd_glock_dqs_held; }; =20 +#define GFS2_BAD_INO 1 + +static inline struct address_space *gfs2_aspace(struct gfs2_sbd *sdp) +{ + return sdp->sd_inode->i_mapping; +} + static inline void gfs2_glstats_inc(struct gfs2_glock *gl, int which) { gl->gl_stats.stats[which]++; diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c index 924361fa510b..fca8ea2f4504 100644 --- a/fs/gfs2/meta_io.c +++ b/fs/gfs2/meta_io.c @@ -122,7 +122,7 @@ struct buffer_head *gfs2_getbuf(struct gfs2_glock *gl, = u64 blkno, int create) unsigned int bufnum; =20 if (mapping =3D=3D NULL) - mapping =3D &sdp->sd_aspace; + mapping =3D gfs2_aspace(sdp); =20 shift =3D PAGE_SHIFT - sdp->sd_sb.sb_bsize_shift; index =3D blkno >> shift; /* convert block to page */ diff --git a/fs/gfs2/meta_io.h b/fs/gfs2/meta_io.h index d0a58cdd433a..a4c3865137d4 100644 --- a/fs/gfs2/meta_io.h +++ b/fs/gfs2/meta_io.h @@ -44,9 +44,7 @@ static inline struct gfs2_sbd *gfs2_mapping2sbd(struct ad= dress_space *mapping) struct gfs2_glock_aspace *gla =3D container_of(mapping, struct gfs2_glock_aspace, mapping); return gla->glock.gl_name.ln_sbd; - } else if (mapping->a_ops =3D=3D &gfs2_rgrp_aops) - return container_of(mapping, struct gfs2_sbd, sd_aspace); - else + } else return inode->i_sb->s_fs_info; } =20 diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c index 33ca04733e93..9933c7328dcb 100644 --- a/fs/gfs2/ops_fstype.c +++ b/fs/gfs2/ops_fstype.c @@ -72,7 +72,6 @@ void free_sbd(struct gfs2_sbd *sdp) static struct gfs2_sbd *init_sbd(struct super_block *sb) { struct gfs2_sbd *sdp; - struct address_space *mapping; =20 sdp =3D kzalloc(sizeof(struct gfs2_sbd), GFP_KERNEL); if (!sdp) @@ -110,16 +109,6 @@ static struct gfs2_sbd *init_sbd(struct super_block *s= b) =20 INIT_LIST_HEAD(&sdp->sd_sc_inodes_list); =20 - mapping =3D &sdp->sd_aspace; - - address_space_init_once(mapping); - mapping->a_ops =3D &gfs2_rgrp_aops; - mapping->host =3D sb->s_bdev->bd_inode; - mapping->flags =3D 0; - mapping_set_gfp_mask(mapping, GFP_NOFS); - mapping->private_data =3D NULL; - mapping->writeback_index =3D 0; - spin_lock_init(&sdp->sd_log_lock); atomic_set(&sdp->sd_log_pinned, 0); INIT_LIST_HEAD(&sdp->sd_log_revokes); @@ -1159,6 +1148,7 @@ static int gfs2_fill_super(struct super_block *sb, st= ruct fs_context *fc) int silent =3D fc->sb_flags & SB_SILENT; struct gfs2_sbd *sdp; struct gfs2_holder mount_gh; + struct address_space *mapping; int error; =20 sdp =3D init_sbd(sb); @@ -1206,9 +1196,21 @@ static int gfs2_fill_super(struct super_block *sb, s= truct fs_context *fc) sdp->sd_tune.gt_statfs_quantum =3D 30; } =20 + /* Set up an address space for metadata writes */ + sdp->sd_inode =3D new_inode(sb); + error =3D -ENOMEM; + if (!sdp->sd_inode) + goto fail_free; + sdp->sd_inode->i_ino =3D GFS2_BAD_INO; + sdp->sd_inode->i_size =3D OFFSET_MAX; + + mapping =3D gfs2_aspace(sdp); + mapping->a_ops =3D &gfs2_rgrp_aops; + mapping_set_gfp_mask(mapping, GFP_NOFS); + error =3D init_names(sdp, silent); if (error) - goto fail_free; + goto fail_iput; =20 snprintf(sdp->sd_fsname, sizeof(sdp->sd_fsname), "%s", sdp->sd_table_name= ); =20 @@ -1327,6 +1329,8 @@ static int gfs2_fill_super(struct super_block *sb, st= ruct fs_context *fc) gfs2_sys_fs_del(sdp); fail_delete_wq: destroy_workqueue(sdp->sd_delete_wq); +fail_iput: + iput(sdp->sd_inode); fail_free: free_sbd(sdp); sb->s_fs_info =3D NULL; diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index 02d93da21b2b..47e0b5c96d1c 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c @@ -642,7 +642,7 @@ static void gfs2_put_super(struct super_block *sb) gfs2_jindex_free(sdp); /* Take apart glock structures and buffer lists */ gfs2_gl_hash_clear(sdp); - truncate_inode_pages_final(&sdp->sd_aspace); + iput(sdp->sd_inode); gfs2_delete_debugfs_file(sdp); /* Unmount the locking protocol */ gfs2_lm_unmount(sdp); --=20 2.43.0