X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fminix%2Fbitmap.c;h=df6b1075b5494dd380dbe374e0be88239e8b93e8;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=daae633cc43d80c7c96a319cbe333f678287573a;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/fs/minix/bitmap.c b/fs/minix/bitmap.c index daae633cc..df6b1075b 100644 --- a/fs/minix/bitmap.c +++ b/fs/minix/bitmap.c @@ -14,7 +14,7 @@ #include "minix.h" #include #include -#include +#include 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) { - printk("trying to free block not in datazone\n"); + printk("Trying to free block not in datazone\n"); 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) { - printk("unable to read i-node block\n"); + printk("Unable to read inode block\n"); 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) { - printk("unable to read i-node block\n"); + printk("Unable to read inode block\n"); 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) { - 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); @@ -188,24 +189,26 @@ void minix_free_inode(struct inode * inode) 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; + 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) { - 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]; - minix_clear_inode(inode); - clear_inode(inode); 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); + out: + clear_inode(inode); /* clear in-memory copy */ } 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 */ - printk("new_inode: bit already set"); + printk("new_inode: bit already set\n"); 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_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);