Patch for minixfs in 2.1.46

Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
Wed, 23 Jul 97 11:17:12 +0200


This patch fixes a few problems in the minix filesystem.

--- linux-2.1.46/fs/minix/bitmap.c.~1~ Fri Jul 18 18:03:16 1997
+++ linux-2.1.46/fs/minix/bitmap.c Tue Jul 22 18:40:13 1997
@@ -191,7 +191,7 @@
printk("free_inode: inode has no device\n");
return;
}
- if (inode->i_count != 1) {
+ if (inode->i_count > 1) {
printk("free_inode: inode has count=%d\n",inode->i_count);
return;
}
@@ -251,7 +251,6 @@
iput(inode);
return NULL;
}
- inode->i_count = 1;
inode->i_nlink = 1;
inode->i_dev = sb->s_dev;
inode->i_uid = current->fsuid;
--- linux-2.1.46/fs/minix/dir.c.~1~ Fri Jul 18 18:03:16 1997
+++ linux-2.1.46/fs/minix/dir.c Tue Jul 22 18:41:11 1997
@@ -92,5 +92,6 @@
} while (offset < 1024 && filp->f_pos < inode->i_size);
brelse(bh);
}
+ UPDATE_ATIME(inode);
return 0;
}
--- linux-2.1.46/fs/minix/file.c.~1~ Fri Jul 18 18:03:16 1997
+++ linux-2.1.46/fs/minix/file.c Tue Jul 22 18:41:31 1997
@@ -108,7 +108,13 @@
}
}
p = (pos % BLOCK_SIZE) + bh->b_data;
- copy_from_user(p,buf,c);
+ c -= copy_from_user(p,buf,c);
+ if (!c) {
+ brelse(bh);
+ if (!written)
+ written = -EFAULT;
+ break;
+ }
update_vm_cache(inode, pos, p, c);
mark_buffer_uptodate(bh, 1);
mark_buffer_dirty(bh, 0);
--- linux-2.1.46/fs/minix/namei.c.~1~ Mon Jul 21 20:19:33 1997
+++ linux-2.1.46/fs/minix/namei.c Tue Jul 22 18:42:03 1997
@@ -109,7 +109,7 @@

bh = minix_find_entry(dir, dentry->d_name.name, dentry->d_name.len, &de);
if (bh) {
- unsigned long ino = le32_to_cpu(de->inode);
+ int ino = de->inode;
brelse (bh);
inode = iget(dir->i_sb, ino);

@@ -593,6 +593,7 @@
inode->i_nlink++;
inode->i_ctime = CURRENT_TIME;
mark_inode_dirty(inode);
+ inode->i_count++;
d_instantiate(dentry, inode);
return 0;
}

-- 
Andreas Schwab                                      "And now for something
schwab@issan.informatik.uni-dortmund.de              completely different"