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

Commit 275e7e20 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFSv4.1: Remove the 'FIFO' behaviour for nfs41_setup_sequence



It is more important to preserve the task priority behaviour, which ensures
that things like reclaim writes take precedence over background and kupdate
writes.

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 7b939a3f
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -236,7 +236,6 @@ static inline struct nfs4_session *nfs4_get_session(const struct nfs_server *ser
	return server->nfs_client->cl_session;
	return server->nfs_client->cl_session;
}
}


extern bool nfs4_set_task_privileged(struct rpc_task *task, void *dummy);
extern int nfs4_setup_sequence(const struct nfs_server *server,
extern int nfs4_setup_sequence(const struct nfs_server *server,
		struct nfs4_sequence_args *args, struct nfs4_sequence_res *res,
		struct nfs4_sequence_args *args, struct nfs4_sequence_res *res,
		struct rpc_task *task);
		struct rpc_task *task);
+1 −14
Original line number Original line Diff line number Diff line
@@ -379,12 +379,6 @@ static void renew_lease(const struct nfs_server *server, unsigned long timestamp


#if defined(CONFIG_NFS_V4_1)
#if defined(CONFIG_NFS_V4_1)


bool nfs4_set_task_privileged(struct rpc_task *task, void *dummy)
{
	rpc_task_set_priority(task, RPC_PRIORITY_PRIVILEGED);
	return true;
}

static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
{
{
	struct nfs4_session *session;
	struct nfs4_session *session;
@@ -412,8 +406,7 @@ static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
	if (tbl->highest_used_slotid != NFS4_NO_SLOT)
	if (tbl->highest_used_slotid != NFS4_NO_SLOT)
		send_new_highest_used_slotid = false;
		send_new_highest_used_slotid = false;
	if (!nfs4_session_draining(session)) {
	if (!nfs4_session_draining(session)) {
		if (rpc_wake_up_first(&tbl->slot_tbl_waitq,
		if (rpc_wake_up_next(&tbl->slot_tbl_waitq) != NULL)
				nfs4_set_task_privileged, NULL) != NULL)
			send_new_highest_used_slotid = false;
			send_new_highest_used_slotid = false;
	}
	}
	spin_unlock(&tbl->slot_tbl_lock);
	spin_unlock(&tbl->slot_tbl_lock);
@@ -527,12 +520,6 @@ int nfs41_setup_sequence(struct nfs4_session *session,
		goto out_sleep;
		goto out_sleep;
	}
	}


	if (!rpc_queue_empty(&tbl->slot_tbl_waitq) &&
	    !rpc_task_has_priority(task, RPC_PRIORITY_PRIVILEGED)) {
		dprintk("%s enforce FIFO order\n", __func__);
		goto out_sleep;
	}

	slot = nfs4_alloc_slot(tbl);
	slot = nfs4_alloc_slot(tbl);
	if (IS_ERR(slot)) {
	if (IS_ERR(slot)) {
		/* If out of memory, try again in 1/4 second */
		/* If out of memory, try again in 1/4 second */
+1 −3
Original line number Original line Diff line number Diff line
@@ -263,9 +263,7 @@ static void nfs4_end_drain_session(struct nfs_client *clp)
	if (test_and_clear_bit(NFS4_SESSION_DRAINING, &ses->session_state)) {
	if (test_and_clear_bit(NFS4_SESSION_DRAINING, &ses->session_state)) {
		spin_lock(&tbl->slot_tbl_lock);
		spin_lock(&tbl->slot_tbl_lock);
		for (i = 0; i <= tbl->max_slotid; i++) {
		for (i = 0; i <= tbl->max_slotid; i++) {
			if (rpc_wake_up_first(&tbl->slot_tbl_waitq,
			if (rpc_wake_up_next(&tbl->slot_tbl_waitq) == NULL)
						nfs4_set_task_privileged,
						NULL) == NULL)
				break;
				break;
		}
		}
		spin_unlock(&tbl->slot_tbl_lock);
		spin_unlock(&tbl->slot_tbl_lock);