FAILED: patch "[PATCH] NFSv4.1: Allow SEQUENCE to resize the slot table on the fly" failed to apply to 4.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
87dda67e7386ba7d2164391ea58b34e028d8157bMon Sep 17 00:00:00 2001
From: Trond Myklebust <[email protected]>
Date: Tue, 20 Nov 2012 19:49:20 -0500
Subject: [PATCH] NFSv4.1: Allow SEQUENCE to resize the slot table on the fly
Instead of an array of slots, use a singly linked list of slots that can be dynamically appended to or shrunk.
Signed-off-by Trond Myklebust <[email protected]>
fs/nfs/nfs4_fs.h +2 -2
@@ -258,10 +258,10 @@ extern int nfs4_proc_get_lease_time(struct nfs_client *clp,extern int nfs4_proc_layoutcommit (struct nfs4_layoutcommit_data *data,bool sync); -extern struct nfs4_slot *nfs4_alloc_slots (struct nfs4_slot_table *table, -u32 max_slots,gfp_t gfp_flags);extern void nfs41_set_target_slotid (struct nfs4_slot_table *tbl,u32 target_highest_slotid); +extern int nfs4_resize_slot_table (struct nfs4_slot_table *tbl, +u32 max_reqs,u32 ivalue);static inline bool is_ds_only_client (struct nfs_client *clp)
fs/nfs/nfs4proc.c +114 -60
249 lines not on this page · raw message
fs/nfs/nfs4state.c +4 -18
@@ -2025,29 +2025,15 @@ out:static int nfs4_recall_slot (struct nfs_client *clp) {struct nfs4_slot_table *fc_tbl; -struct nfs4_slot *new, *old; -int i; +u32 new_size;if (!nfs4_has_session (clp))return 0 ;nfs4_begin_drain_session (clp); - fc_tbl = &clp->cl_session->fc_slot_table; - new =nfs4_alloc_slots (fc_tbl, fc_tbl->target_highest_slotid +1 ,GFP_NOFS ); -if (!new) -return -ENOMEM ; -spin_lock (&fc_tbl->slot_tbl_lock); -for (i =0 ; i <= fc_tbl->target_highest_slotid; i++) - new[i].seq_nr = fc_tbl->slots[i].seq_nr; - old = fc_tbl->slots; - fc_tbl->slots = new; - fc_tbl->max_slots = fc_tbl->target_highest_slotid +1 ; - fc_tbl->max_slotid = fc_tbl->target_highest_slotid; - clp->cl_session->fc_attrs.max_reqs = fc_tbl->max_slots; -spin_unlock (&fc_tbl->slot_tbl_lock); - -kfree (old); -return 0 ; + fc_tbl = &clp->cl_session->fc_slot_table; + new_size = fc_tbl->server_highest_slotid +1 ; +return nfs4_resize_slot_table (fc_tbl, new_size,1 ); }static int nfs4_bind_conn_to_session (struct nfs_client *clp)
include/linux/nfs_xdr.h +1 -0
@@ -188,6 +188,7 @@ struct nfs4_channel_attrs {/* nfs41 sessions slot seqid */ struct nfs4_slot {struct nfs4_slot_table *table; +struct nfs4_slot *next;unsigned long generation;unsigned long renewal_time;u32 slot_nr;