if (desc->error < 0) return desc->error; 
static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir){	struct dentry	*dentry = filp->f_dentry;	struct inode	*inode = dentry->d_inode;	nfs_readdir_descriptor_t my_desc,			*desc = &my_desc;	struct nfs_entry my_entry;	struct nfs_fh	 fh;	struct nfs_fattr fattr;	long		res;	lock_kernel();	res = nfs_revalidate_inode(NFS_SERVER(inode), inode);	if (res < 0) {		unlock_kernel();		return res;	}	/*	 * filp->f_pos points to the dirent entry number.	 * *desc->dir_cookie has the cookie for the next entry. We have	 * to either find the entry with the appropriate number or	 * revalidate the cookie.	 */	memset(desc, 0, sizeof(*desc));	desc->file = filp;	desc->dir_cookie = &((struct nfs_open_context *)filp->private_data)->dir_cookie;	desc->decode = NFS_PROTO(inode)->decode_dirent;	desc->plus = NFS_USE_READDIRPLUS(inode);	my_entry.cookie = my_entry.prev_cookie = 0;	my_entry.eof = 0;	my_entry.fh = &fh;	my_entry.fattr = &fattr;	desc->entry = &my_entry;	while(!desc->entry->eof) {		res = readdir_search_pagecache(desc);		if (res == -EBADCOOKIE) {			/* This means either end of directory */			if (*desc->dir_cookie && desc->entry->cookie != *desc->dir_cookie) {				/* Or that the server has 'lost' a cookie */				res = uncached_readdir(desc, dirent, filldir);				if (res >= 0)					continue;			}			res = 0;			break;		}		if (res == -ETOOSMALL && desc->plus) {			clear_bit(NFS_INO_ADVISE_RDPLUS, &NFS_FLAGS(inode));			nfs_zap_caches(inode);			desc->plus = 0;			desc->entry->eof = 0;			continue;		}		if (res < 0)			break;		res = nfs_do_filldir(desc, dirent, filldir);		if (res < 0) {			res = 0;			break;		}	}	unlock_kernel();	if (desc->error < 0)		return desc->error;	if (res < 0)		return res;	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/9aa48b7e270d13c8781414dce081a42cae20a80d/dir.c/clean/fs/nfs/dir.c