down(&f->sem); 
void jffs2_read_inode (struct inode *inode){	struct jffs2_inode_info *f;	struct jffs2_sb_info *c;	struct jffs2_raw_inode latest_node;	int ret;	D1(printk(KERN_DEBUG "jffs2_read_inode(): inode->i_ino == %lu\n", inode->i_ino));	f = JFFS2_INODE_INFO(inode);	c = JFFS2_SB_INFO(inode->i_sb);	jffs2_init_inode_info(f);	ret = jffs2_do_read_inode(c, f, inode->i_ino, &latest_node);	if (ret) {		make_bad_inode(inode);		up(&f->sem);		return;	}	inode->i_mode = jemode_to_cpu(latest_node.mode);	inode->i_uid = je16_to_cpu(latest_node.uid);	inode->i_gid = je16_to_cpu(latest_node.gid);	inode->i_size = je32_to_cpu(latest_node.isize);	inode->i_atime = ITIME(je32_to_cpu(latest_node.atime));	inode->i_mtime = ITIME(je32_to_cpu(latest_node.mtime));	inode->i_ctime = ITIME(je32_to_cpu(latest_node.ctime));	inode->i_nlink = f->inocache->nlink;	inode->i_blksize = PAGE_SIZE;	inode->i_blocks = (inode->i_size + 511) >> 9;	switch (inode->i_mode & S_IFMT) {		jint16_t rdev;	case S_IFLNK:		inode->i_op = &jffs2_symlink_inode_operations;		break;	case S_IFDIR:	{		struct jffs2_full_dirent *fd;		for (fd=f->dents; fd; fd = fd->next) {			if (fd->type == DT_DIR && fd->ino)				inode->i_nlink++;		}		/* and '..' */		inode->i_nlink++;		/* Root dir gets i_nlink 3 for some reason */		if (inode->i_ino == 1)			inode->i_nlink++;		inode->i_op = &jffs2_dir_inode_operations;		inode->i_fop = &jffs2_dir_operations;		break;	}	case S_IFREG:		inode->i_op = &jffs2_file_inode_operations;		inode->i_fop = &jffs2_file_operations;		inode->i_mapping->a_ops = &jffs2_file_address_operations;		inode->i_mapping->nrpages = 0;		break;	case S_IFBLK:	case S_IFCHR:		/* Read the device numbers from the media */		D1(printk(KERN_DEBUG "Reading device numbers from flash\n"));		if (jffs2_read_dnode(c, f, f->metadata, (char *)&rdev, 0, sizeof(rdev)) < 0) {			/* Eep */			printk(KERN_NOTICE "Read device numbers for inode %lu failed\n", (unsigned long)inode->i_ino);			up(&f->sem);			jffs2_do_clear_inode(c, f);			make_bad_inode(inode);			return;		}	case S_IFSOCK:	case S_IFIFO:		inode->i_op = &jffs2_file_inode_operations;		init_special_inode(inode, inode->i_mode,				   old_decode_dev((je16_to_cpu(rdev))));		break;	default:		printk(KERN_WARNING "jffs2_read_inode(): Bogus imode %o for ino %lu\n", inode->i_mode, (unsigned long)inode->i_ino);	}	up(&f->sem);	D1(printk(KERN_DEBUG "jffs2_read_inode() returning\n"));}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/21eeb7aa116b1f59fc23339521173cbb13e57f1a/fs.c/buggy/fs/jffs2/fs.c