/** * destroy a volume disk header. * * @param[in] dp disk partition object * @param[in] volid volume id * @param[in] parent parent's volume id, 0 if unknown * * @return operation status * @retval 0 success * * @note if parent is 0, the parent volume ID will be looked up from the * fileserver * * @note for non-DAFS, parent is currently ignored */ afs_int32 VDestroyVolumeDiskHeader(struct DiskPartition64 * dp, VolumeId volid, VolumeId parent) { afs_int32 code = 0; char path[MAXPATHLEN]; #ifdef AFS_DEMAND_ATTACH_FS SYNC_response res; #endif /* AFS_DEMAND_ATTACH_FS */ (void)afs_snprintf(path, sizeof(path), "%s/" VFORMAT, VPartitionPath(dp), afs_printable_uint32_lu(volid)); code = unlink(path); if (code) { Log("VDestroyVolumeDiskHeader: Couldn't unlink disk header, error = %d\n", errno); goto done; } #ifdef AFS_DEMAND_ATTACH_FS memset(&res, 0, sizeof(res)); if (!parent) { FSSYNC_VGQry_response_t q_res; code = FSYNC_VGCQuery(dp->name, volid, &q_res, &res); if (code) { Log("VDestroyVolumeDiskHeader: FSYNC_VGCQuery(%s, %lu) failed " "with code %ld, reason %ld\n", dp->name, afs_printable_uint32_lu(volid), afs_printable_int32_ld(code), afs_printable_int32_ld(res.hdr.reason)); goto done; } parent = q_res.rw; } code = FSYNC_VGCDel(dp->name, parent, volid, FSYNC_WHATEVER, &res); if (code) { Log("VDestroyVolumeDiskHeader: FSYNC_VGCDel(%s, %lu, %lu) failed " "with code %ld reason %ld\n", dp->name, afs_printable_uint32_lu(parent), afs_printable_uint32_lu(volid), afs_printable_int32_ld(code), afs_printable_int32_ld(res.hdr.reason)); } #endif /* AFS_DEMAND_ATTACH_FS */ done: return code; }
/** * query VGC. * * @notes args: * - CUSTOM_PARMS_OFFSET+0 is partition string * - CUSTOM_PARMS_OFFSET+1 is volume id * * @return operation status * @retval 0 success */ static int VGCQuery(struct cmd_syndesc * as, void * rock) { afs_int32 code; struct fssync_state state; char * partName; VolumeId volid; FSSYNC_VGQry_response_t q_res; SYNC_response res; int i; struct cmd_item *ti; if (!(ti = as->parms[CUSTOM_PARMS_OFFSET+0].items)) { /* -partition */ return -1; } partName = ti->data; if (!(ti = as->parms[CUSTOM_PARMS_OFFSET+1].items)) { /* -volumeid */ return -1; } volid = atoi(ti->data); common_prolog(as, &state); fprintf(stderr, "calling FSYNC_VCGQuery\n"); code = FSYNC_VGCQuery(partName, volid, &q_res, &res); debug_response(code, &res); if (code == SYNC_OK) { printf("VG = {\n"); printf("\trw\t=\t%u\n", q_res.rw); printf("\tchildren\t= (\n"); for (i = 0; i < VOL_VG_MAX_VOLS; i++) { if (q_res.children[i]) { printf("\t\t%u\n", q_res.children[i]); } } printf("\t)\n"); } VDisconnectFS(); return 0; }