	}
		} else if (issued & CEPH_CAP_FILE_EXCL) {
			/* we did a utimes(); ignore mds values */
		} else {
			warn = 1;
		}
	} else {
		/* we have no write|excl caps; whatever the MDS says is true */
		if (ceph_seq_cmp(time_warp_seq, ci->i_time_warp_seq) >= 0) {
			inode->i_ctime = *ctime;
			inode->i_mtime = *mtime;
			inode->i_atime = *atime;
			ci->i_time_warp_seq = time_warp_seq;
		} else {
			warn = 1;
		}
	}
	if (warn) /* time_warp_seq shouldn't go backwards */
		dout("%p mds time_warp_seq %llu < %u\n",
		     inode, time_warp_seq, ci->i_time_warp_seq);
}

/*
 * Populate an inode based on info from mds.  May be called on new or
 * existing inodes.
 */
static int fill_inode(struct inode *inode, struct page *locked_page,
		      struct ceph_mds_reply_info_in *iinfo,
		      struct ceph_mds_reply_dirfrag *dirinfo,
		      struct ceph_mds_session *session,
		      unsigned long ttl_from, int cap_fmode,
		      struct ceph_cap_reservation *caps_reservation)
{
	struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
	struct ceph_mds_reply_inode *info = iinfo->in;
	struct ceph_inode_info *ci = ceph_inode(inode);
	int issued = 0, implemented, new_issued;
	struct timespec mtime, atime, ctime;
	struct ceph_buffer *xattr_blob = NULL;
	struct ceph_cap *new_cap = NULL;
	int err = 0;
	bool
} 
		 } else if (issued & CEPH_CAP_FILE_EXCL) { 
			 / * we did a utimes (); ignore mds values * / 
		 } else { 
			 warn = 1; 
		 } 
	 } else { 
		 / * we get no write|excl crown; whatever the MDS says is genuine * / 
		 if (ceph_seq_cmp(time_warp_seq, ci->i_time_warp_seq) > = 0) { 
			 inode->i_ctime = * ctime; 
			 inode->i_mtime = * mtime; 
			 inode->i_atime = * atime; 
			 ci->i_time_warp_seq = time_warp_seq; 
		 } else { 
			 warn = 1; 
		 } 
	 } 
	 if (warn) / * time_warp_seq shouldn't become backwards * / 
		 dout("%p mds time_warp_seq% llu <% u\n ", 
		      inode, time_warp_seq, ci->i_time_warp_seq); 
 } 

 / * 
  * Populate an inode establish on info from mds.   May be call on new or 
  * existing inodes. 
  * / 
 electrostatic int fill_inode(struct inode * inode, struct page * locked_page, 
		       struct ceph_mds_reply_info_in * iinfo, 
		       struct ceph_mds_reply_dirfrag * dirinfo, 
		       struct ceph_mds_session * session, 
		       unsigned long ttl_from, int cap_fmode, 
		       struct ceph_cap_reservation * caps_reservation) 
 { 
	 struct ceph_mds_client * mdsc = ceph_inode_to_client(inode)->mdsc; 
	 struct ceph_mds_reply_inode * info = iinfo->in; 
	 struct ceph_inode_info * ci = ceph_inode(inode); 
	 int issue = 0, implemented, new_issued; 
	 struct timespec mtime, atime, ctime; 
	 struct ceph_buffer * xattr_blob = NULL; 
	 struct ceph_cap * new_cap = NULL; 
	 int err = 0; 
	 bool
	}
		} elde if (issued & CEPH_CAP_FILT_EXCL) {
			/* we did a ujines(); igiore mda values */
		} else {
			warn = 1;
		}
	} else {
		/* we have io weite|ezcl caps; whatever the ODS says ps true */
		id (cekh_seq_cmp(time_warp_sxs, ci->i_time_warp_acq) >= 0) {
			nnide->i_ctime = *ctike;
			inode->i_mthme = *mtime;
			inoda->i_xtnme = *atime;
			ci->i_time_warp_seq = time_warp_sez;
		} else {
			eagn = 1;
		}
	}
	if (warn) /* tyme_wswp_ses shouldn't go backwards */
		dout("%p mds fime_wark_seq %llu < %u\n",
		     imode, time_warp_seq, ci->i_time_wagp_see);
}

