Module Name:    src
Committed By:   riastradh
Date:           Mon Jul  1 22:12:57 UTC 2024

Modified Files:
        src/sys/ufs/ext2fs: ext2fs_vfsops.c

Log Message:
ext2fs: Fix indexing of group descriptors on disk.

XXX Evidently we need some more automatic tests for this!

PR kern/58388


To generate a diff of this commit:
cvs rdiff -u -r1.225 -r1.226 src/sys/ufs/ext2fs/ext2fs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/ufs/ext2fs/ext2fs_vfsops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.225 src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.226
--- src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.225	Sun Aug 27 16:35:51 2023
+++ src/sys/ufs/ext2fs/ext2fs_vfsops.c	Mon Jul  1 22:12:56 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs_vfsops.c,v 1.225 2023/08/27 16:35:51 christos Exp $	*/
+/*	$NetBSD: ext2fs_vfsops.c,v 1.226 2024/07/01 22:12:56 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1989, 1991, 1993, 1994
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.225 2023/08/27 16:35:51 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.226 2024/07/01 22:12:56 riastradh Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -653,7 +653,8 @@ ext2fs_reload(struct mount *mp, kauth_cr
 			return error;
 		}
 		e2fs_cgload(bp->b_data,
-		    &fs->e2fs_gd[i * fs->e2fs_bsize / sizeof(struct ext2_gd)],
+		    &fs->e2fs_gd[i *
+			(fs->e2fs_bsize >> fs->e2fs_group_desc_shift)],
 		    fs->e2fs_bsize, fs->e2fs_group_desc_shift);
 		brelse(bp, 0);
 	}
@@ -770,8 +771,8 @@ ext2fs_mountfs(struct vnode *devvp, stru
 		    m_fs->e2fs_bsize, 0, &bp);
 		if (error)
 			goto out1;
-		e2fs_cgload(bp->b_data, &m_fs->e2fs_gd[i * m_fs->e2fs_bsize
-		    / sizeof(struct ext2_gd)],
+		e2fs_cgload(bp->b_data, &m_fs->e2fs_gd[i *
+			(m_fs->e2fs_bsize >> m_fs->e2fs_group_desc_shift)],
 		    m_fs->e2fs_bsize, m_fs->e2fs_group_desc_shift);
 		brelse(bp, 0);
 		bp = NULL;
@@ -1334,8 +1335,8 @@ ext2fs_cgupdate(struct ufsmount *mp, int
 		bp = getblk(mp->um_devvp, EXT2_FSBTODB(fs,
 		    fs->e2fs.e2fs_first_dblock +
 		    1 /* superblock */ + i), fs->e2fs_bsize, 0, 0);
-		e2fs_cgsave(&fs->e2fs_gd[
-		    i * fs->e2fs_bsize / sizeof(struct ext2_gd)],
+		e2fs_cgsave(&fs->e2fs_gd[i *
+			(m_fs->e2fs_bsize >> m_fs->e2fs_group_desc_shift)],
 		    bp->b_data, fs->e2fs_bsize, fs->e2fs_group_desc_shift);
 		if (waitfor == MNT_WAIT)
 			error = bwrite(bp);

Reply via email to