/* Initialize arguments for GRANTED call. The nlm_rqst structure has been cleared already.  */
static int nlmsvc_setgrantargs(struct nlm_rqst *call, struct nlm_lock *lock)
/* Initialize arguments for GRANTED call. The nlm_rqst structure has been cleared already.  */
static int nlmsvc_setgrantargs(struct nlm_rqst *call, struct nlm_lock *lock)
{
	locks_copy_lock(&call->a_args.lock.fl, &lock->fl);
	memcpy(&call->a_args.lock.fh, &lock->fh, sizeof(call->a_args.lock.fh));
	call->a_args.lock.caller = utsname()->nodename;
	call->a_args.lock.oh.len = lock->oh.len;
	call->a_args.lock.oh.data = call->a_owner;
	call->a_args.lock.svid = lock->fl.fl_pid;
	if (lock->oh.len > NLMCLNT_OHSIZE) {
		void *data = kmalloc(lock->oh.len, GFP_KERNEL);
		if (!data)
			return 0;
		call->a_args.lock.oh.data = (u8 *) data;
	}
	memcpy(call->a_args.lock.oh.data, lock->oh.data, lock->oh.len);
	return 1;
}