* Arrgh. Hell knows how, but %s/new_inode/ntfs_&/g in fs/ntfs/inode.c mentioned in the previous part didn't make it into the patch I've sent. Mea maxima culpa. Fixed. * More duplicated initializations removed: * get_empty_inode() sets i_flags to 0. NFS and UDF did the reinitialization immediately after new_inode(). To 0. * Ditto for i_size. Redundant stuff was in UDF, sysvfs, FAT. * capifs had the following gem: capifs_read_inode(struct inode *inode) { ... inode->i_op = NULL; ... more assignments to fields, then if (ino == 1) { inode->i_op = &capifs_root_inode_operations; ... return; } /* need dummy inode operations .... */ inode->i_op = &capifs_inode_operations; ... } The first assignment is interesting, indeed, but so is the third one: capifs_inode_operations is empty. Just as the default one placed there by caller of ->read_inode() (empty_iops). Crapectomy performed... * shm_read_inode() starts with ->i_op = NULL. After that we attempt shm_lock() and if it fails - return immediately. Correct action: make_bad_inode(). Every other branch initializes ->i_op, so the first assignment is unneeded. * JFFS sets ->i_flags to ->s_flags. Atavism, since s_flags is not mirrored in ->i_flags anymore (inherited from 2.0 version). Makes absolutely no sense these days, since nothing (including JFFS) looks for s_flags bits in i_flags - as the matter of fact they are completely independent. Removed. * All callers of ->read_inode() (OK, the only caller ;-) call clean_inode() immediately before. Several instances have duplicated initializers for ->i_size (to 0), ->i_nlink (to 1), etc. (obviously, normal filesystems have meaningful initializations there - I'm talking only about devfs/capifs/etc.) Please, apply. Cheers, Al PS: at that point the official tree _never_ has ->i_op == NULL for any inode. So Tigran's idea about dropping the checks for NULL ->i_op looks fine, modulo 3rd-party filesystems. For 2.5 it's definitely the right thing, but it might be OK even now... Comments? diff -urN rc11-pre6/drivers/isdn/avmb1/capifs.c rc11-6-new_inode/drivers/isdn/avmb1/capifs.c --- rc11-pre6/drivers/isdn/avmb1/capifs.c Thu Nov 2 22:38:31 2000 +++ rc11-6-new_inode/drivers/isdn/avmb1/capifs.c Fri Nov 17 03:44:58 2000 @@ -119,8 +119,6 @@ lookup: capifs_root_lookup, }; -struct inode_operations capifs_inode_operations; - static struct dentry_operations capifs_dentry_operations = { d_revalidate: capifs_revalidate, }; @@ -468,10 +466,8 @@ ino_t ino = inode->i_ino; struct capifs_sb_info *sbi = SBI(inode->i_sb); - inode->i_op = NULL; inode->i_mode = 0; inode->i_nlink = 0; - inode->i_size = 0; inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; inode->i_blocks = 0; inode->i_blksize = 1024; @@ -484,9 +480,6 @@ inode->i_nlink = 2; return; } - - /* need dummy inode operations .... */ - inode->i_op = &capifs_inode_operations; ino -= 2; if ( ino >= sbi->max_ncci ) diff -urN rc11-pre6/fs/autofs/inode.c rc11-6-new_inode/fs/autofs/inode.c --- rc11-pre6/fs/autofs/inode.c Thu Apr 27 22:09:22 2000 +++ rc11-6-new_inode/fs/autofs/inode.c Fri Nov 17 03:46:09 2000 @@ -211,7 +211,6 @@ inode->i_fop = &autofs_dir_operations; inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; inode->i_nlink = 2; - inode->i_size = 0; inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; inode->i_blocks = 0; inode->i_blksize = 1024; diff -urN rc11-pre6/fs/devfs/base.c rc11-6-new_inode/fs/devfs/base.c --- rc11-pre6/fs/devfs/base.c Fri Nov 17 02:23:19 2000 +++ rc11-6-new_inode/fs/devfs/base.c Fri Nov 17 03:47:06 2000 @@ -2250,7 +2250,6 @@ printk ("%s: read_inode(%d): VFS inode: %p devfs_entry: %p\n", DEVFS_NAME, (int) inode->i_ino, inode, de); #endif - inode->i_size = 0; inode->i_blocks = 0; inode->i_blksize = 1024; inode->i_op = &devfs_iops; diff -urN rc11-pre6/fs/fat/inode.c rc11-6-new_inode/fs/fat/inode.c --- rc11-pre6/fs/fat/inode.c Fri Nov 17 02:23:19 2000 +++ rc11-6-new_inode/fs/fat/inode.c Fri Nov 17 03:14:24 2000 @@ -794,7 +794,6 @@ inode->i_nlink = 1; } #endif - inode->i_size = 0; if ((nr = MSDOS_I(inode)->i_start) != 0) while (nr != -1) { inode->i_size += SECTOR_SIZE*sbi->cluster_size; @@ -818,7 +817,6 @@ (CF_LE_W(de->starthi) << 16); } MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start; - inode->i_nlink = 1; inode->i_size = CF_LE_L(de->size); inode->i_op = &fat_file_inode_operations; inode->i_fop = &fat_file_operations; diff -urN rc11-pre6/fs/jffs/inode-v23.c rc11-6-new_inode/fs/jffs/inode-v23.c --- rc11-pre6/fs/jffs/inode-v23.c Fri Nov 17 02:23:20 2000 +++ rc11-6-new_inode/fs/jffs/inode-v23.c Fri Nov 17 03:40:40 2000 @@ -349,7 +349,6 @@ inode->i_blksize = PAGE_SIZE; inode->i_blocks = (inode->i_size + 511) >> 9; inode->i_version = 0; - inode->i_flags = sb->s_flags; inode->u.generic_ip = (void *)jffs_find_file(c, raw_inode->ino); insert_inode_hash(inode); diff -urN rc11-pre6/fs/nfs/inode.c rc11-6-new_inode/fs/nfs/inode.c --- rc11-pre6/fs/nfs/inode.c Fri Nov 17 02:23:21 2000 +++ rc11-6-new_inode/fs/nfs/inode.c Fri Nov 17 02:40:51 2000 @@ -723,7 +723,6 @@ struct inode *inode = new_inode(sb); if (!inode) goto out; - inode->i_flags = 0; inode->i_ino = nfs_fattr_to_ino_t(fattr); nfs_read_inode(inode); nfs_fill_inode(inode, fattr); diff -urN rc11-pre6/fs/ntfs/inode.c rc11-6-new_inode/fs/ntfs/inode.c --- rc11-pre6/fs/ntfs/inode.c Thu Jul 27 09:36:37 2000 +++ rc11-6-new_inode/fs/ntfs/inode.c Fri Nov 17 02:33:33 2000 @@ -1050,7 +1050,7 @@ /* We have to skip the 16 metafiles and the 8 reserved entries */ static int -new_inode (ntfs_volume* vol,int* result) +ntfs_new_inode (ntfs_volume* vol,int* result) { int byte,error; int bit; @@ -1236,11 +1236,11 @@ ntfs_volume* vol=dir->vol; int byte,bit; - error=new_inode (vol,&(result->i_number)); + error=ntfs_new_inode (vol,&(result->i_number)); if(error==ENOSPC){ error=ntfs_extend_mft(vol); if(error)return error; - error=new_inode(vol,&(result->i_number)); + error=ntfs_new_inode(vol,&(result->i_number)); } if(error){ ntfs_error ("ntfs_get_empty_inode: no free inodes\n"); diff -urN rc11-pre6/fs/sysv/ialloc.c rc11-6-new_inode/fs/sysv/ialloc.c --- rc11-pre6/fs/sysv/ialloc.c Fri Nov 17 02:23:22 2000 +++ rc11-6-new_inode/fs/sysv/ialloc.c Fri Nov 17 03:08:30 2000 @@ -142,7 +142,6 @@ mark_inode_dirty(inode); /* Change directory entry: */ inode->i_mode = 0; /* for sysv_write_inode() */ - inode->i_size = 0; /* ditto */ sysv_write_inode(inode, 0); /* ensure inode not allocated again */ /* FIXME: caller may call this too. */ mark_inode_dirty(inode); /* cleared by sysv_write_inode() */ diff -urN rc11-pre6/fs/udf/ialloc.c rc11-6-new_inode/fs/udf/ialloc.c --- rc11-pre6/fs/udf/ialloc.c Fri Nov 17 02:23:22 2000 +++ rc11-6-new_inode/fs/udf/ialloc.c Fri Nov 17 03:06:57 2000 @@ -84,7 +84,6 @@ *err = -ENOMEM; return NULL; } - inode->i_flags = 0; *err = -ENOSPC; block = udf_new_block(dir, UDF_I_LOCATION(dir).partitionReferenceNum, @@ -128,7 +127,6 @@ inode->i_ino = udf_get_lb_pblock(sb, UDF_I_LOCATION(inode), 0); inode->i_blksize = PAGE_SIZE; inode->i_blocks = 0; - inode->i_size = 0; UDF_I_LENEATTR(inode) = 0; UDF_I_LENALLOC(inode) = 0; if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_EXTENDED_FE)) diff -urN rc11-pre6/ipc/shm.c rc11-6-new_inode/ipc/shm.c --- rc11-pre6/ipc/shm.c Wed Oct 4 03:45:11 2000 +++ rc11-6-new_inode/ipc/shm.c Fri Nov 17 03:34:34 2000 @@ -376,13 +376,14 @@ struct shmid_kernel *shp; id = inode->i_ino; - inode->i_op = NULL; inode->i_mode = 0; inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; if (id < SEQ_MULTIPLIER) { - if (!(shp = shm_lock (id))) + if (!(shp = shm_lock (id))) { + make_bad_inode(inode); return; + } inode->i_mode = (shp->shm_flags & S_IALLUGO) | S_IFREG; inode->i_uid = shp->shm_perm.uid; inode->i_gid = shp->shm_perm.gid; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] Please read the FAQ at http://www.tux.org/lkml/