if (file_ofs + bh->b_size > initialized_size) { char *addr; int ofs = 0; 
if (unlikely(file_ofs + bh->b_size > init_size)) { u8 *kaddr; int ofs; 
static void ntfs_end_buffer_async_read(struct buffer_head *bh, int uptodate){	unsigned long flags;	struct buffer_head *first, *tmp;	struct page *page;	ntfs_inode *ni;	int page_uptodate = 1;	page = bh->b_page;	ni = NTFS_I(page->mapping->host);	if (likely(uptodate)) {		s64 file_ofs, initialized_size;		set_buffer_uptodate(bh);		file_ofs = ((s64)page->index << PAGE_CACHE_SHIFT) +				bh_offset(bh);		read_lock_irqsave(&ni->size_lock, flags);		initialized_size = ni->initialized_size;		read_unlock_irqrestore(&ni->size_lock, flags);		/* Check for the current buffer head overflowing. */		if (file_ofs + bh->b_size > initialized_size) {			char *addr;			int ofs = 0;			if (file_ofs < initialized_size)				ofs = initialized_size - file_ofs;			addr = kmap_atomic(page, KM_BIO_SRC_IRQ);			memset(addr + bh_offset(bh) + ofs, 0, bh->b_size - ofs);			flush_dcache_page(page);			kunmap_atomic(addr, KM_BIO_SRC_IRQ);		}	} else {		clear_buffer_uptodate(bh);		SetPageError(page);		ntfs_error(ni->vol->sb, "Buffer I/O error, logical block %llu.",				(unsigned long long)bh->b_blocknr);	}	first = page_buffers(page);	local_irq_save(flags);	bit_spin_lock(BH_Uptodate_Lock, &first->b_state);	clear_buffer_async_read(bh);	unlock_buffer(bh);	tmp = bh;	do {		if (!buffer_uptodate(tmp))			page_uptodate = 0;		if (buffer_async_read(tmp)) {			if (likely(buffer_locked(tmp)))				goto still_busy;			/* Async buffers must be locked. */			BUG();		}		tmp = tmp->b_this_page;	} while (tmp != bh);	bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);	local_irq_restore(flags);	/*	 * If none of the buffers had errors then we can set the page uptodate,	 * but we first have to perform the post read mst fixups, if the	 * attribute is mst protected, i.e. if NInoMstProteced(ni) is true.	 * Note we ignore fixup errors as those are detected when	 * map_mft_record() is called which gives us per record granularity	 * rather than per page granularity.	 */	if (!NInoMstProtected(ni)) {		if (likely(page_uptodate && !PageError(page)))			SetPageUptodate(page);	} else {		char *addr;		unsigned int i, recs;		u32 rec_size;		rec_size = ni->itype.index.block_size;		recs = PAGE_CACHE_SIZE / rec_size;		/* Should have been verified before we got here... */		BUG_ON(!recs);		addr = kmap_atomic(page, KM_BIO_SRC_IRQ);		for (i = 0; i < recs; i++)			post_read_mst_fixup((NTFS_RECORD*)(addr +					i * rec_size), rec_size);		flush_dcache_page(page);		kunmap_atomic(addr, KM_BIO_SRC_IRQ);		if (likely(page_uptodate && !PageError(page)))			SetPageUptodate(page);	}	unlock_page(page);	return;still_busy:	bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);	local_irq_restore(flags);	return;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/f6098cf449b81c14a51e48dd22ae47d03126a1de/aops.c/buggy/fs/ntfs/aops.c