if (error == RXKADEXPIRED) { cred_expire (ce); cred_free (ce); return viocsetvolstat (fd, h, size); } else if (error != 0 && error != EACCES)
if (error != 0 && error != EACCES)
viocsetvolstat(int fd, struct xfs_message_pioctl *h, u_int size){    VenusFid fid;    CredCacheEntry *ce;    AFSFetchVolumeStatus *involstat;    AFSStoreVolumeStatus outvolstat;    char volumename[AFSNAMEMAX];    char offlinemsg[AFSOPAQUEMAX];    char motd[AFSOPAQUEMAX];    int error;    char *ptr;    if (!h->handle.a && !h->handle.b && !h->handle.c && !h->handle.d)	return EINVAL;    fid.Cell = h->handle.a;    fid.fid.Volume = h->handle.b;    fid.fid.Vnode = 0;    fid.fid.Unique = 0;    ce = cred_get (fid.Cell, h->cred.pag, CRED_ANY);    assert (ce != NULL);    involstat = (AFSFetchVolumeStatus *) h->msg;    outvolstat.Mask = 0x3; /* Store both the next fields */    outvolstat.MinQuota = involstat->MinQuota;    outvolstat.MaxQuota = involstat->MaxQuota;    ptr = h->msg + sizeof (AFSFetchVolumeStatus);    if (*ptr) {	strncpy (volumename, ptr, AFSNAMEMAX);	ptr += strlen (ptr);    }    else {	memset (volumename, 0, AFSNAMEMAX);	ptr++; /* skip 0 character */    }    if (*ptr) {	strncpy (offlinemsg, ptr, AFSOPAQUEMAX);	ptr += strlen (ptr);    }    else {	memset (offlinemsg, 0, AFSOPAQUEMAX);	ptr++;    }    strncpy (motd, ptr, AFSOPAQUEMAX);    error = setvolstat (fid, ce, &outvolstat, volumename,			offlinemsg, motd);    if (error == RXKADEXPIRED) {	cred_expire (ce);	cred_free (ce);	return viocsetvolstat (fd, h, size);    } else if (error != 0 && error != EACCES)	error = EINVAL;    cred_free (ce);    xfs_send_message_wakeup_data (fd, h->header.sequence_num, error,				  NULL, 0);    return 0;}