Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/ufs {ffs_nodealloccg, ext2fs_nodealloccg, ext2fs_mapsearch...
details: https://anonhg.NetBSD.org/src/rev/9e2ede593467
branches: trunk
changeset: 762938:9e2ede593467
user: rmind <rmind%NetBSD.org@localhost>
date: Sun Mar 06 04:46:26 2011 +0000
description:
{ffs_nodealloccg,ext2fs_nodealloccg,ext2fs_mapsearch}: use XOR and ffs()
to find free bits in the inode and block bitmaps, instead of the loop.
Obtained from FreeBSD (changes by jhb).
diffstat:
sys/ufs/ext2fs/ext2fs_alloc.c | 32 ++++++++++++--------------------
sys/ufs/ffs/ffs_alloc.c | 20 ++++++++------------
2 files changed, 20 insertions(+), 32 deletions(-)
diffs (111 lines):
diff -r bc88ba118e60 -r 9e2ede593467 sys/ufs/ext2fs/ext2fs_alloc.c
--- a/sys/ufs/ext2fs/ext2fs_alloc.c Sun Mar 06 04:41:58 2011 +0000
+++ b/sys/ufs/ext2fs/ext2fs_alloc.c Sun Mar 06 04:46:26 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ext2fs_alloc.c,v 1.41 2009/10/19 18:41:17 bouyer Exp $ */
+/* $NetBSD: ext2fs_alloc.c,v 1.42 2011/03/06 04:46:26 rmind Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1993
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_alloc.c,v 1.41 2009/10/19 18:41:17 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_alloc.c,v 1.42 2011/03/06 04:46:26 rmind Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -470,16 +470,12 @@
}
}
i = start + len - loc;
- map = ibp[i];
- ipref = i * NBBY;
- for (i = 1; i < (1 << NBBY); i <<= 1, ipref++) {
- if ((map & i) == 0) {
- goto gotit;
- }
+ map = ibp[i] ^ 0xff;
+ if (map == 0) {
+ printf("fs = %s\n", fs->e2fs_fsmnt);
+ panic("ext2fs_nodealloccg: block not in map");
}
- printf("fs = %s\n", fs->e2fs_fsmnt);
- panic("ext2fs_nodealloccg: block not in map");
- /* NOTREACHED */
+ ipref = i * NBBY + ffs(map) - 1;
gotit:
setbit(ibp, ipref);
fs->e2fs.e2fs_ficount--;
@@ -595,7 +591,6 @@
static daddr_t
ext2fs_mapsearch(struct m_ext2fs *fs, char *bbp, daddr_t bpref)
{
- daddr_t bno;
int start, len, loc, i, map;
/*
@@ -620,15 +615,12 @@
}
}
i = start + len - loc;
- map = bbp[i];
- bno = i * NBBY;
- for (i = 1; i < (1 << NBBY); i <<= 1, bno++) {
- if ((map & i) == 0)
- return (bno);
+ map = bbp[i] ^ 0xff;
+ if (map == 0) {
+ printf("fs = %s\n", fs->e2fs_fsmnt);
+ panic("ext2fs_mapsearch: block not in map");
}
- printf("fs = %s\n", fs->e2fs_fsmnt);
- panic("ext2fs_mapsearch: block not in map");
- /* NOTREACHED */
+ return i * NBBY + ffs(map) - 1;
}
/*
diff -r bc88ba118e60 -r 9e2ede593467 sys/ufs/ffs/ffs_alloc.c
--- a/sys/ufs/ffs/ffs_alloc.c Sun Mar 06 04:41:58 2011 +0000
+++ b/sys/ufs/ffs/ffs_alloc.c Sun Mar 06 04:46:26 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_alloc.c,v 1.125 2010/02/21 13:55:58 mlelstv Exp $ */
+/* $NetBSD: ffs_alloc.c,v 1.126 2011/03/06 04:46:26 rmind 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.125 2010/02/21 13:55:58 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.126 2011/03/06 04:46:26 rmind Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -1330,17 +1330,13 @@
}
}
i = start + len - loc;
- map = inosused[i];
- ipref = i * NBBY;
- for (i = 1; i < (1 << NBBY); i <<= 1, ipref++) {
- if ((map & i) == 0) {
- cgp->cg_irotor = ufs_rw32(ipref, needswap);
- goto gotit;
- }
+ map = inosused[i] ^ 0xff;
+ if (map == 0) {
+ printf("fs = %s\n", fs->fs_fsmnt);
+ panic("ffs_nodealloccg: block not in map");
}
- printf("fs = %s\n", fs->fs_fsmnt);
- panic("ffs_nodealloccg: block not in map");
- /* NOTREACHED */
+ ipref = i * NBBY + ffs(map) - 1;
+ cgp->cg_irotor = ufs_rw32(ipref, needswap);
gotit:
UFS_WAPBL_REGISTER_INODE(ip->i_ump->um_mountp, cg * fs->fs_ipg + ipref,
mode);
Home |
Main Index |
Thread Index |
Old Index