/** * gracefully disconnect a sync client handle. * * @param[in] state pointer to sync client handle * * @return operation status * @retval SYNC_OK success */ afs_int32 SYNC_closeChannel(SYNC_client_state * state) { afs_int32 code; SYNC_command com; SYNC_response res; SYNC_PROTO_BUF_DECL(ores); if (state->fd == -1) return SYNC_OK; memset(&com, 0, sizeof(com)); memset(&res, 0, sizeof(res)); res.payload.len = SYNC_PROTO_MAX_LEN; res.payload.buf = ores; com.hdr.command = SYNC_COM_CHANNEL_CLOSE; com.hdr.command_len = sizeof(SYNC_command_hdr); com.hdr.flags |= SYNC_FLAG_CHANNEL_SHUTDOWN; /* in case the other end dropped, don't do any retries */ state->retry_limit = 0; state->hard_timeout = 0; SYNC_ask(state, &com, &res); SYNC_disconnect(state); return SYNC_OK; }
afs_int32 SALVSYNC_askSalv(SYNC_command * com, SYNC_response * res) { afs_int32 code; SALVSYNC_command_hdr * scom = com->payload.buf; scom->hdr_version = SALVSYNC_PROTO_VERSION; VSALVSYNC_LOCK; code = SYNC_ask(&salvsync_client_state, com, res); VSALVSYNC_UNLOCK; switch (code) { case SYNC_OK: case SYNC_FAILED: break; case SYNC_COM_ERROR: case SYNC_BAD_COMMAND: Log("SALVSYNC_askSalv: fatal SALVSYNC protocol error; online salvager functionality disabled until next fileserver restart\n"); break; case SYNC_DENIED: Log("SALVSYNC_askSalv: SALVSYNC request denied for reason=%d\n", res->hdr.reason); break; default: Log("SALVSYNC_askSalv: unknown protocol response %d\n", code); break; } return code; }
/* fsync client interface */ afs_int32 FSYNC_askfs(SYNC_command * com, SYNC_response * res) { afs_int32 code; VFSYNC_LOCK; code = SYNC_ask(&fssync_state, com, res); VFSYNC_UNLOCK; switch (code) { case SYNC_OK: case SYNC_FAILED: break; case SYNC_COM_ERROR: case SYNC_BAD_COMMAND: Log("FSYNC_askfs: internal FSSYNC protocol error %d\n", code); break; case SYNC_DENIED: Log("FSYNC_askfs: FSSYNC request denied for reason=%d\n", res->hdr.reason); break; default: Log("FSYNC_askfs: unknown protocol response %d\n", code); break; } return code; }
/* fsync client interface */ afs_int32 FSYNC_askfs(SYNC_command * com, SYNC_response * res) { afs_int32 code; VFSYNC_LOCK; code = SYNC_ask(&fssync_state, com, res); VFSYNC_UNLOCK; switch (code) { case SYNC_OK: case SYNC_FAILED: break; case SYNC_COM_ERROR: case SYNC_BAD_COMMAND: Log("FSYNC_askfs: fatal FSSYNC protocol error; volume management functionality disabled until next fileserver restart\n"); break; case SYNC_DENIED: Log("FSYNC_askfs: FSSYNC request denied for reason=%d\n", res->hdr.reason); break; default: Log("FSYNC_askfs: unknown protocol response %d\n", code); break; } return code; }