diff -urN -X dontdiff linux/fs/bfs/bfs_defs.h linux-2.3.25-pre1-bfs/fs/bfs/bfs_defs.h
--- linux/fs/bfs/bfs_defs.h	Fri Oct 29 11:26:27 1999
+++ linux-2.3.25-pre1-bfs/fs/bfs/bfs_defs.h	Fri Oct 29 12:23:29 1999
@@ -5,7 +5,6 @@
 #define su_lf_ioff	u.bfs_sb.si_lf_ioff
 #define su_lf_sblk	u.bfs_sb.si_lf_sblk
 #define su_lf_eblk	u.bfs_sb.si_lf_eblk
-#define su_imap_len	u.bfs_sb.si_imap_len
 #define su_imap		u.bfs_sb.si_imap
 #define su_sbh		u.bfs_sb.si_sbh
 #define su_bfs_sb	u.bfs_sb.si_bfs_sb
diff -urN -X dontdiff linux/fs/bfs/dir.c linux-2.3.25-pre1-bfs/fs/bfs/dir.c
--- linux/fs/bfs/dir.c	Fri Oct 29 11:26:27 1999
+++ linux-2.3.25-pre1-bfs/fs/bfs/dir.c	Fri Oct 29 13:36:52 1999
@@ -106,8 +106,8 @@
 	if (!inode)
 		return -ENOSPC;
 	inode->i_sb = s;
-	ino = find_first_zero_bit(s->su_imap, s->su_imap_len);
-	if (ino >= s->su_lasti) {
+	ino = find_first_zero_bit(s->su_imap, s->su_lasti);
+	if (ino > s->su_lasti) {
 		iput(inode);
 		return -ENOSPC;
 	}
diff -urN -X dontdiff linux/fs/bfs/inode.c linux-2.3.25-pre1-bfs/fs/bfs/inode.c
--- linux/fs/bfs/inode.c	Fri Oct 29 11:26:27 1999
+++ linux-2.3.25-pre1-bfs/fs/bfs/inode.c	Fri Oct 29 13:46:00 1999
@@ -7,7 +7,8 @@
 
 #include <linux/config.h>
 #include <linux/module.h>
-#include <linux/malloc.h>
+#include <linux/mm.h>
+#include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/locks.h>
 #include <linux/bfs_fs.h>
@@ -237,19 +238,21 @@
 void dump_imap(const char *prefix, struct super_block * s)
 {
 #if 0
-	int i, hibit = 8 * (s->su_imap_len) - 1;
-	char tmpbuf[400];
+	int i;
+	char *tmpbuf = (char *)get_free_page(GFP_KERNEL);
 
+	if (!tmpbuf)
+		return;
 	memset(tmpbuf, 0, 400);
-	for (i=hibit; i>=0; i--) {
-		if (i>390) break;
+	for (i=s->su_lasti; i>=0; i--) {
+		if (i>PAGE_SIZE-100) break;
 		if (test_bit(i, s->su_imap))
 			strcat(tmpbuf, "1");
 		else
 			strcat(tmpbuf, "0");
 	}
-	printk(KERN_ERR "BFS-fs: %s: lasti=%d <%s> (%d*8 bits)\n", 
-		prefix, s->su_lasti, tmpbuf, s->su_imap_len);
+	printk(KERN_ERR "BFS-fs: %s: lasti=%d <%s>\n", prefix, s->su_lasti, tmpbuf);
+	free_page((unsigned long)tmpbuf);
 #endif
 }
 
@@ -260,7 +263,7 @@
 	struct buffer_head * bh;
 	struct bfs_super_block * bfs_sb;
 	struct inode * inode;
-	unsigned long i;
+	int i, imap_len;
 
 	MOD_INC_USE_COUNT;
 	lock_super(s);
@@ -292,11 +295,11 @@
 	s->su_lasti = (bfs_sb->s_start - BFS_BSIZE)/sizeof(struct bfs_inode) 
 			+ BFS_ROOT_INO - 1;
 
-	s->su_imap_len = s->su_lasti/8 + 1; /* 1 byte is 8 bit */
-	s->su_imap = kmalloc(s->su_imap_len, GFP_KERNEL);
+	imap_len = s->su_lasti/8 + 1;
+	s->su_imap = kmalloc(imap_len, GFP_KERNEL);
 	if (!s->su_imap)
 		goto out;
-	memset(s->su_imap, 0, s->su_imap_len);
+	memset(s->su_imap, 0, imap_len);
 	for (i=0; i<BFS_ROOT_INO; i++)
 		set_bit(i, s->su_imap);
 
diff -urN -X dontdiff linux/include/linux/bfs_fs_sb.h linux-2.3.25-pre1-bfs/include/linux/bfs_fs_sb.h
--- linux/include/linux/bfs_fs_sb.h	Fri Oct 29 11:26:28 1999
+++ linux-2.3.25-pre1-bfs/include/linux/bfs_fs_sb.h	Fri Oct 29 12:23:21 1999
@@ -17,7 +17,6 @@
 	__u32 si_lf_sblk;
 	__u32 si_lf_eblk;
 	__u32 si_lasti;
-	__u32 si_imap_len;
 	__u8 *si_imap;
 	struct buffer_head * si_sbh;		/* buffer header w/superblock */
 	struct bfs_super_block * si_bfs_sb;	/* superblock in si_sbh->b_data */