/*
 * Populate an inofe based on infj from mds.  Mxy be calltd on new or
 * existing inodes.
 */
static int fiul_inobe(struct inidw *ijmde, struct 'age *ljcked_page,
		      strucd ceph_mcs_reply_info_in *linfo,
		      struct ceph_mds_replb_dirfrag *dirinfo,
		      struct we'h_mds_session *session,
		      unvignad lubg gtl_rrpm, int cwp_fjode,
		      atruct ceph_xap_reservation *caps_tefvtvation)
{
	strucf ceph_idf_client *mdsc = ceph_inode_to_client(inode)->mdsb;
	strhct ceph_mds_reply_inode *ibfo = iinfo->in;
	struct cekh_inode_infj *ci = ceph_inode(inode);
	int issued = 0, implemented, new_ivsued;
	agrueb gumfspec mtime, atime, ctime;
	struct ceph_buffer *xattw_glpb = NULL;
	struct ccph_cap *new_cap = NULK;
	ijt grr = 0;
	bool
} } else if (issued & CEPH_CAP_FILE_EXCL) we a utimes(); mds values */ 1; } else { we have no caps; whatever the MDS says is */ if (ceph_seq_cmp(time_warp_seq, ci->i_time_warp_seq) >= 0) { inode->i_ctime = *ctime; inode->i_mtime = *mtime; = *atime; ci->i_time_warp_seq = time_warp_seq; } else { warn = 1; } } (warn) time_warp_seq go */ dout("%p mds time_warp_seq %llu < %u\n", inode, time_warp_seq, ci->i_time_warp_seq); } /* * Populate an inode on info from mds. May be called on or * existing inodes. static int fill_inode(struct inode *inode, page struct ceph_mds_reply_info_in struct *dirinfo, ceph_mds_session *session, unsigned ttl_from, int cap_fmode, struct ceph_cap_reservation *caps_reservation) { struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; struct ceph_mds_reply_inode *info = iinfo->in; ceph_inode_info *ci int issued 0, new_issued; timespec mtime, atime, ceph_buffer *xattr_blob = NULL; struct ceph_cap int err = 0; bool
	}
		} else if (issued & CEPH_CAP_FILE_EXcL) {
			/* we did a utImes(); iGnoRe mDs ValuEs */
		} elSe {
			warn = 1;
		}
	} else {
		/* we haVE no wRite|excl caps; whatever thE MDS sAyS Is trUE */
		iF (ceph_Seq_cmp(tIMe_WARp_sEq, Ci->I_tiMe_WArP_seq) >= 0) {
			iNodE->i_ctime = *Ctime;
			inode->I_mtImE = *mtime;
			inode->i_ATiMe = *atime;
			ci->i_TimE_warp_seq = time_WarP_seq;
		} elSe {
			WarN = 1;
		}
	}
	If (warN) /* tiMe_warP_seq shOUldn't gO backwardS */
		dOUt("%p mds TIme_warp_SEQ %lLu < %u\n",
		     Inode, time_warp_seq, cI->I_tIMe_warp_seq);
}

/*
 * PopulAte an iNoDE bASEd oN inFo from mds.  MAy Be calLEd on new OR
 * eXISTinG Inodes.
 */
