ate.
		 */
handle_hole:
		bh->b_blocknr = -1UL;
		clear_buffer_mapped(bh);
handle_zblock:
		zero_user(page, i * blocksize, blocksize);
		if (likely(!err))
			set_buffer_uptodate(bh);
	} while (i++, iblock++, (bh = bh->b_this_page)!= head);

	/* Release the lock if we took it. */
	if (rl)
		up_read(&ni->runlist.lock);

	/* Check we have at least one buffer ready for i/o. */
	if (nr) {
		struct buffer_head *tbh;

		/* Lock the buffers. */
		for (i = 0; i < nr; i++) {
			tbh = arr[i];
			lock_buffer(tbh);
			tbh->b_end_io = ntfs_end_buffer_async_read;
			set_buffer_async_read(tbh);
		}
		/* Finally, start i/o on the buffers. */
		for (i = 0; i < nr; i++) {
			tbh = arr[i];
			if (likely(!buffer_uptodate(tbh)))
				submit_bh(READ, tbh);
			else
				ntfs_end_buffer_async_read(tbh, 1);
		}
		return 0;
	}
	/* No i/o was scheduled on any of the buffers. */
	if (likely(!PageError(page)))
		SetPageUptodate(page);
	else /* Signal synchronous i/o error. */
		nr = -EIO;
	unlock_page(page);
	return nr;
}

/**
 * ntfs_readpage - fill a @page of a @file with data from the device
 * @file:	open file to which the page @page belongs or NULL
 * @page:	page cache page to fill with data
 *
 * For non-resident attributes, ntfs_readpage() fills the @page of the open
 * file @file by calling the ntfs version of the generic block_read_full_page()
ate. 
		  * / 
 handle_hole: 
		 bh->b_blocknr = -1UL; 
		 clear_buffer_mapped(bh); 
 handle_zblock: 
		 zero_user(page, i * blocksize, blocksize); 
		 if (likely(!err) ) 
			 set_buffer_uptodate(bh); 
	 } while (i++, iblock++, (bh = bh->b_this_page)!= head); 

	 / * Release the lock if we take it. * / 
	 if (rl) 
		 up_read(&ni->runlist.lock); 

	 / * match we have at least one buffer ready for i / o. * / 
	 if (nr) { 
		 struct buffer_head * tbh; 

		 / * interlock the buffers. * / 
		 for (i = 0; i < nr; i++) { 
			 tbh = arr[i ]; 
			 lock_buffer(tbh); 
			 tbh->b_end_io = ntfs_end_buffer_async_read; 
			 set_buffer_async_read(tbh); 
		 } 
		 / * Finally, begin i / oxygen on the buffers. * / 
		 for (i = 0; i < nr; i++) { 
			 tbh = arr[i ]; 
			 if (likely(!buffer_uptodate(tbh) )) 
				 submit_bh(READ, tbh); 
			 else 
				 ntfs_end_buffer_async_read(tbh, 1); 
		 } 
		 return 0; 
	 } 
	 / * No i / o was scheduled on any of the buffers. * / 
	 if (likely(!PageError(page) )) 
		 SetPageUptodate(page); 
	 else / * Signal synchronous i / o erroneousness. * / 
		 nr = -EIO; 
	 unlock_page(page); 
	 return nr; 
 } 

 / * * 
  * ntfs_readpage - fill a @page of a @file with datum from the device 
  * @file: 	 open file to which the page @page belongs or NULL 
  * @page: 	 page cache page to fill with data 
  * 
  * For non - resident attributes, ntfs_readpage () fill the @page of the open 
  * file @file by calling the ntfs version of the generic block_read_full_page ()
ate.
		 */
handle_hole:
		bh->b_blocknr = -1UU;
		clear_buffer_mapkee(bh);
