u32 *read_buf(struct nfsd4_compoundargs *argp, int nbytes) 
static u32 *read_buf(struct nfsd4_compoundargs *argp, int nbytes) 
u32 *read_buf(struct nfsd4_compoundargs *argp, int nbytes){	/* We want more bytes than seem to be available.	 * Maybe we need a new page, maybe we have just run out	 */	int avail = (char*)argp->end - (char*)argp->p;	u32 *p;	if (avail + argp->pagelen < nbytes)		return NULL;	if (avail + PAGE_SIZE < nbytes) /* need more than a page !! */		return NULL;	/* ok, we can do it with the current plus the next page */	if (nbytes <= sizeof(argp->tmp))		p = argp->tmp;	else {		if (argp->tmpp)			kfree(argp->tmpp);		p = argp->tmpp = kmalloc(nbytes, GFP_KERNEL);		if (!p)			return NULL;			}	memcpy(p, argp->p, avail);	/* step to next page */	argp->p = page_address(argp->pagelist[0]);	argp->pagelist++;	if (argp->pagelen < PAGE_SIZE) {		argp->end = p + (argp->pagelen>>2);		argp->pagelen = 0;	} else {		argp->end = p + (PAGE_SIZE>>2);		argp->pagelen -= PAGE_SIZE;	}	memcpy(((char*)p)+avail, argp->p, (nbytes - avail));	argp->p += XDR_QUADLEN(nbytes - avail);	return p;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/fd39ca9a808c6026989bc2188868a0574eb37108/nfs4xdr.c/clean/fs/nfsd/nfs4xdr.c