set_buffer_uptodate(bh); 
if (!err) set_buffer_uptodate(bh); 
int block_read_full_page(struct page *page, get_block_t *get_block){	struct inode *inode = page->mapping->host;	sector_t iblock, lblock;	struct buffer_head *bh, *head, *arr[MAX_BUF_PER_PAGE];	unsigned int blocksize;	int nr, i;	int fully_mapped = 1;	BUG_ON(!PageLocked(page));	blocksize = 1 << inode->i_blkbits;	if (!page_has_buffers(page))		create_empty_buffers(page, blocksize, 0);	head = page_buffers(page);	iblock = (sector_t)page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);	lblock = (i_size_read(inode)+blocksize-1) >> inode->i_blkbits;	bh = head;	nr = 0;	i = 0;	do {		if (buffer_uptodate(bh))			continue;		if (!buffer_mapped(bh)) {			fully_mapped = 0;			if (iblock < lblock) {				if (get_block(inode, iblock, bh, 0))					SetPageError(page);			}			if (!buffer_mapped(bh)) {				void *kaddr = kmap_atomic(page, KM_USER0);				memset(kaddr + i * blocksize, 0, blocksize);				flush_dcache_page(page);				kunmap_atomic(kaddr, KM_USER0);				set_buffer_uptodate(bh);				continue;			}			/*			 * get_block() might have updated the buffer			 * synchronously			 */			if (buffer_uptodate(bh))				continue;		}		arr[nr++] = bh;	} while (i++, iblock++, (bh = bh->b_this_page) != head);	if (fully_mapped)		SetPageMappedToDisk(page);	if (!nr) {		/*		 * All buffers are uptodate - we can set the page uptodate		 * as well. But not if get_block() returned an error.		 */		if (!PageError(page))			SetPageUptodate(page);		unlock_page(page);		return 0;	}	/* Stage two: lock the buffers */	for (i = 0; i < nr; i++) {		bh = arr[i];		lock_buffer(bh);		mark_buffer_async_read(bh);	}	/*	 * Stage 3: start the IO.  Check for uptodateness	 * inside the buffer lock in case another process reading	 * the underlying blockdev brought it uptodate (the sct fix).	 */	for (i = 0; i < nr; i++) {		bh = arr[i];		if (buffer_uptodate(bh))			end_buffer_async_read(bh, 1);		else			submit_bh(READ, bh);	}	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/c64610ba585fabb36be78782868277f3d9741a2e/buffer.c/clean/fs/buffer.c