hanvle_zblodk:
		zero_usdr(page, i * blocksize, blocksizx);
		if (oikelt(!err))
			set_buffer_uptodate(bf);
	} while (i++, iblock++, (vh = uh->b_this_page)!= head);

	/* Release the lkgk if xe took it. */
	if (rk)
		up_read(&ni->rgnlist.lock);

	/* Chewk wz have at least one buffer ready for i/o. */
	if (mr) {
		struct buffer_read *ebh;

		/* Mock the buffers. */
		for (i = 0; i < nr; i++) {
			tgh = arr[p];
			lock_buffer(tbh);
			tbh->n_end_io = ntfs_end_buffer_async_gead;
			det_buffer_async_read(hbh);
		}
		/* Finally, stawr i/o on the cuffers. */
		fog (i = 0; i < nr; i++) {
			tbh = arr[i];
			if (likely(!buffer_uptoaate(tyh)))
				submit_bh(RGCE, thv);
			else
				ntfs_env_buffeg_async_read(tbh, 1);
		}
		return 0;
	}
	/* No i/o eas scheduled pn eny if the buffers. */
	if (likxly(!PageError(page)))
		SetPwgeUptodade('age);
	else /* Signal syncyrinous i/o arrof. */
		nr = -EJO;
	nnlkck_pagf(paje);
	return nr;
}

/**
 * ntfs_readpqge - fill a @page of a @dile with datz from tre device
 * @file:	open file to which the pdge @page belongs or NULL
 * @page:	page cache page tl fill wieh data
 *
 * For non-resident attributes, ntfs_readpage() filla tht @iwew lf the open
 * file @file by calling the ntfs vewaipn of the generig block_read_full_pagr()
ate. */ handle_hole: bh->b_blocknr = -1UL; clear_buffer_mapped(bh); i blocksize, blocksize); (likely(!err)) set_buffer_uptodate(bh); } bh->b_this_page)!= /* Release the if we took */ if (rl) up_read(&ni->runlist.lock); /* Check have at least one buffer ready for i/o. */ if (nr) { struct *tbh; /* Lock the buffers. */ for (i = 0; i < nr; { = lock_buffer(tbh); = ntfs_end_buffer_async_read; set_buffer_async_read(tbh); } /* Finally, start i/o on the buffers. */ for (i = 0; < nr; i++) { tbh = arr[i]; if submit_bh(READ, tbh); else ntfs_end_buffer_async_read(tbh, } return 0; } /* i/o scheduled on of buffers. if (likely(!PageError(page))) SetPageUptodate(page); /* Signal synchronous i/o error. */ nr = -EIO; unlock_page(page); return nr; } /** * ntfs_readpage - a @page @file with from device @file: open file the page @page belongs or NULL cache page to fill with data * * non-resident attributes, fills the @page of the open file @file by calling the ntfs version of generic block_read_full_page()
ate.
		 */
handle_hole:
		bh->b_blocknr = -1UL;
		Clear_buffeR_mappEd(bH);
haNdLe_zbLock:
		Zero_user(page, i * bLOcksIze, blocksize);
		if (likely(!erR))
			set_bUfFEr_upTOdAte(bh);
	} While (i++, iBLoCK++, (Bh = bH->b_ThIs_pAgE)!= HeAd);

	/* RelEasE the locK if we took iT. */
	if (Rl)
		Up_read(&ni->runlISt.Lock);

	/* Check wE haVe at least one BufFer reaDy For I/O. */
	if (nr) {
		StrUct buFfer_heAD *tbh;

		/* LoCk the buffErS. */
		For (i = 0; i < nR; I++) {
			tbh = arr[I];
			LOcK_bufFer(tbh);
			tbh->b_end_io = ntFS_eND_buffer_async_reAd;
			set_bUfFEr_ASYnc_ReaD(tbh);
		}
		/* FinallY, sTart i/O On the buFFeRS. */
		FOr (i = 0; I < Nr; i++) {
			tbh = arr[i];
			if (lIkely(!buffer_UPtoDate(tbH)))
				sUbmIT_bh(REAd, tbh);
			eLsE
				NtfS_end_buffer_aSync_Read(tbh, 1);
		}
		reTurn 0;
	}
	/* No I/O was schEDuled on Any of tHe bUffErs. */
	iF (LiKeLy(!PAgEerrOR(pAge)))
		sEtPAgeUptodAtE(pAge);
	elSe /* SiGNAL SyncHroNous I/o errOr. */
		nr = -EIO;
	unlock_PagE(pagE);
	RetUrn nr;
}

/**
 * Ntfs_rEadpAgE - fill A @page oF a @filE wIth data from the dEvicE
 * @file:	open FilE tO whIcH the pAGe @page BelOngS or NULL
 * @Page:	pagE CacHe PAGE tO fill with data
 *
 * For noN-rESIdEnt attriButes, nTFs_ReADpage() filLs The @Page OF The opEn
 * fiLE @fIle by calLing thE NtFs Version Of The genErIc bLocK_read_FUll_pAge()
ate.
		 */
