Module Name: src
Committed By: sborrill
Date: Sat Apr 25 08:32:32 UTC 2009
Modified Files:
src/sys/ufs/ffs: ffs_alloc.c
Log Message:
Fix random 'filesystem full' messages by trapping a couple of 32-bit
overflow areas missed in rev 1.110 and switching cgbase().
Kudos to rump_ffs!
To generate a diff of this commit:
cvs rdiff -u -r1.122 -r1.123 src/sys/ufs/ffs/ffs_alloc.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/ffs/ffs_alloc.c
diff -u src/sys/ufs/ffs/ffs_alloc.c:1.122 src/sys/ufs/ffs/ffs_alloc.c:1.123
--- src/sys/ufs/ffs/ffs_alloc.c:1.122 Sun Feb 22 20:28:06 2009
+++ src/sys/ufs/ffs/ffs_alloc.c Sat Apr 25 08:32:32 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_alloc.c,v 1.122 2009/02/22 20:28:06 ad Exp $ */
+/* $NetBSD: ffs_alloc.c,v 1.123 2009/04/25 08:32:32 sborrill Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.122 2009/02/22 20:28:06 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.123 2009/04/25 08:32:32 sborrill Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -1138,7 +1138,7 @@
ufs_add32(cgp->cg_frsum[allocsiz], -1, needswap);
if (frags != allocsiz)
ufs_add32(cgp->cg_frsum[allocsiz - frags], 1, needswap);
- blkno = cg * fs->fs_fpg + bno;
+ blkno = cgbase(fs, cg) + bno;
ACTIVECG_CLR(fs, cg);
mutex_exit(&ump->um_lock);
bdwrite(bp);
@@ -1167,6 +1167,7 @@
struct ufsmount *ump;
struct fs *fs = ip->i_fs;
struct cg *cgp;
+ int cg;
daddr_t blkno;
int32_t bno;
u_int8_t *blksfree;
@@ -1225,7 +1226,8 @@
ufs_add32(old_cg_blktot(cgp, needswap)[cylno], -1, needswap);
}
fs->fs_fmod = 1;
- blkno = ufs_rw32(cgp->cg_cgx, needswap) * fs->fs_fpg + bno;
+ cg = ufs_rw32(cgp->cg_cgx, needswap);
+ blkno = cgbase(fs, cg) + bno;
return (blkno);
}