git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
fs
/
minix
/
bitmap.c
diff --git
a/fs/minix/bitmap.c
b/fs/minix/bitmap.c
index
daae633
..
df6b107
100644
(file)
--- a/
fs/minix/bitmap.c
+++ b/
fs/minix/bitmap.c
@@
-14,7
+14,7
@@
#include "minix.h"
#include <linux/smp_lock.h>
#include <linux/buffer_head.h>
#include "minix.h"
#include <linux/smp_lock.h>
#include <linux/buffer_head.h>
-#include <
asm
/bitops.h>
+#include <
linux
/bitops.h>
static int nibblemap[] = { 4,3,3,2,3,2,2,1,3,2,2,1,2,1,1,0 };
static int nibblemap[] = { 4,3,3,2,3,2,2,1,3,2,2,1,2,1,1,0 };
@@
-56,7
+56,7
@@
void minix_free_block(struct inode * inode, int block)
unsigned int bit,zone;
if (block < sbi->s_firstdatazone || block >= sbi->s_nzones) {
unsigned int bit,zone;
if (block < sbi->s_firstdatazone || block >= sbi->s_nzones) {
- printk("
t
rying to free block not in datazone\n");
+ printk("
T
rying to free block not in datazone\n");
return;
}
zone = block - sbi->s_firstdatazone + 1;
return;
}
zone = block - sbi->s_firstdatazone + 1;
@@
-124,7
+124,7
@@
minix_V1_raw_inode(struct super_block *sb, ino_t ino, struct buffer_head **bh)
ino / MINIX_INODES_PER_BLOCK;
*bh = sb_bread(sb, block);
if (!*bh) {
ino / MINIX_INODES_PER_BLOCK;
*bh = sb_bread(sb, block);
if (!*bh) {
- printk("
unable to read i-
node block\n");
+ printk("
Unable to read i
node block\n");
return NULL;
}
p = (void *)(*bh)->b_data;
return NULL;
}
p = (void *)(*bh)->b_data;
@@
-149,7
+149,7
@@
minix_V2_raw_inode(struct super_block *sb, ino_t ino, struct buffer_head **bh)
ino / MINIX2_INODES_PER_BLOCK;
*bh = sb_bread(sb, block);
if (!*bh) {
ino / MINIX2_INODES_PER_BLOCK;
*bh = sb_bread(sb, block);
if (!*bh) {
- printk("
unable to read i-
node block\n");
+ printk("
Unable to read i
node block\n");
return NULL;
}
p = (void *)(*bh)->b_data;
return NULL;
}
p = (void *)(*bh)->b_data;
@@
-160,7
+160,8
@@
minix_V2_raw_inode(struct super_block *sb, ino_t ino, struct buffer_head **bh)
static void minix_clear_inode(struct inode *inode)
{
static void minix_clear_inode(struct inode *inode)
{
- struct buffer_head *bh;
+ struct buffer_head *bh = NULL;
+
if (INODE_VERSION(inode) == MINIX_V1) {
struct minix_inode *raw_inode;
raw_inode = minix_V1_raw_inode(inode->i_sb, inode->i_ino, &bh);
if (INODE_VERSION(inode) == MINIX_V1) {
struct minix_inode *raw_inode;
raw_inode = minix_V1_raw_inode(inode->i_sb, inode->i_ino, &bh);
@@
-188,24
+189,26
@@
void minix_free_inode(struct inode * inode)
struct buffer_head * bh;
unsigned long ino;
struct buffer_head * bh;
unsigned long ino;
- if (inode->i_ino < 1 || inode->i_ino > sbi->s_ninodes) {
- printk("free_inode: inode 0 or nonexistent inode\n");
- return;
- }
ino = inode->i_ino;
ino = inode->i_ino;
+ if (ino < 1 || ino > sbi->s_ninodes) {
+ printk("minix_free_inode: inode 0 or nonexistent inode\n");
+ goto out;
+ }
if ((ino >> 13) >= sbi->s_imap_blocks) {
if ((ino >> 13) >= sbi->s_imap_blocks) {
- printk("free_inode: nonexistent imap in superblock\n");
-
return
;
+ printk("
minix_
free_inode: nonexistent imap in superblock\n");
+
goto out
;
}
}
+ minix_clear_inode(inode); /* clear on-disk copy */
+
bh = sbi->s_imap[ino >> 13];
bh = sbi->s_imap[ino >> 13];
- minix_clear_inode(inode);
- clear_inode(inode);
lock_kernel();
if (!minix_test_and_clear_bit(ino & 8191, bh->b_data))
lock_kernel();
if (!minix_test_and_clear_bit(ino & 8191, bh->b_data))
- printk("
free_inode: bit %lu already cleared.\n",
ino);
+ printk("
minix_free_inode: bit %lu already cleared\n",
ino);
unlock_kernel();
mark_buffer_dirty(bh);
unlock_kernel();
mark_buffer_dirty(bh);
+ out:
+ clear_inode(inode); /* clear in-memory copy */
}
struct inode * minix_new_inode(const struct inode * dir, int * error)
}
struct inode * minix_new_inode(const struct inode * dir, int * error)
@@
-235,7
+238,7
@@
struct inode * minix_new_inode(const struct inode * dir, int * error)
return NULL;
}
if (minix_test_and_set_bit(j,bh->b_data)) { /* shouldn't happen */
return NULL;
}
if (minix_test_and_set_bit(j,bh->b_data)) { /* shouldn't happen */
- printk("new_inode: bit already set");
+ printk("new_inode: bit already set
\n
");
unlock_kernel();
iput(inode);
return NULL;
unlock_kernel();
iput(inode);
return NULL;
@@
-250,8
+253,8
@@
struct inode * minix_new_inode(const struct inode * dir, int * error)
inode->i_uid = current->fsuid;
inode->i_gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
inode->i_ino = j;
inode->i_uid = current->fsuid;
inode->i_gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
inode->i_ino = j;
- inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
- inode->i_blocks =
inode->i_blksize =
0;
+ inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME
_SEC
;
+ inode->i_blocks = 0;
memset(&minix_i(inode)->u, 0, sizeof(minix_i(inode)->u));
insert_inode_hash(inode);
mark_inode_dirty(inode);
memset(&minix_i(inode)->u, 0, sizeof(minix_i(inode)->u));
insert_inode_hash(inode);
mark_inode_dirty(inode);