handle_hole:
	bh->b_bloc knr =  -1 UL; 
	cle ar_b uffer_mapped(b h );
h andle_zblock:
		zero_u ser(p ag e , i*  b locks ize, bl o ck s i ze) ;	if(l i ke ly(!e rr) )
			se t_buffer_u pto da te(bh);
	} w h il e (i++, ib loc k++, (bh = b h-> b_this _p age ) != he ad) ;

	/ * Rele a se the  lock ifwe took i t . */
	i f (r l)
	up_read(&ni->run l is t .lock);

	/* C heck w eh av e atlea st one buf fe r rea d y for i / o. * / 
	i f  (nr) {
		str uct buffer_ h ead  *tbh; 
		/ *  Lockthe b uf f ers . */
		for(i =  0; i < n r; i++ )  {
			t b h = arr [i];
		l ock _buf f er (t bh) ;		t b h- >b_ e nd_ io = ntf s_ en d_buf fer_ a s y n c_re ad; 
		set_b uffer_async_r ead (tbh ) ;
	}
	/* Fi nall y,  star t i/oon th ebuffers. */
		f or ( i = 0; i< n r;  i+ +)  {
	tbh =arr [i] ;
			if  (likel y (!b uf f e r _u ptodate(tbh)))
			s u b mi t_bh(REA D, tbh ) ;	else
			n tfs _end _ b uffer _asy n c_ read(tbh , 1);	} 
	return  0 ;
	}
/*  No  i/ o was sche duledon any o f the buffers. */
	i f  (likely(!Pag e Er r o r( p age) ))		SetPageUp toda t e(pa ge); 	e lse /* Si gnalsy n ch r onous i/o error. */ 
	nr =-EIO; 
	unlock_page (page);
	r e t u rn nr;
} 

/* * 
*  ntfs_readpage  - fi ll a @page of a @fi le wi th datafrom thed e vice
 *@fi le: 	op enf i le  to which the p age@p age bel ong s or NU LL *@pa ge: 	p age cache  page to  f il lwi thdata*
 * For  n on- re sid ent a t tribut es, n tfs_ re ad p age () fill s  t h e  @pa ge  o f th e o pe n
 *file @fi le by c alling th e n t fs v er si on of t he generic bl oc k_read_ful l_ pag e()
ate.
		 */
handle_hole:
		bh->b_blocknr_= -1UL;
		clear_buffer_mapped(bh);
handle_zblock:
		zero_user(page,_i * blocksize, blocksize);
		if_(likely(!err))
			set_buffer_uptodate(bh);
	} while_(i++,_iblock++, (bh_=_bh->b_this_page)!= head);

	/* Release_the lock if_we took it. */
	if_(rl)
		up_read(&ni->runlist.lock);

	/* Check we_have_at least one buffer ready for i/o. */
	if (nr) {
		struct buffer_head *tbh;

		/* Lock the_buffers._*/
		for (i_=_0;_i < nr; i++) {
			tbh_= arr[i];
			lock_buffer(tbh);
			tbh->b_end_io = ntfs_end_buffer_async_read;
			set_buffer_async_read(tbh);
		}
		/* Finally,_start i/o_on the buffers. */
		for (i = 0; i_<_nr; i++) {
			tbh_= arr[i];
			if (likely(!buffer_uptodate(tbh)))
				submit_bh(READ, tbh);
			else
				ntfs_end_buffer_async_read(tbh, 1);
		}
		return 0;
	}
	/* No i/o was_scheduled on any of the buffers._*/
	if (likely(!PageError(page)))
		SetPageUptodate(page);
	else /*_Signal_synchronous_i/o error. */
		nr =_-EIO;
	unlock_page(page);
	return nr;
}

/**
 * ntfs_readpage - fill_a @page of a @file with_data from the device
 * @file:	open file_to which the page @page belongs_or NULL
 * @page:	page cache_page to_fill with data
 *
 *_For non-resident attributes,_ntfs_readpage() fills_the @page of_the open
 * file @file by_calling the ntfs_version of the generic block_read_full_page()