svn commit: r219012 - head/sys/fs/ext2fs
John Baldwin
jhb at FreeBSD.org
Thu Feb 24 22:11:37 UTC 2011
Author: jhb
Date: Thu Feb 24 22:11:36 2011
New Revision: 219012
URL: http://svn.freebsd.org/changeset/base/219012
Log:
Use ffs() to locate free bits in the inode and block bitmaps rather than
loops with bit shifts.
Modified:
head/sys/fs/ext2fs/ext2_alloc.c
Modified: head/sys/fs/ext2fs/ext2_alloc.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_alloc.c Thu Feb 24 21:45:58 2011 (r219011)
+++ head/sys/fs/ext2fs/ext2_alloc.c Thu Feb 24 22:11:36 2011 (r219012)
@@ -815,16 +815,12 @@ ext2_nodealloccg(struct inode *ip, int c
}
}
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);
EXT2_LOCK(ump);
@@ -952,7 +948,6 @@ ext2_vfree(pvp, ino, mode)
static daddr_t
ext2_mapsearch(struct m_ext2fs *fs, char *bbp, daddr_t bpref)
{
- daddr_t bno;
int start, len, loc, i, map;
/*
@@ -977,15 +972,12 @@ ext2_mapsearch(struct m_ext2fs *fs, char
}
}
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);
- }
- printf("fs = %s\n", fs->e2fs_fsmnt);
- panic("ext2fs_mapsearch: block not in map");
- /* NOTREACHED */
+ map = bbp[i] ^ 0xff;
+ if (map == 0) {
+ printf("fs = %s\n", fs->e2fs_fsmnt);
+ panic("ext2fs_mapsearch: block not in map");
+ }
+ return (i * NBBY + ffs(map) - 1);
}
/*
More information about the svn-src-all
mailing list