error = setacl (fid, ce, &opaque);
do { error = setacl (fid, ce, &opaque); } while (try_again (&error, &ce, &h->cred, &fid));
viocsetacl(int fd, struct xfs_message_pioctl *h, u_int size){    VenusFid fid;    AFSOpaque opaque;    CredCacheEntry *ce;    int error;    if (!h->handle.a && !h->handle.b && !h->handle.c && !h->handle.d)	return EINVAL;    if (h->insize > AFSOPAQUEMAX)	return EINVAL;    if((opaque.val=malloc(AFSOPAQUEMAX))==NULL)	return ENOMEM;    fid.Cell = h->handle.a;    fid.fid.Volume = h->handle.b;    fid.fid.Vnode = h->handle.c;    fid.fid.Unique = h->handle.d;    ce = cred_get (fid.Cell, h->cred.pag, CRED_ANY);    assert (ce != NULL);    opaque.len=h->insize;    memcpy(opaque.val, h->msg, h->insize);    error = setacl (fid, ce, &opaque);    if (error == RXKADEXPIRED) {	cred_expire (ce);	cred_free (ce);	return viocsetacl (fd, h, size);    } else if (error != 0 && error != EACCES)	error = EINVAL;    cred_free (ce);    free (opaque.val);     xfs_send_message_wakeup_data (fd, h->header.sequence_num, error,				  NULL, 0);    return 0;}