if (vcom->hdr->command == FSYNC_VOL_LEAVE_OFF) {
/* nothing much to do if we're leaving the volume offline */
#ifdef AFS_DEMAND_ATTACH_FS
- if (vp) {
+ if (vp && V_attachState(vp) != VOL_STATE_DELETED) {
if (FSYNC_partMatch(vcom, vp, 1)) {
if ((V_attachState(vp) == VOL_STATE_UNATTACHED) ||
(V_attachState(vp) == VOL_STATE_PREATTACHED)) {
res->hdr.reason = FSYNC_WRONG_PART;
}
} else {
- code = SYNC_DENIED;
+ code = SYNC_FAILED;
res->hdr.reason = FSYNC_UNKNOWN_VOLID;
}
#endif
VDeregisterVolOp_r(vp);
}
#else /* !AFS_DEMAND_ATTACH_FS */
- tvolName[0] = '/';
+ tvolName[0] = OS_DIRSEPC;
snprintf(&tvolName[1], sizeof(tvolName)-1, VFORMAT, afs_printable_uint32_lu(vcom->vop->volume));
tvolName[sizeof(tvolName)-1] = '\0';
break;
}
- Log("FSYNC_com_VolOff: failed to get heavyweight reference to volume %u\n",
- vcom->vop->volume);
+ Log("FSYNC_com_VolOff: failed to get heavyweight reference to volume %u (state=%u, flags=0x%x)\n",
+ vcom->vop->volume, V_attachState(vp), V_attachFlags(vp));
res->hdr.reason = FSYNC_VOL_PKG_ERROR;
goto deny;
} else if (nvp != vp) {
Volume *vp;
- tvolName[0] = '/';
+ tvolName[0] = OS_DIRSEPC;
sprintf(&tvolName[1], VFORMAT, afs_printable_uint32_lu(p[i].volumeID));
vp = VAttachVolumeByName_r(&error, p[i].partName, tvolName,
V_VOLUPD);