Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e64674d0 authored by Oleg Drokin's avatar Oleg Drokin Committed by Greg Kroah-Hartman
Browse files

staging/lustre/ptlrpc: Remove server-specific health checks



ptlrpc_service_health_check is only used on a service, so
it makes no point to retain it in the client code.
Also removing it's helpers: ptlrpc_svcpt_health_check and
ptlrpc_nrs_req_peek_nolock

Reported-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarOleg Drokin <green@linuxhacker.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 600362f9
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -2541,7 +2541,6 @@ int ptlrpc_start_threads(struct ptlrpc_service *svc);
int ptlrpc_unregister_service(struct ptlrpc_service *service);
int liblustre_check_services(void *arg);
void ptlrpc_daemonize(char *name);
int ptlrpc_service_health_check(struct ptlrpc_service *);
void ptlrpc_server_drop_request(struct ptlrpc_request *req);
void ptlrpc_request_change_export(struct ptlrpc_request *req,
				  struct obd_export *export);
+0 −6
Original line number Diff line number Diff line
@@ -137,12 +137,6 @@ ptlrpc_nrs_req_get_nolock(struct ptlrpc_service_part *svcpt, bool hp,
	return ptlrpc_nrs_req_get_nolock0(svcpt, hp, false, force);
}

static inline struct ptlrpc_request *
ptlrpc_nrs_req_peek_nolock(struct ptlrpc_service_part *svcpt, bool hp)
{
	return ptlrpc_nrs_req_get_nolock0(svcpt, hp, true, false);
}

void ptlrpc_nrs_req_del_nolock(struct ptlrpc_request *req);
bool ptlrpc_nrs_req_pending_nolock(struct ptlrpc_service_part *svcpt, bool hp);

+0 −58
Original line number Diff line number Diff line
@@ -2977,61 +2977,3 @@ int ptlrpc_unregister_service(struct ptlrpc_service *service)
	return 0;
}
EXPORT_SYMBOL(ptlrpc_unregister_service);

/**
 * Returns 0 if the service is healthy.
 *
 * Right now, it just checks to make sure that requests aren't languishing
 * in the queue.  We'll use this health check to govern whether a node needs
 * to be shot, so it's intentionally non-aggressive. */
static int ptlrpc_svcpt_health_check(struct ptlrpc_service_part *svcpt)
{
	struct ptlrpc_request *request = NULL;
	struct timespec64 right_now;
	struct timespec64 timediff;

	ktime_get_real_ts64(&right_now);

	spin_lock(&svcpt->scp_req_lock);
	/* How long has the next entry been waiting? */
	if (ptlrpc_server_high_pending(svcpt, true))
		request = ptlrpc_nrs_req_peek_nolock(svcpt, true);
	else if (ptlrpc_server_normal_pending(svcpt, true))
		request = ptlrpc_nrs_req_peek_nolock(svcpt, false);

	if (request == NULL) {
		spin_unlock(&svcpt->scp_req_lock);
		return 0;
	}

	timediff = timespec64_sub(right_now, request->rq_arrival_time);
	spin_unlock(&svcpt->scp_req_lock);

	if ((timediff.tv_sec) >
	    (AT_OFF ? obd_timeout * 3 / 2 : at_max)) {
		CERROR("%s: unhealthy - request has been waiting %llds\n",
		       svcpt->scp_service->srv_name, (s64)timediff.tv_sec);
		return -1;
	}

	return 0;
}

int
ptlrpc_service_health_check(struct ptlrpc_service *svc)
{
	struct ptlrpc_service_part *svcpt;
	int i;

	if (svc == NULL)
		return 0;

	ptlrpc_service_for_each_part(svcpt, i, svc) {
		int rc = ptlrpc_svcpt_health_check(svcpt);

		if (rc != 0)
			return rc;
	}
	return 0;
}
EXPORT_SYMBOL(ptlrpc_service_health_check);