fat_date_unix2dos(inode->i_atime.tv_sec,&atime,&raw_entry->adate); 
static int fat_write_inode(struct inode *inode, int wait){	struct super_block *sb = inode->i_sb;	struct msdos_sb_info *sbi = MSDOS_SB(sb);	struct buffer_head *bh;	struct msdos_dir_entry *raw_entry;	loff_t i_pos;	int err = 0;retry:	i_pos = MSDOS_I(inode)->i_pos;	if (inode->i_ino == MSDOS_ROOT_INO || !i_pos)		return 0;	lock_kernel();	bh = sb_bread(sb, i_pos >> sbi->dir_per_block_bits);	if (!bh) {		printk(KERN_ERR "FAT: unable to read inode block "		       "for updating (i_pos %lld)\n", i_pos);		err = -EIO;		goto out;	}	spin_lock(&sbi->inode_hash_lock);	if (i_pos != MSDOS_I(inode)->i_pos) {		spin_unlock(&sbi->inode_hash_lock);		brelse(bh);		unlock_kernel();		goto retry;	}	raw_entry = &((struct msdos_dir_entry *) (bh->b_data))	    [i_pos & (sbi->dir_per_block - 1)];	if (S_ISDIR(inode->i_mode))		raw_entry->size = 0;	else		raw_entry->size = cpu_to_le32(inode->i_size);	raw_entry->attr = fat_attr(inode);	raw_entry->start = cpu_to_le16(MSDOS_I(inode)->i_logstart);	raw_entry->starthi = cpu_to_le16(MSDOS_I(inode)->i_logstart >> 16);	fat_date_unix2dos(inode->i_mtime.tv_sec, &raw_entry->time, &raw_entry->date);	if (sbi->options.isvfat) {		fat_date_unix2dos(inode->i_ctime.tv_sec,&raw_entry->ctime,&raw_entry->cdate);		raw_entry->ctime_cs = (inode->i_ctime.tv_sec & 1) * 100 +			inode->i_ctime.tv_nsec / 10000000;	}	spin_unlock(&sbi->inode_hash_lock);	mark_buffer_dirty(bh);	if (wait)		err = sync_dirty_buffer(bh);	brelse(bh);out:	unlock_kernel();	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/62a36c43c898d45efcfe3376ea1da6a9a182e1ad/inode.c/buggy/fs/fat/inode.c