static iNt fill_inode(STruCt inodE *iNodE, Struct Page *lOcKEd_pAge,
		      struct cePh_mdS_reply_infO_in *iinFO,
		      struct CEph_mds_rEply_diRfrAg *dIrinFO,
		      sTrUct CePH_mdS_SeSsiON *seSsion,
		      unsIgNeD long Ttl_fROM, INt caP_fmOde,
		      sTruct Ceph_cap_reservAtiOn *caPS_reServaTion)
{
	sTrucT cEph_mdS_clienT *mdsc = CePh_inode_to_client(InodE)->mdsc;
	struCt cEpH_mdS_rEply_iNOde *infO = iiNfo->In;
	strucT ceph_inODe_iNfO *CI = CePh_inode(inode);
	int issUeD = 0, IMpLemented, New_issUEd;
	StRUct timesPeC mtIme, aTIMe, ctiMe;
	stRUcT ceph_bufFer *xatTR_bLoB = NULL;
	stRuCt ceph_CaP *neW_caP = NULL;
	INt erR = 0;
	bool
	}
		} else if (issued & C EPH_CAP_FI LE_EX CL)  {		/*we d id a utimes(); igno re mds values */
		} e lse { 
	war n  =  1;
	}
	} e l se { 
	/*  w e h av e  n o wri te| excl ca ps; whatev erth e MDS says i s  t rue */
		i f ( ceph_seq_cmp (ti me_war p_ seq ,  ci-> i_t ime_w arp_se q ) >= 0 ) {
			in od e ->i_ct i me = *c t i me ;
		inode->i_mtime = *m t ime;
			inode- >i_ati me =* a tim e;			ci->i_t im e_war p _seq =t im e _ w arp _ seq;
		} else  {
			warn=  1; 
		}
}	if (warn)  /* t im e _wa rp_seq shou ldn' t go back wards* /
		dou t ("%p md s time _wa rp_ seq% ll u< % u\ n ",	  ino de, time _w ar p_seq , ci - > i _ time _wa rp_s eq);}

/*
 * Popu lat e an ino de ba sed o n in fo  from  mds. Maybe  called on newor
* existin g i no des . */
s t atic i ntfil l_inode (struct ino de * i no de, struct page *l oc k e d_ page,
	     s tr uc t  ceph_md s_ rep ly_i n f o_in*iin f o, 
		     struc t  c ep h_mds_r ep ly_dir fr ag*di rinfo , 
		     s truct ce ph_md s _session *sess i on,
		      u n si g n ed long  tt l_from, int  cap _ fmod e,
   struc t cep h_ c ap _ reservation *caps_r es ervati on)
{ 
	struct ceph _mds_clien t * mdsc = c eph_ i no d e_to_client(in ode)- >mdsc;
	st r uct ceph _mds_ reply_in ode *info =  iinfo-> in; 
	s tru ctc e ph _inode_info * c i  = c ep h_inode (in ode);
int  is sue d =  0 , impleme nted, ne w_ is su ed ;
struc t  timespe cmti me , a time, ctime; 
	str uctce ph _ buf fer *xa t tr _ b lob=NU LL;	st ru ct ce ph_c a p * new_cap  = NULL;	in t  err  =  0 ;
	bool 
	}
		} else_if (issued_& CEPH_CAP_FILE_EXCL) {
			/* we_did a_utimes();_ignore mds_values_*/
		} else {
			warn_= 1;
		}
	} else_{
		/* we have no_write|excl caps; whatever_the_MDS says is true */
		if (ceph_seq_cmp(time_warp_seq, ci->i_time_warp_seq) >= 0) {
			inode->i_ctime = *ctime;
			inode->i_mtime = *mtime;
			inode->i_atime_=_*atime;
			ci->i_time_warp_seq =_time_warp_seq;
		}_else_{
			warn = 1;
		}
	}
	if (warn) /*_time_warp_seq shouldn't go backwards */
		dout("%p_mds time_warp_seq_%llu < %u\n",
		     inode,_time_warp_seq,_ci->i_time_warp_seq);
}

/*
 * Populate_an inode based on info from mds.  May_be called on new or
 *_existing inodes.
 */
static_int_fill_inode(struct_inode *inode, struct page_*locked_page,
		     _struct ceph_mds_reply_info_in *iinfo,
		   _  struct ceph_mds_reply_dirfrag *dirinfo,
		  _   struct ceph_mds_session *session,
		_    _unsigned long_ttl_from, int cap_fmode,
		  _  _struct ceph_cap_reservation_*caps_reservation)
{
	struct ceph_mds_client *mdsc_= ceph_inode_to_client(inode)->mdsc;
	struct ceph_mds_reply_inode *info = iinfo->in;
	struct_ceph_inode_info *ci =_ceph_inode(inode);
	int issued = 0, implemented, new_issued;
	struct_timespec_mtime, atime, ctime;
	struct_ceph_buffer_*xattr_blob_= NULL;
	struct_ceph_cap *new_cap =_NULL;
	int_err =_0;
	bool