~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/nfsd/nfs4state.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /fs/nfsd/nfs4state.c (Version linux-6.12-rc7) and /fs/nfsd/nfs4state.c (Version linux-5.2.21)


  1 /*                                                  1 /*
  2 *  Copyright (c) 2001 The Regents of the Unive      2 *  Copyright (c) 2001 The Regents of the University of Michigan.
  3 *  All rights reserved.                             3 *  All rights reserved.
  4 *                                                   4 *
  5 *  Kendrick Smith <kmsmith@umich.edu>               5 *  Kendrick Smith <kmsmith@umich.edu>
  6 *  Andy Adamson <kandros@umich.edu>                 6 *  Andy Adamson <kandros@umich.edu>
  7 *                                                   7 *
  8 *  Redistribution and use in source and binary      8 *  Redistribution and use in source and binary forms, with or without
  9 *  modification, are permitted provided that t      9 *  modification, are permitted provided that the following conditions
 10 *  are met:                                        10 *  are met:
 11 *                                                  11 *
 12 *  1. Redistributions of source code must reta     12 *  1. Redistributions of source code must retain the above copyright
 13 *     notice, this list of conditions and the      13 *     notice, this list of conditions and the following disclaimer.
 14 *  2. Redistributions in binary form must repr     14 *  2. Redistributions in binary form must reproduce the above copyright
 15 *     notice, this list of conditions and the      15 *     notice, this list of conditions and the following disclaimer in the
 16 *     documentation and/or other materials pro     16 *     documentation and/or other materials provided with the distribution.
 17 *  3. Neither the name of the University nor t     17 *  3. Neither the name of the University nor the names of its
 18 *     contributors may be used to endorse or p     18 *     contributors may be used to endorse or promote products derived
 19 *     from this software without specific prio     19 *     from this software without specific prior written permission.
 20 *                                                  20 *
 21 *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY     21 *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 22 *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO,      22 *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 23 *  MERCHANTABILITY AND FITNESS FOR A PARTICULA     23 *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 24 *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS O     24 *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 25 *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECI     25 *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 26 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT L     26 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 27 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,      27 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 28 *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND O     28 *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 29 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIAB     29 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 30 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY     30 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 31 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILIT     31 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 32 *                                                  32 *
 33 */                                                 33 */
 34                                                    34 
 35 #include <linux/file.h>                            35 #include <linux/file.h>
 36 #include <linux/fs.h>                              36 #include <linux/fs.h>
 37 #include <linux/slab.h>                            37 #include <linux/slab.h>
 38 #include <linux/namei.h>                           38 #include <linux/namei.h>
 39 #include <linux/swap.h>                            39 #include <linux/swap.h>
 40 #include <linux/pagemap.h>                         40 #include <linux/pagemap.h>
 41 #include <linux/ratelimit.h>                       41 #include <linux/ratelimit.h>
 42 #include <linux/sunrpc/svcauth_gss.h>              42 #include <linux/sunrpc/svcauth_gss.h>
 43 #include <linux/sunrpc/addr.h>                     43 #include <linux/sunrpc/addr.h>
 44 #include <linux/jhash.h>                           44 #include <linux/jhash.h>
 45 #include <linux/string_helpers.h>              << 
 46 #include <linux/fsnotify.h>                    << 
 47 #include <linux/rhashtable.h>                  << 
 48 #include <linux/nfs_ssc.h>                     << 
 49                                                << 
 50 #include "xdr4.h"                                  45 #include "xdr4.h"
 51 #include "xdr4cb.h"                                46 #include "xdr4cb.h"
 52 #include "vfs.h"                                   47 #include "vfs.h"
 53 #include "current_stateid.h"                       48 #include "current_stateid.h"
 54                                                    49 
 55 #include "netns.h"                                 50 #include "netns.h"
 56 #include "pnfs.h"                                  51 #include "pnfs.h"
 57 #include "filecache.h"                         << 
 58 #include "trace.h"                             << 
 59                                                    52 
 60 #define NFSDDBG_FACILITY                NFSDDB     53 #define NFSDDBG_FACILITY                NFSDDBG_PROC
 61                                                    54 
 62 #define all_ones {{ ~0, ~0}, ~0}               !!  55 #define all_ones {{~0,~0},~0}
 63 static const stateid_t one_stateid = {             56 static const stateid_t one_stateid = {
 64         .si_generation = ~0,                       57         .si_generation = ~0,
 65         .si_opaque = all_ones,                     58         .si_opaque = all_ones,
 66 };                                                 59 };
 67 static const stateid_t zero_stateid = {            60 static const stateid_t zero_stateid = {
 68         /* all fields zero */                      61         /* all fields zero */
 69 };                                                 62 };
 70 static const stateid_t currentstateid = {          63 static const stateid_t currentstateid = {
 71         .si_generation = 1,                        64         .si_generation = 1,
 72 };                                                 65 };
 73 static const stateid_t close_stateid = {           66 static const stateid_t close_stateid = {
 74         .si_generation = 0xffffffffU,              67         .si_generation = 0xffffffffU,
 75 };                                                 68 };
 76                                                    69 
 77 static u64 current_sessionid = 1;                  70 static u64 current_sessionid = 1;
 78                                                    71 
 79 #define ZERO_STATEID(stateid) (!memcmp((statei     72 #define ZERO_STATEID(stateid) (!memcmp((stateid), &zero_stateid, sizeof(stateid_t)))
 80 #define ONE_STATEID(stateid)  (!memcmp((statei     73 #define ONE_STATEID(stateid)  (!memcmp((stateid), &one_stateid, sizeof(stateid_t)))
 81 #define CURRENT_STATEID(stateid) (!memcmp((sta     74 #define CURRENT_STATEID(stateid) (!memcmp((stateid), &currentstateid, sizeof(stateid_t)))
 82 #define CLOSE_STATEID(stateid)  (!memcmp((stat     75 #define CLOSE_STATEID(stateid)  (!memcmp((stateid), &close_stateid, sizeof(stateid_t)))
 83                                                    76 
 84 /* forward declarations */                         77 /* forward declarations */
 85 static bool check_for_locks(struct nfs4_file *     78 static bool check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner);
 86 static void nfs4_free_ol_stateid(struct nfs4_s     79 static void nfs4_free_ol_stateid(struct nfs4_stid *stid);
 87 void nfsd4_end_grace(struct nfsd_net *nn);         80 void nfsd4_end_grace(struct nfsd_net *nn);
 88 static void _free_cpntf_state_locked(struct nf << 
 89 static void nfsd4_file_hash_remove(struct nfs4 << 
 90 static void deleg_reaper(struct nfsd_net *nn); << 
 91                                                    81 
 92 /* Locking: */                                     82 /* Locking: */
 93                                                    83 
 94 /*                                                 84 /*
 95  * Currently used for the del_recall_lru and f     85  * Currently used for the del_recall_lru and file hash table.  In an
 96  * effort to decrease the scope of the client_     86  * effort to decrease the scope of the client_mutex, this spinlock may
 97  * eventually cover more:                          87  * eventually cover more:
 98  */                                                88  */
 99 static DEFINE_SPINLOCK(state_lock);                89 static DEFINE_SPINLOCK(state_lock);
100                                                    90 
101 enum nfsd4_st_mutex_lock_subclass {                91 enum nfsd4_st_mutex_lock_subclass {
102         OPEN_STATEID_MUTEX = 0,                    92         OPEN_STATEID_MUTEX = 0,
103         LOCK_STATEID_MUTEX = 1,                    93         LOCK_STATEID_MUTEX = 1,
104 };                                                 94 };
105                                                    95 
106 /*                                                 96 /*
107  * A waitqueue for all in-progress 4.0 CLOSE o     97  * A waitqueue for all in-progress 4.0 CLOSE operations that are waiting for
108  * the refcount on the open stateid to drop.       98  * the refcount on the open stateid to drop.
109  */                                                99  */
110 static DECLARE_WAIT_QUEUE_HEAD(close_wq);         100 static DECLARE_WAIT_QUEUE_HEAD(close_wq);
111                                                   101 
112 /*                                             << 
113  * A waitqueue where a writer to clients/#/ctl << 
114  * wait for cl_rpc_users to drop to 0 and then << 
115  * unhashed.                                   << 
116  */                                            << 
117 static DECLARE_WAIT_QUEUE_HEAD(expiry_wq);     << 
118                                                << 
119 static struct kmem_cache *client_slab;            102 static struct kmem_cache *client_slab;
120 static struct kmem_cache *openowner_slab;         103 static struct kmem_cache *openowner_slab;
121 static struct kmem_cache *lockowner_slab;         104 static struct kmem_cache *lockowner_slab;
122 static struct kmem_cache *file_slab;              105 static struct kmem_cache *file_slab;
123 static struct kmem_cache *stateid_slab;           106 static struct kmem_cache *stateid_slab;
124 static struct kmem_cache *deleg_slab;             107 static struct kmem_cache *deleg_slab;
125 static struct kmem_cache *odstate_slab;           108 static struct kmem_cache *odstate_slab;
126                                                   109 
127 static void free_session(struct nfsd4_session     110 static void free_session(struct nfsd4_session *);
128                                                   111 
129 static const struct nfsd4_callback_ops nfsd4_c    112 static const struct nfsd4_callback_ops nfsd4_cb_recall_ops;
130 static const struct nfsd4_callback_ops nfsd4_c    113 static const struct nfsd4_callback_ops nfsd4_cb_notify_lock_ops;
131 static const struct nfsd4_callback_ops nfsd4_c << 
132                                                << 
133 static struct workqueue_struct *laundry_wq;    << 
134                                                << 
135 int nfsd4_create_laundry_wq(void)              << 
136 {                                              << 
137         int rc = 0;                            << 
138                                                << 
139         laundry_wq = alloc_workqueue("%s", WQ_ << 
140         if (laundry_wq == NULL)                << 
141                 rc = -ENOMEM;                  << 
142         return rc;                             << 
143 }                                              << 
144                                                << 
145 void nfsd4_destroy_laundry_wq(void)            << 
146 {                                              << 
147         destroy_workqueue(laundry_wq);         << 
148 }                                              << 
149                                                   114 
150 static bool is_session_dead(struct nfsd4_sessi    115 static bool is_session_dead(struct nfsd4_session *ses)
151 {                                                 116 {
152         return ses->se_flags & NFS4_SESSION_DE    117         return ses->se_flags & NFS4_SESSION_DEAD;
153 }                                                 118 }
154                                                   119 
155 static __be32 mark_session_dead_locked(struct     120 static __be32 mark_session_dead_locked(struct nfsd4_session *ses, int ref_held_by_me)
156 {                                                 121 {
157         if (atomic_read(&ses->se_ref) > ref_he    122         if (atomic_read(&ses->se_ref) > ref_held_by_me)
158                 return nfserr_jukebox;            123                 return nfserr_jukebox;
159         ses->se_flags |= NFS4_SESSION_DEAD;       124         ses->se_flags |= NFS4_SESSION_DEAD;
160         return nfs_ok;                            125         return nfs_ok;
161 }                                                 126 }
162                                                   127 
163 static bool is_client_expired(struct nfs4_clie    128 static bool is_client_expired(struct nfs4_client *clp)
164 {                                                 129 {
165         return clp->cl_time == 0;                 130         return clp->cl_time == 0;
166 }                                                 131 }
167                                                   132 
168 static void nfsd4_dec_courtesy_client_count(st << 
169                                         struct << 
170 {                                              << 
171         if (clp->cl_state != NFSD4_ACTIVE)     << 
172                 atomic_add_unless(&nn->nfsd_co << 
173 }                                              << 
174                                                << 
175 static __be32 get_client_locked(struct nfs4_cl    133 static __be32 get_client_locked(struct nfs4_client *clp)
176 {                                                 134 {
177         struct nfsd_net *nn = net_generic(clp-    135         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
178                                                   136 
179         lockdep_assert_held(&nn->client_lock);    137         lockdep_assert_held(&nn->client_lock);
180                                                   138 
181         if (is_client_expired(clp))               139         if (is_client_expired(clp))
182                 return nfserr_expired;            140                 return nfserr_expired;
183         atomic_inc(&clp->cl_rpc_users);        !! 141         atomic_inc(&clp->cl_refcount);
184         nfsd4_dec_courtesy_client_count(nn, cl << 
185         clp->cl_state = NFSD4_ACTIVE;          << 
186         return nfs_ok;                            142         return nfs_ok;
187 }                                                 143 }
188                                                   144 
189 /* must be called under the client_lock */        145 /* must be called under the client_lock */
190 static inline void                                146 static inline void
191 renew_client_locked(struct nfs4_client *clp)      147 renew_client_locked(struct nfs4_client *clp)
192 {                                                 148 {
193         struct nfsd_net *nn = net_generic(clp-    149         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
194                                                   150 
195         if (is_client_expired(clp)) {             151         if (is_client_expired(clp)) {
196                 WARN_ON(1);                       152                 WARN_ON(1);
197                 printk("%s: client (clientid %    153                 printk("%s: client (clientid %08x/%08x) already expired\n",
198                         __func__,                 154                         __func__,
199                         clp->cl_clientid.cl_bo    155                         clp->cl_clientid.cl_boot,
200                         clp->cl_clientid.cl_id    156                         clp->cl_clientid.cl_id);
201                 return;                           157                 return;
202         }                                         158         }
203                                                   159 
                                                   >> 160         dprintk("renewing client (clientid %08x/%08x)\n",
                                                   >> 161                         clp->cl_clientid.cl_boot,
                                                   >> 162                         clp->cl_clientid.cl_id);
204         list_move_tail(&clp->cl_lru, &nn->clie    163         list_move_tail(&clp->cl_lru, &nn->client_lru);
205         clp->cl_time = ktime_get_boottime_seco !! 164         clp->cl_time = get_seconds();
206         nfsd4_dec_courtesy_client_count(nn, cl << 
207         clp->cl_state = NFSD4_ACTIVE;          << 
208 }                                                 165 }
209                                                   166 
210 static void put_client_renew_locked(struct nfs    167 static void put_client_renew_locked(struct nfs4_client *clp)
211 {                                                 168 {
212         struct nfsd_net *nn = net_generic(clp-    169         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
213                                                   170 
214         lockdep_assert_held(&nn->client_lock);    171         lockdep_assert_held(&nn->client_lock);
215                                                   172 
216         if (!atomic_dec_and_test(&clp->cl_rpc_ !! 173         if (!atomic_dec_and_test(&clp->cl_refcount))
217                 return;                           174                 return;
218         if (!is_client_expired(clp))              175         if (!is_client_expired(clp))
219                 renew_client_locked(clp);         176                 renew_client_locked(clp);
220         else                                   << 
221                 wake_up_all(&expiry_wq);       << 
222 }                                                 177 }
223                                                   178 
224 static void put_client_renew(struct nfs4_clien    179 static void put_client_renew(struct nfs4_client *clp)
225 {                                                 180 {
226         struct nfsd_net *nn = net_generic(clp-    181         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
227                                                   182 
228         if (!atomic_dec_and_lock(&clp->cl_rpc_ !! 183         if (!atomic_dec_and_lock(&clp->cl_refcount, &nn->client_lock))
229                 return;                           184                 return;
230         if (!is_client_expired(clp))              185         if (!is_client_expired(clp))
231                 renew_client_locked(clp);         186                 renew_client_locked(clp);
232         else                                   << 
233                 wake_up_all(&expiry_wq);       << 
234         spin_unlock(&nn->client_lock);            187         spin_unlock(&nn->client_lock);
235 }                                                 188 }
236                                                   189 
237 static __be32 nfsd4_get_session_locked(struct     190 static __be32 nfsd4_get_session_locked(struct nfsd4_session *ses)
238 {                                                 191 {
239         __be32 status;                            192         __be32 status;
240                                                   193 
241         if (is_session_dead(ses))                 194         if (is_session_dead(ses))
242                 return nfserr_badsession;         195                 return nfserr_badsession;
243         status = get_client_locked(ses->se_cli    196         status = get_client_locked(ses->se_client);
244         if (status)                               197         if (status)
245                 return status;                    198                 return status;
246         atomic_inc(&ses->se_ref);                 199         atomic_inc(&ses->se_ref);
247         return nfs_ok;                            200         return nfs_ok;
248 }                                                 201 }
249                                                   202 
250 static void nfsd4_put_session_locked(struct nf    203 static void nfsd4_put_session_locked(struct nfsd4_session *ses)
251 {                                                 204 {
252         struct nfs4_client *clp = ses->se_clie    205         struct nfs4_client *clp = ses->se_client;
253         struct nfsd_net *nn = net_generic(clp-    206         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
254                                                   207 
255         lockdep_assert_held(&nn->client_lock);    208         lockdep_assert_held(&nn->client_lock);
256                                                   209 
257         if (atomic_dec_and_test(&ses->se_ref)     210         if (atomic_dec_and_test(&ses->se_ref) && is_session_dead(ses))
258                 free_session(ses);                211                 free_session(ses);
259         put_client_renew_locked(clp);             212         put_client_renew_locked(clp);
260 }                                                 213 }
261                                                   214 
262 static void nfsd4_put_session(struct nfsd4_ses    215 static void nfsd4_put_session(struct nfsd4_session *ses)
263 {                                                 216 {
264         struct nfs4_client *clp = ses->se_clie    217         struct nfs4_client *clp = ses->se_client;
265         struct nfsd_net *nn = net_generic(clp-    218         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
266                                                   219 
267         spin_lock(&nn->client_lock);              220         spin_lock(&nn->client_lock);
268         nfsd4_put_session_locked(ses);            221         nfsd4_put_session_locked(ses);
269         spin_unlock(&nn->client_lock);            222         spin_unlock(&nn->client_lock);
270 }                                                 223 }
271                                                   224 
272 static struct nfsd4_blocked_lock *                225 static struct nfsd4_blocked_lock *
273 find_blocked_lock(struct nfs4_lockowner *lo, s    226 find_blocked_lock(struct nfs4_lockowner *lo, struct knfsd_fh *fh,
274                         struct nfsd_net *nn)      227                         struct nfsd_net *nn)
275 {                                                 228 {
276         struct nfsd4_blocked_lock *cur, *found    229         struct nfsd4_blocked_lock *cur, *found = NULL;
277                                                   230 
278         spin_lock(&nn->blocked_locks_lock);       231         spin_lock(&nn->blocked_locks_lock);
279         list_for_each_entry(cur, &lo->lo_block    232         list_for_each_entry(cur, &lo->lo_blocked, nbl_list) {
280                 if (fh_match(fh, &cur->nbl_fh)    233                 if (fh_match(fh, &cur->nbl_fh)) {
281                         list_del_init(&cur->nb    234                         list_del_init(&cur->nbl_list);
282                         WARN_ON(list_empty(&cu << 
283                         list_del_init(&cur->nb    235                         list_del_init(&cur->nbl_lru);
284                         found = cur;              236                         found = cur;
285                         break;                    237                         break;
286                 }                                 238                 }
287         }                                         239         }
288         spin_unlock(&nn->blocked_locks_lock);     240         spin_unlock(&nn->blocked_locks_lock);
289         if (found)                                241         if (found)
290                 locks_delete_block(&found->nbl    242                 locks_delete_block(&found->nbl_lock);
291         return found;                             243         return found;
292 }                                                 244 }
293                                                   245 
294 static struct nfsd4_blocked_lock *                246 static struct nfsd4_blocked_lock *
295 find_or_allocate_block(struct nfs4_lockowner *    247 find_or_allocate_block(struct nfs4_lockowner *lo, struct knfsd_fh *fh,
296                         struct nfsd_net *nn)      248                         struct nfsd_net *nn)
297 {                                                 249 {
298         struct nfsd4_blocked_lock *nbl;           250         struct nfsd4_blocked_lock *nbl;
299                                                   251 
300         nbl = find_blocked_lock(lo, fh, nn);      252         nbl = find_blocked_lock(lo, fh, nn);
301         if (!nbl) {                               253         if (!nbl) {
302                 nbl = kmalloc(sizeof(*nbl), GF !! 254                 nbl= kmalloc(sizeof(*nbl), GFP_KERNEL);
303                 if (nbl) {                        255                 if (nbl) {
304                         INIT_LIST_HEAD(&nbl->n << 
305                         INIT_LIST_HEAD(&nbl->n << 
306                         fh_copy_shallow(&nbl->    256                         fh_copy_shallow(&nbl->nbl_fh, fh);
307                         locks_init_lock(&nbl->    257                         locks_init_lock(&nbl->nbl_lock);
308                         kref_init(&nbl->nbl_kr << 
309                         nfsd4_init_cb(&nbl->nb    258                         nfsd4_init_cb(&nbl->nbl_cb, lo->lo_owner.so_client,
310                                         &nfsd4    259                                         &nfsd4_cb_notify_lock_ops,
311                                         NFSPRO    260                                         NFSPROC4_CLNT_CB_NOTIFY_LOCK);
312                 }                                 261                 }
313         }                                         262         }
314         return nbl;                               263         return nbl;
315 }                                                 264 }
316                                                   265 
317 static void                                       266 static void
318 free_nbl(struct kref *kref)                    << 
319 {                                              << 
320         struct nfsd4_blocked_lock *nbl;        << 
321                                                << 
322         nbl = container_of(kref, struct nfsd4_ << 
323         locks_release_private(&nbl->nbl_lock); << 
324         kfree(nbl);                            << 
325 }                                              << 
326                                                << 
327 static void                                    << 
328 free_blocked_lock(struct nfsd4_blocked_lock *n    267 free_blocked_lock(struct nfsd4_blocked_lock *nbl)
329 {                                                 268 {
330         locks_delete_block(&nbl->nbl_lock);       269         locks_delete_block(&nbl->nbl_lock);
331         kref_put(&nbl->nbl_kref, free_nbl);    !! 270         locks_release_private(&nbl->nbl_lock);
                                                   >> 271         kfree(nbl);
332 }                                                 272 }
333                                                   273 
334 static void                                       274 static void
335 remove_blocked_locks(struct nfs4_lockowner *lo    275 remove_blocked_locks(struct nfs4_lockowner *lo)
336 {                                                 276 {
337         struct nfs4_client *clp = lo->lo_owner    277         struct nfs4_client *clp = lo->lo_owner.so_client;
338         struct nfsd_net *nn = net_generic(clp-    278         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
339         struct nfsd4_blocked_lock *nbl;           279         struct nfsd4_blocked_lock *nbl;
340         LIST_HEAD(reaplist);                      280         LIST_HEAD(reaplist);
341                                                   281 
342         /* Dequeue all blocked locks */           282         /* Dequeue all blocked locks */
343         spin_lock(&nn->blocked_locks_lock);       283         spin_lock(&nn->blocked_locks_lock);
344         while (!list_empty(&lo->lo_blocked)) {    284         while (!list_empty(&lo->lo_blocked)) {
345                 nbl = list_first_entry(&lo->lo    285                 nbl = list_first_entry(&lo->lo_blocked,
346                                         struct    286                                         struct nfsd4_blocked_lock,
347                                         nbl_li    287                                         nbl_list);
348                 list_del_init(&nbl->nbl_list);    288                 list_del_init(&nbl->nbl_list);
349                 WARN_ON(list_empty(&nbl->nbl_l << 
350                 list_move(&nbl->nbl_lru, &reap    289                 list_move(&nbl->nbl_lru, &reaplist);
351         }                                         290         }
352         spin_unlock(&nn->blocked_locks_lock);     291         spin_unlock(&nn->blocked_locks_lock);
353                                                   292 
354         /* Now free them */                       293         /* Now free them */
355         while (!list_empty(&reaplist)) {          294         while (!list_empty(&reaplist)) {
356                 nbl = list_first_entry(&reapli    295                 nbl = list_first_entry(&reaplist, struct nfsd4_blocked_lock,
357                                         nbl_lr    296                                         nbl_lru);
358                 list_del_init(&nbl->nbl_lru);     297                 list_del_init(&nbl->nbl_lru);
359                 free_blocked_lock(nbl);           298                 free_blocked_lock(nbl);
360         }                                         299         }
361 }                                                 300 }
362                                                   301 
363 static void                                       302 static void
364 nfsd4_cb_notify_lock_prepare(struct nfsd4_call    303 nfsd4_cb_notify_lock_prepare(struct nfsd4_callback *cb)
365 {                                                 304 {
366         struct nfsd4_blocked_lock       *nbl =    305         struct nfsd4_blocked_lock       *nbl = container_of(cb,
367                                                   306                                                 struct nfsd4_blocked_lock, nbl_cb);
368         locks_delete_block(&nbl->nbl_lock);       307         locks_delete_block(&nbl->nbl_lock);
369 }                                                 308 }
370                                                   309 
371 static int                                        310 static int
372 nfsd4_cb_notify_lock_done(struct nfsd4_callbac    311 nfsd4_cb_notify_lock_done(struct nfsd4_callback *cb, struct rpc_task *task)
373 {                                                 312 {
374         trace_nfsd_cb_notify_lock_done(&zero_s << 
375                                                << 
376         /*                                        313         /*
377          * Since this is just an optimization,    314          * Since this is just an optimization, we don't try very hard if it
378          * turns out not to succeed. We'll req    315          * turns out not to succeed. We'll requeue it on NFS4ERR_DELAY, and
379          * just quit trying on anything else.     316          * just quit trying on anything else.
380          */                                       317          */
381         switch (task->tk_status) {                318         switch (task->tk_status) {
382         case -NFS4ERR_DELAY:                      319         case -NFS4ERR_DELAY:
383                 rpc_delay(task, 1 * HZ);          320                 rpc_delay(task, 1 * HZ);
384                 return 0;                         321                 return 0;
385         default:                                  322         default:
386                 return 1;                         323                 return 1;
387         }                                         324         }
388 }                                                 325 }
389                                                   326 
390 static void                                       327 static void
391 nfsd4_cb_notify_lock_release(struct nfsd4_call    328 nfsd4_cb_notify_lock_release(struct nfsd4_callback *cb)
392 {                                                 329 {
393         struct nfsd4_blocked_lock       *nbl =    330         struct nfsd4_blocked_lock       *nbl = container_of(cb,
394                                                   331                                                 struct nfsd4_blocked_lock, nbl_cb);
395                                                   332 
396         free_blocked_lock(nbl);                   333         free_blocked_lock(nbl);
397 }                                                 334 }
398                                                   335 
399 static const struct nfsd4_callback_ops nfsd4_c    336 static const struct nfsd4_callback_ops nfsd4_cb_notify_lock_ops = {
400         .prepare        = nfsd4_cb_notify_lock    337         .prepare        = nfsd4_cb_notify_lock_prepare,
401         .done           = nfsd4_cb_notify_lock    338         .done           = nfsd4_cb_notify_lock_done,
402         .release        = nfsd4_cb_notify_lock    339         .release        = nfsd4_cb_notify_lock_release,
403         .opcode         = OP_CB_NOTIFY_LOCK,   << 
404 };                                                340 };
405                                                   341 
406 /*                                             << 
407  * We store the NONE, READ, WRITE, and BOTH bi << 
408  * st_{access,deny}_bmap field of the stateid, << 
409  * only what share bits are currently in force << 
410  * combinations of share bits previous opens h << 
411  * to enforce the recommendation in            << 
412  * https://datatracker.ietf.org/doc/html/rfc75 << 
413  * the server return an error if the client at << 
414  * combination of share bits not explicable by << 
415  * previous opens.                             << 
416  *                                             << 
417  * This enforcement is arguably incomplete, si << 
418  * track of access/deny bit combinations; so,  << 
419  *                                             << 
420  *      OPEN allow read, deny write            << 
421  *      OPEN allow both, deny none             << 
422  *      DOWNGRADE allow read, deny none        << 
423  *                                             << 
424  * which we should reject.                     << 
425  *                                             << 
426  * But you could also argue that our current c << 
427  * since it only exists to return NFS4ERR_INVA << 
428  * behavior.                                   << 
429  */                                            << 
430 static unsigned int                            << 
431 bmap_to_share_mode(unsigned long bmap)         << 
432 {                                              << 
433         int i;                                 << 
434         unsigned int access = 0;               << 
435                                                << 
436         for (i = 1; i < 4; i++) {              << 
437                 if (test_bit(i, &bmap))        << 
438                         access |= i;           << 
439         }                                      << 
440         return access;                         << 
441 }                                              << 
442                                                << 
443 /* set share access for a given stateid */     << 
444 static inline void                             << 
445 set_access(u32 access, struct nfs4_ol_stateid  << 
446 {                                              << 
447         unsigned char mask = 1 << access;      << 
448                                                << 
449         WARN_ON_ONCE(access > NFS4_SHARE_ACCES << 
450         stp->st_access_bmap |= mask;           << 
451 }                                              << 
452                                                << 
453 /* clear share access for a given stateid */   << 
454 static inline void                             << 
455 clear_access(u32 access, struct nfs4_ol_statei << 
456 {                                              << 
457         unsigned char mask = 1 << access;      << 
458                                                << 
459         WARN_ON_ONCE(access > NFS4_SHARE_ACCES << 
460         stp->st_access_bmap &= ~mask;          << 
461 }                                              << 
462                                                << 
463 /* test whether a given stateid has access */  << 
464 static inline bool                             << 
465 test_access(u32 access, struct nfs4_ol_stateid << 
466 {                                              << 
467         unsigned char mask = 1 << access;      << 
468                                                << 
469         return (bool)(stp->st_access_bmap & ma << 
470 }                                              << 
471                                                << 
472 /* set share deny for a given stateid */       << 
473 static inline void                             << 
474 set_deny(u32 deny, struct nfs4_ol_stateid *stp << 
475 {                                              << 
476         unsigned char mask = 1 << deny;        << 
477                                                << 
478         WARN_ON_ONCE(deny > NFS4_SHARE_DENY_BO << 
479         stp->st_deny_bmap |= mask;             << 
480 }                                              << 
481                                                << 
482 /* clear share deny for a given stateid */     << 
483 static inline void                             << 
484 clear_deny(u32 deny, struct nfs4_ol_stateid *s << 
485 {                                              << 
486         unsigned char mask = 1 << deny;        << 
487                                                << 
488         WARN_ON_ONCE(deny > NFS4_SHARE_DENY_BO << 
489         stp->st_deny_bmap &= ~mask;            << 
490 }                                              << 
491                                                << 
492 /* test whether a given stateid is denying spe << 
493 static inline bool                             << 
494 test_deny(u32 deny, struct nfs4_ol_stateid *st << 
495 {                                              << 
496         unsigned char mask = 1 << deny;        << 
497                                                << 
498         return (bool)(stp->st_deny_bmap & mask << 
499 }                                              << 
500                                                << 
501 static int nfs4_access_to_omode(u32 access)    << 
502 {                                              << 
503         switch (access & NFS4_SHARE_ACCESS_BOT << 
504         case NFS4_SHARE_ACCESS_READ:           << 
505                 return O_RDONLY;               << 
506         case NFS4_SHARE_ACCESS_WRITE:          << 
507                 return O_WRONLY;               << 
508         case NFS4_SHARE_ACCESS_BOTH:           << 
509                 return O_RDWR;                 << 
510         }                                      << 
511         WARN_ON_ONCE(1);                       << 
512         return O_RDONLY;                       << 
513 }                                              << 
514                                                << 
515 static inline int                              << 
516 access_permit_read(struct nfs4_ol_stateid *stp << 
517 {                                              << 
518         return test_access(NFS4_SHARE_ACCESS_R << 
519                 test_access(NFS4_SHARE_ACCESS_ << 
520                 test_access(NFS4_SHARE_ACCESS_ << 
521 }                                              << 
522                                                << 
523 static inline int                              << 
524 access_permit_write(struct nfs4_ol_stateid *st << 
525 {                                              << 
526         return test_access(NFS4_SHARE_ACCESS_W << 
527                 test_access(NFS4_SHARE_ACCESS_ << 
528 }                                              << 
529                                                << 
530 static inline struct nfs4_stateowner *            342 static inline struct nfs4_stateowner *
531 nfs4_get_stateowner(struct nfs4_stateowner *so    343 nfs4_get_stateowner(struct nfs4_stateowner *sop)
532 {                                                 344 {
533         atomic_inc(&sop->so_count);               345         atomic_inc(&sop->so_count);
534         return sop;                               346         return sop;
535 }                                                 347 }
536                                                   348 
537 static int                                        349 static int
538 same_owner_str(struct nfs4_stateowner *sop, st    350 same_owner_str(struct nfs4_stateowner *sop, struct xdr_netobj *owner)
539 {                                                 351 {
540         return (sop->so_owner.len == owner->le    352         return (sop->so_owner.len == owner->len) &&
541                 0 == memcmp(sop->so_owner.data    353                 0 == memcmp(sop->so_owner.data, owner->data, owner->len);
542 }                                                 354 }
543                                                   355 
544 static struct nfs4_openowner *                    356 static struct nfs4_openowner *
545 find_openstateowner_str(unsigned int hashval,  !! 357 find_openstateowner_str_locked(unsigned int hashval, struct nfsd4_open *open,
546                         struct nfs4_client *cl    358                         struct nfs4_client *clp)
547 {                                                 359 {
548         struct nfs4_stateowner *so;               360         struct nfs4_stateowner *so;
549                                                   361 
550         lockdep_assert_held(&clp->cl_lock);       362         lockdep_assert_held(&clp->cl_lock);
551                                                   363 
552         list_for_each_entry(so, &clp->cl_owner    364         list_for_each_entry(so, &clp->cl_ownerstr_hashtbl[hashval],
553                             so_strhash) {         365                             so_strhash) {
554                 if (!so->so_is_open_owner)        366                 if (!so->so_is_open_owner)
555                         continue;                 367                         continue;
556                 if (same_owner_str(so, &open->    368                 if (same_owner_str(so, &open->op_owner))
557                         return openowner(nfs4_    369                         return openowner(nfs4_get_stateowner(so));
558         }                                         370         }
559         return NULL;                              371         return NULL;
560 }                                                 372 }
561                                                   373 
                                                   >> 374 static struct nfs4_openowner *
                                                   >> 375 find_openstateowner_str(unsigned int hashval, struct nfsd4_open *open,
                                                   >> 376                         struct nfs4_client *clp)
                                                   >> 377 {
                                                   >> 378         struct nfs4_openowner *oo;
                                                   >> 379 
                                                   >> 380         spin_lock(&clp->cl_lock);
                                                   >> 381         oo = find_openstateowner_str_locked(hashval, open, clp);
                                                   >> 382         spin_unlock(&clp->cl_lock);
                                                   >> 383         return oo;
                                                   >> 384 }
                                                   >> 385 
562 static inline u32                                 386 static inline u32
563 opaque_hashval(const void *ptr, int nbytes)       387 opaque_hashval(const void *ptr, int nbytes)
564 {                                                 388 {
565         unsigned char *cptr = (unsigned char *    389         unsigned char *cptr = (unsigned char *) ptr;
566                                                   390 
567         u32 x = 0;                                391         u32 x = 0;
568         while (nbytes--) {                        392         while (nbytes--) {
569                 x *= 37;                          393                 x *= 37;
570                 x += *cptr++;                     394                 x += *cptr++;
571         }                                         395         }
572         return x;                                 396         return x;
573 }                                                 397 }
574                                                   398 
575 static void nfsd4_free_file_rcu(struct rcu_hea    399 static void nfsd4_free_file_rcu(struct rcu_head *rcu)
576 {                                                 400 {
577         struct nfs4_file *fp = container_of(rc    401         struct nfs4_file *fp = container_of(rcu, struct nfs4_file, fi_rcu);
578                                                   402 
579         kmem_cache_free(file_slab, fp);           403         kmem_cache_free(file_slab, fp);
580 }                                                 404 }
581                                                   405 
582 void                                              406 void
583 put_nfs4_file(struct nfs4_file *fi)               407 put_nfs4_file(struct nfs4_file *fi)
584 {                                                 408 {
585         if (refcount_dec_and_test(&fi->fi_ref) !! 409         might_lock(&state_lock);
586                 nfsd4_file_hash_remove(fi);    !! 410 
                                                   >> 411         if (refcount_dec_and_lock(&fi->fi_ref, &state_lock)) {
                                                   >> 412                 hlist_del_rcu(&fi->fi_hash);
                                                   >> 413                 spin_unlock(&state_lock);
587                 WARN_ON_ONCE(!list_empty(&fi->    414                 WARN_ON_ONCE(!list_empty(&fi->fi_clnt_odstate));
588                 WARN_ON_ONCE(!list_empty(&fi->    415                 WARN_ON_ONCE(!list_empty(&fi->fi_delegations));
589                 call_rcu(&fi->fi_rcu, nfsd4_fr    416                 call_rcu(&fi->fi_rcu, nfsd4_free_file_rcu);
590         }                                         417         }
591 }                                                 418 }
592                                                   419 
593 static struct nfsd_file *                      !! 420 static struct file *
                                                   >> 421 __nfs4_get_fd(struct nfs4_file *f, int oflag)
                                                   >> 422 {
                                                   >> 423         if (f->fi_fds[oflag])
                                                   >> 424                 return get_file(f->fi_fds[oflag]);
                                                   >> 425         return NULL;
                                                   >> 426 }
                                                   >> 427 
                                                   >> 428 static struct file *
594 find_writeable_file_locked(struct nfs4_file *f    429 find_writeable_file_locked(struct nfs4_file *f)
595 {                                                 430 {
596         struct nfsd_file *ret;                 !! 431         struct file *ret;
597                                                   432 
598         lockdep_assert_held(&f->fi_lock);         433         lockdep_assert_held(&f->fi_lock);
599                                                   434 
600         ret = nfsd_file_get(f->fi_fds[O_WRONLY !! 435         ret = __nfs4_get_fd(f, O_WRONLY);
601         if (!ret)                                 436         if (!ret)
602                 ret = nfsd_file_get(f->fi_fds[ !! 437                 ret = __nfs4_get_fd(f, O_RDWR);
603         return ret;                               438         return ret;
604 }                                                 439 }
605                                                   440 
606 static struct nfsd_file *                      !! 441 static struct file *
607 find_writeable_file(struct nfs4_file *f)          442 find_writeable_file(struct nfs4_file *f)
608 {                                                 443 {
609         struct nfsd_file *ret;                 !! 444         struct file *ret;
610                                                   445 
611         spin_lock(&f->fi_lock);                   446         spin_lock(&f->fi_lock);
612         ret = find_writeable_file_locked(f);      447         ret = find_writeable_file_locked(f);
613         spin_unlock(&f->fi_lock);                 448         spin_unlock(&f->fi_lock);
614                                                   449 
615         return ret;                               450         return ret;
616 }                                                 451 }
617                                                   452 
618 static struct nfsd_file *                      !! 453 static struct file *find_readable_file_locked(struct nfs4_file *f)
619 find_readable_file_locked(struct nfs4_file *f) << 
620 {                                                 454 {
621         struct nfsd_file *ret;                 !! 455         struct file *ret;
622                                                   456 
623         lockdep_assert_held(&f->fi_lock);         457         lockdep_assert_held(&f->fi_lock);
624                                                   458 
625         ret = nfsd_file_get(f->fi_fds[O_RDONLY !! 459         ret = __nfs4_get_fd(f, O_RDONLY);
626         if (!ret)                                 460         if (!ret)
627                 ret = nfsd_file_get(f->fi_fds[ !! 461                 ret = __nfs4_get_fd(f, O_RDWR);
628         return ret;                               462         return ret;
629 }                                                 463 }
630                                                   464 
631 static struct nfsd_file *                      !! 465 static struct file *
632 find_readable_file(struct nfs4_file *f)           466 find_readable_file(struct nfs4_file *f)
633 {                                                 467 {
634         struct nfsd_file *ret;                 !! 468         struct file *ret;
635                                                   469 
636         spin_lock(&f->fi_lock);                   470         spin_lock(&f->fi_lock);
637         ret = find_readable_file_locked(f);       471         ret = find_readable_file_locked(f);
638         spin_unlock(&f->fi_lock);                 472         spin_unlock(&f->fi_lock);
639                                                   473 
640         return ret;                               474         return ret;
641 }                                                 475 }
642                                                   476 
643 static struct nfsd_file *                      !! 477 struct file *
644 find_rw_file(struct nfs4_file *f)              << 
645 {                                              << 
646         struct nfsd_file *ret;                 << 
647                                                << 
648         spin_lock(&f->fi_lock);                << 
649         ret = nfsd_file_get(f->fi_fds[O_RDWR]) << 
650         spin_unlock(&f->fi_lock);              << 
651                                                << 
652         return ret;                            << 
653 }                                              << 
654                                                << 
655 struct nfsd_file *                             << 
656 find_any_file(struct nfs4_file *f)                478 find_any_file(struct nfs4_file *f)
657 {                                                 479 {
658         struct nfsd_file *ret;                 !! 480         struct file *ret;
659                                                   481 
660         if (!f)                                << 
661                 return NULL;                   << 
662         spin_lock(&f->fi_lock);                   482         spin_lock(&f->fi_lock);
663         ret = nfsd_file_get(f->fi_fds[O_RDWR]) !! 483         ret = __nfs4_get_fd(f, O_RDWR);
664         if (!ret) {                               484         if (!ret) {
665                 ret = nfsd_file_get(f->fi_fds[ !! 485                 ret = __nfs4_get_fd(f, O_WRONLY);
666                 if (!ret)                         486                 if (!ret)
667                         ret = nfsd_file_get(f- !! 487                         ret = __nfs4_get_fd(f, O_RDONLY);
668         }                                         488         }
669         spin_unlock(&f->fi_lock);                 489         spin_unlock(&f->fi_lock);
670         return ret;                               490         return ret;
671 }                                                 491 }
672                                                   492 
673 static struct nfsd_file *find_any_file_locked( << 
674 {                                              << 
675         lockdep_assert_held(&f->fi_lock);      << 
676                                                << 
677         if (f->fi_fds[O_RDWR])                 << 
678                 return f->fi_fds[O_RDWR];      << 
679         if (f->fi_fds[O_WRONLY])               << 
680                 return f->fi_fds[O_WRONLY];    << 
681         if (f->fi_fds[O_RDONLY])               << 
682                 return f->fi_fds[O_RDONLY];    << 
683         return NULL;                           << 
684 }                                              << 
685                                                << 
686 static atomic_long_t num_delegations;             493 static atomic_long_t num_delegations;
687 unsigned long max_delegations;                    494 unsigned long max_delegations;
688                                                   495 
689 /*                                                496 /*
690  * Open owner state (share locks)                 497  * Open owner state (share locks)
691  */                                               498  */
692                                                   499 
693 /* hash tables for lock and open owners */        500 /* hash tables for lock and open owners */
694 #define OWNER_HASH_BITS              8            501 #define OWNER_HASH_BITS              8
695 #define OWNER_HASH_SIZE             (1 << OWNE    502 #define OWNER_HASH_SIZE             (1 << OWNER_HASH_BITS)
696 #define OWNER_HASH_MASK             (OWNER_HAS    503 #define OWNER_HASH_MASK             (OWNER_HASH_SIZE - 1)
697                                                   504 
698 static unsigned int ownerstr_hashval(struct xd    505 static unsigned int ownerstr_hashval(struct xdr_netobj *ownername)
699 {                                                 506 {
700         unsigned int ret;                         507         unsigned int ret;
701                                                   508 
702         ret = opaque_hashval(ownername->data,     509         ret = opaque_hashval(ownername->data, ownername->len);
703         return ret & OWNER_HASH_MASK;             510         return ret & OWNER_HASH_MASK;
704 }                                                 511 }
705                                                   512 
706 static struct rhltable nfs4_file_rhltable ____ !! 513 /* hash table for nfs4_file */
707                                                !! 514 #define FILE_HASH_BITS                   8
708 static const struct rhashtable_params nfs4_fil !! 515 #define FILE_HASH_SIZE                  (1 << FILE_HASH_BITS)
709         .key_len                = sizeof_field << 
710         .key_offset             = offsetof(str << 
711         .head_offset            = offsetof(str << 
712                                                << 
713         /*                                     << 
714          * Start with a single page hash table << 
715          * on light workloads.                 << 
716          */                                    << 
717         .min_size               = 256,         << 
718         .automatic_shrinking    = true,        << 
719 };                                             << 
720                                                   516 
721 /*                                             !! 517 static unsigned int nfsd_fh_hashval(struct knfsd_fh *fh)
722  * Check if courtesy clients have conflicting  << 
723  *                                             << 
724  * access:  is op_share_access if share_access << 
725  *          Check if access mode, op_share_acc << 
726  *          the current deny mode of the file  << 
727  * access:  is op_share_deny if share_access i << 
728  *          Check if the deny mode, op_share_d << 
729  *          current access of the file 'fp'.   << 
730  * stp:     skip checking this entry.          << 
731  * new_stp: normal open, not open upgrade.     << 
732  *                                             << 
733  * Function returns:                           << 
734  *      false - access/deny mode conflict with << 
735  *      true  - no conflict or conflict with c << 
736  */                                            << 
737 static bool                                    << 
738 nfs4_resolve_deny_conflicts_locked(struct nfs4 << 
739                 struct nfs4_ol_stateid *stp, u << 
740 {                                                 518 {
741         struct nfs4_ol_stateid *st;            !! 519         return jhash2(fh->fh_base.fh_pad, XDR_QUADLEN(fh->fh_size), 0);
742         bool resolvable = true;                !! 520 }
743         unsigned char bmap;                    << 
744         struct nfsd_net *nn;                   << 
745         struct nfs4_client *clp;               << 
746                                                   521 
747         lockdep_assert_held(&fp->fi_lock);     !! 522 static unsigned int file_hashval(struct knfsd_fh *fh)
748         list_for_each_entry(st, &fp->fi_statei !! 523 {
749                 /* ignore lock stateid */      !! 524         return nfsd_fh_hashval(fh) & (FILE_HASH_SIZE - 1);
750                 if (st->st_openstp)            << 
751                         continue;              << 
752                 if (st == stp && new_stp)      << 
753                         continue;              << 
754                 /* check file access against d << 
755                 bmap = share_access ? st->st_d << 
756                 if (!(access & bmap_to_share_m << 
757                         continue;              << 
758                 clp = st->st_stid.sc_client;   << 
759                 if (try_to_expire_client(clp)) << 
760                         continue;              << 
761                 resolvable = false;            << 
762                 break;                         << 
763         }                                      << 
764         if (resolvable) {                      << 
765                 clp = stp->st_stid.sc_client;  << 
766                 nn = net_generic(clp->net, nfs << 
767                 mod_delayed_work(laundry_wq, & << 
768         }                                      << 
769         return resolvable;                     << 
770 }                                                 525 }
771                                                   526 
                                                   >> 527 static struct hlist_head file_hashtbl[FILE_HASH_SIZE];
                                                   >> 528 
772 static void                                       529 static void
773 __nfs4_file_get_access(struct nfs4_file *fp, u    530 __nfs4_file_get_access(struct nfs4_file *fp, u32 access)
774 {                                                 531 {
775         lockdep_assert_held(&fp->fi_lock);        532         lockdep_assert_held(&fp->fi_lock);
776                                                   533 
777         if (access & NFS4_SHARE_ACCESS_WRITE)     534         if (access & NFS4_SHARE_ACCESS_WRITE)
778                 atomic_inc(&fp->fi_access[O_WR    535                 atomic_inc(&fp->fi_access[O_WRONLY]);
779         if (access & NFS4_SHARE_ACCESS_READ)      536         if (access & NFS4_SHARE_ACCESS_READ)
780                 atomic_inc(&fp->fi_access[O_RD    537                 atomic_inc(&fp->fi_access[O_RDONLY]);
781 }                                                 538 }
782                                                   539 
783 static __be32                                     540 static __be32
784 nfs4_file_get_access(struct nfs4_file *fp, u32    541 nfs4_file_get_access(struct nfs4_file *fp, u32 access)
785 {                                                 542 {
786         lockdep_assert_held(&fp->fi_lock);        543         lockdep_assert_held(&fp->fi_lock);
787                                                   544 
788         /* Does this access mode make sense? *    545         /* Does this access mode make sense? */
789         if (access & ~NFS4_SHARE_ACCESS_BOTH)     546         if (access & ~NFS4_SHARE_ACCESS_BOTH)
790                 return nfserr_inval;              547                 return nfserr_inval;
791                                                   548 
792         /* Does it conflict with a deny mode a    549         /* Does it conflict with a deny mode already set? */
793         if ((access & fp->fi_share_deny) != 0)    550         if ((access & fp->fi_share_deny) != 0)
794                 return nfserr_share_denied;       551                 return nfserr_share_denied;
795                                                   552 
796         __nfs4_file_get_access(fp, access);       553         __nfs4_file_get_access(fp, access);
797         return nfs_ok;                            554         return nfs_ok;
798 }                                                 555 }
799                                                   556 
800 static __be32 nfs4_file_check_deny(struct nfs4    557 static __be32 nfs4_file_check_deny(struct nfs4_file *fp, u32 deny)
801 {                                                 558 {
802         /* Common case is that there is no den    559         /* Common case is that there is no deny mode. */
803         if (deny) {                               560         if (deny) {
804                 /* Does this deny mode make se    561                 /* Does this deny mode make sense? */
805                 if (deny & ~NFS4_SHARE_DENY_BO    562                 if (deny & ~NFS4_SHARE_DENY_BOTH)
806                         return nfserr_inval;      563                         return nfserr_inval;
807                                                   564 
808                 if ((deny & NFS4_SHARE_DENY_RE    565                 if ((deny & NFS4_SHARE_DENY_READ) &&
809                     atomic_read(&fp->fi_access    566                     atomic_read(&fp->fi_access[O_RDONLY]))
810                         return nfserr_share_de    567                         return nfserr_share_denied;
811                                                   568 
812                 if ((deny & NFS4_SHARE_DENY_WR    569                 if ((deny & NFS4_SHARE_DENY_WRITE) &&
813                     atomic_read(&fp->fi_access    570                     atomic_read(&fp->fi_access[O_WRONLY]))
814                         return nfserr_share_de    571                         return nfserr_share_denied;
815         }                                         572         }
816         return nfs_ok;                            573         return nfs_ok;
817 }                                                 574 }
818                                                   575 
819 static void __nfs4_file_put_access(struct nfs4    576 static void __nfs4_file_put_access(struct nfs4_file *fp, int oflag)
820 {                                                 577 {
821         might_lock(&fp->fi_lock);                 578         might_lock(&fp->fi_lock);
822                                                   579 
823         if (atomic_dec_and_lock(&fp->fi_access    580         if (atomic_dec_and_lock(&fp->fi_access[oflag], &fp->fi_lock)) {
824                 struct nfsd_file *f1 = NULL;   !! 581                 struct file *f1 = NULL;
825                 struct nfsd_file *f2 = NULL;   !! 582                 struct file *f2 = NULL;
826                                                   583 
827                 swap(f1, fp->fi_fds[oflag]);      584                 swap(f1, fp->fi_fds[oflag]);
828                 if (atomic_read(&fp->fi_access    585                 if (atomic_read(&fp->fi_access[1 - oflag]) == 0)
829                         swap(f2, fp->fi_fds[O_    586                         swap(f2, fp->fi_fds[O_RDWR]);
830                 spin_unlock(&fp->fi_lock);        587                 spin_unlock(&fp->fi_lock);
831                 if (f1)                           588                 if (f1)
832                         nfsd_file_put(f1);     !! 589                         fput(f1);
833                 if (f2)                           590                 if (f2)
834                         nfsd_file_put(f2);     !! 591                         fput(f2);
835         }                                         592         }
836 }                                                 593 }
837                                                   594 
838 static void nfs4_file_put_access(struct nfs4_f    595 static void nfs4_file_put_access(struct nfs4_file *fp, u32 access)
839 {                                                 596 {
840         WARN_ON_ONCE(access & ~NFS4_SHARE_ACCE    597         WARN_ON_ONCE(access & ~NFS4_SHARE_ACCESS_BOTH);
841                                                   598 
842         if (access & NFS4_SHARE_ACCESS_WRITE)     599         if (access & NFS4_SHARE_ACCESS_WRITE)
843                 __nfs4_file_put_access(fp, O_W    600                 __nfs4_file_put_access(fp, O_WRONLY);
844         if (access & NFS4_SHARE_ACCESS_READ)      601         if (access & NFS4_SHARE_ACCESS_READ)
845                 __nfs4_file_put_access(fp, O_R    602                 __nfs4_file_put_access(fp, O_RDONLY);
846 }                                                 603 }
847                                                   604 
848 /*                                                605 /*
849  * Allocate a new open/delegation state counte    606  * Allocate a new open/delegation state counter. This is needed for
850  * pNFS for proper return on close semantics.     607  * pNFS for proper return on close semantics.
851  *                                                608  *
852  * Note that we only allocate it for pNFS-enab    609  * Note that we only allocate it for pNFS-enabled exports, otherwise
853  * all pointers to struct nfs4_clnt_odstate ar    610  * all pointers to struct nfs4_clnt_odstate are always NULL.
854  */                                               611  */
855 static struct nfs4_clnt_odstate *                 612 static struct nfs4_clnt_odstate *
856 alloc_clnt_odstate(struct nfs4_client *clp)       613 alloc_clnt_odstate(struct nfs4_client *clp)
857 {                                                 614 {
858         struct nfs4_clnt_odstate *co;             615         struct nfs4_clnt_odstate *co;
859                                                   616 
860         co = kmem_cache_zalloc(odstate_slab, G    617         co = kmem_cache_zalloc(odstate_slab, GFP_KERNEL);
861         if (co) {                                 618         if (co) {
862                 co->co_client = clp;              619                 co->co_client = clp;
863                 refcount_set(&co->co_odcount,     620                 refcount_set(&co->co_odcount, 1);
864         }                                         621         }
865         return co;                                622         return co;
866 }                                                 623 }
867                                                   624 
868 static void                                       625 static void
869 hash_clnt_odstate_locked(struct nfs4_clnt_odst    626 hash_clnt_odstate_locked(struct nfs4_clnt_odstate *co)
870 {                                                 627 {
871         struct nfs4_file *fp = co->co_file;       628         struct nfs4_file *fp = co->co_file;
872                                                   629 
873         lockdep_assert_held(&fp->fi_lock);        630         lockdep_assert_held(&fp->fi_lock);
874         list_add(&co->co_perfile, &fp->fi_clnt    631         list_add(&co->co_perfile, &fp->fi_clnt_odstate);
875 }                                                 632 }
876                                                   633 
877 static inline void                                634 static inline void
878 get_clnt_odstate(struct nfs4_clnt_odstate *co)    635 get_clnt_odstate(struct nfs4_clnt_odstate *co)
879 {                                                 636 {
880         if (co)                                   637         if (co)
881                 refcount_inc(&co->co_odcount);    638                 refcount_inc(&co->co_odcount);
882 }                                                 639 }
883                                                   640 
884 static void                                       641 static void
885 put_clnt_odstate(struct nfs4_clnt_odstate *co)    642 put_clnt_odstate(struct nfs4_clnt_odstate *co)
886 {                                                 643 {
887         struct nfs4_file *fp;                     644         struct nfs4_file *fp;
888                                                   645 
889         if (!co)                                  646         if (!co)
890                 return;                           647                 return;
891                                                   648 
892         fp = co->co_file;                         649         fp = co->co_file;
893         if (refcount_dec_and_lock(&co->co_odco    650         if (refcount_dec_and_lock(&co->co_odcount, &fp->fi_lock)) {
894                 list_del(&co->co_perfile);        651                 list_del(&co->co_perfile);
895                 spin_unlock(&fp->fi_lock);        652                 spin_unlock(&fp->fi_lock);
896                                                   653 
897                 nfsd4_return_all_file_layouts(    654                 nfsd4_return_all_file_layouts(co->co_client, fp);
898                 kmem_cache_free(odstate_slab,     655                 kmem_cache_free(odstate_slab, co);
899         }                                         656         }
900 }                                                 657 }
901                                                   658 
902 static struct nfs4_clnt_odstate *                 659 static struct nfs4_clnt_odstate *
903 find_or_hash_clnt_odstate(struct nfs4_file *fp    660 find_or_hash_clnt_odstate(struct nfs4_file *fp, struct nfs4_clnt_odstate *new)
904 {                                                 661 {
905         struct nfs4_clnt_odstate *co;             662         struct nfs4_clnt_odstate *co;
906         struct nfs4_client *cl;                   663         struct nfs4_client *cl;
907                                                   664 
908         if (!new)                                 665         if (!new)
909                 return NULL;                      666                 return NULL;
910                                                   667 
911         cl = new->co_client;                      668         cl = new->co_client;
912                                                   669 
913         spin_lock(&fp->fi_lock);                  670         spin_lock(&fp->fi_lock);
914         list_for_each_entry(co, &fp->fi_clnt_o    671         list_for_each_entry(co, &fp->fi_clnt_odstate, co_perfile) {
915                 if (co->co_client == cl) {        672                 if (co->co_client == cl) {
916                         get_clnt_odstate(co);     673                         get_clnt_odstate(co);
917                         goto out;                 674                         goto out;
918                 }                                 675                 }
919         }                                         676         }
920         co = new;                                 677         co = new;
921         co->co_file = fp;                         678         co->co_file = fp;
922         hash_clnt_odstate_locked(new);            679         hash_clnt_odstate_locked(new);
923 out:                                              680 out:
924         spin_unlock(&fp->fi_lock);                681         spin_unlock(&fp->fi_lock);
925         return co;                                682         return co;
926 }                                                 683 }
927                                                   684 
928 struct nfs4_stid *nfs4_alloc_stid(struct nfs4_    685 struct nfs4_stid *nfs4_alloc_stid(struct nfs4_client *cl, struct kmem_cache *slab,
929                                   void (*sc_fr    686                                   void (*sc_free)(struct nfs4_stid *))
930 {                                                 687 {
931         struct nfs4_stid *stid;                   688         struct nfs4_stid *stid;
932         int new_id;                               689         int new_id;
933                                                   690 
934         stid = kmem_cache_zalloc(slab, GFP_KER    691         stid = kmem_cache_zalloc(slab, GFP_KERNEL);
935         if (!stid)                                692         if (!stid)
936                 return NULL;                      693                 return NULL;
937                                                   694 
938         idr_preload(GFP_KERNEL);                  695         idr_preload(GFP_KERNEL);
939         spin_lock(&cl->cl_lock);                  696         spin_lock(&cl->cl_lock);
940         /* Reserving 0 for start of file in nf !! 697         new_id = idr_alloc_cyclic(&cl->cl_stateids, stid, 0, 0, GFP_NOWAIT);
941         new_id = idr_alloc_cyclic(&cl->cl_stat << 
942         spin_unlock(&cl->cl_lock);                698         spin_unlock(&cl->cl_lock);
943         idr_preload_end();                        699         idr_preload_end();
944         if (new_id < 0)                           700         if (new_id < 0)
945                 goto out_free;                    701                 goto out_free;
946                                                   702 
947         stid->sc_free = sc_free;                  703         stid->sc_free = sc_free;
948         stid->sc_client = cl;                     704         stid->sc_client = cl;
949         stid->sc_stateid.si_opaque.so_id = new    705         stid->sc_stateid.si_opaque.so_id = new_id;
950         stid->sc_stateid.si_opaque.so_clid = c    706         stid->sc_stateid.si_opaque.so_clid = cl->cl_clientid;
951         /* Will be incremented before return t    707         /* Will be incremented before return to client: */
952         refcount_set(&stid->sc_count, 1);         708         refcount_set(&stid->sc_count, 1);
953         spin_lock_init(&stid->sc_lock);           709         spin_lock_init(&stid->sc_lock);
954         INIT_LIST_HEAD(&stid->sc_cp_list);     << 
955                                                   710 
956         /*                                        711         /*
957          * It shouldn't be a problem to reuse     712          * It shouldn't be a problem to reuse an opaque stateid value.
958          * I don't think it is for 4.1.  But w    713          * I don't think it is for 4.1.  But with 4.0 I worry that, for
959          * example, a stray write retransmissi    714          * example, a stray write retransmission could be accepted by
960          * the server when it should have been    715          * the server when it should have been rejected.  Therefore,
961          * adopt a trick from the sctp code to    716          * adopt a trick from the sctp code to attempt to maximize the
962          * amount of time until an id is reuse    717          * amount of time until an id is reused, by ensuring they always
963          * "increase" (mod INT_MAX):              718          * "increase" (mod INT_MAX):
964          */                                       719          */
965         return stid;                              720         return stid;
966 out_free:                                         721 out_free:
967         kmem_cache_free(slab, stid);              722         kmem_cache_free(slab, stid);
968         return NULL;                              723         return NULL;
969 }                                                 724 }
970                                                   725 
971 /*                                                726 /*
972  * Create a unique stateid_t to represent each    727  * Create a unique stateid_t to represent each COPY.
973  */                                               728  */
974 static int nfs4_init_cp_state(struct nfsd_net  !! 729 int nfs4_init_cp_state(struct nfsd_net *nn, struct nfsd4_copy *copy)
975                               unsigned char cs << 
976 {                                                 730 {
977         int new_id;                               731         int new_id;
978                                                   732 
979         stid->cs_stid.si_opaque.so_clid.cl_boo << 
980         stid->cs_stid.si_opaque.so_clid.cl_id  << 
981                                                << 
982         idr_preload(GFP_KERNEL);                  733         idr_preload(GFP_KERNEL);
983         spin_lock(&nn->s2s_cp_lock);              734         spin_lock(&nn->s2s_cp_lock);
984         new_id = idr_alloc_cyclic(&nn->s2s_cp_ !! 735         new_id = idr_alloc_cyclic(&nn->s2s_cp_stateids, copy, 0, 0, GFP_NOWAIT);
985         stid->cs_stid.si_opaque.so_id = new_id << 
986         stid->cs_stid.si_generation = 1;       << 
987         spin_unlock(&nn->s2s_cp_lock);            736         spin_unlock(&nn->s2s_cp_lock);
988         idr_preload_end();                        737         idr_preload_end();
989         if (new_id < 0)                           738         if (new_id < 0)
990                 return 0;                         739                 return 0;
991         stid->cs_type = cs_type;               !! 740         copy->cp_stateid.si_opaque.so_id = new_id;
                                                   >> 741         copy->cp_stateid.si_opaque.so_clid.cl_boot = nn->boot_time;
                                                   >> 742         copy->cp_stateid.si_opaque.so_clid.cl_id = nn->s2s_cp_cl_id;
992         return 1;                                 743         return 1;
993 }                                                 744 }
994                                                   745 
995 int nfs4_init_copy_state(struct nfsd_net *nn,  !! 746 void nfs4_free_cp_state(struct nfsd4_copy *copy)
996 {                                              << 
997         return nfs4_init_cp_state(nn, &copy->c << 
998 }                                              << 
999                                                << 
1000 struct nfs4_cpntf_state *nfs4_alloc_init_cpnt << 
1001                                               << 
1002 {                                             << 
1003         struct nfs4_cpntf_state *cps;         << 
1004                                               << 
1005         cps = kzalloc(sizeof(struct nfs4_cpnt << 
1006         if (!cps)                             << 
1007                 return NULL;                  << 
1008         cps->cpntf_time = ktime_get_boottime_ << 
1009         refcount_set(&cps->cp_stateid.cs_coun << 
1010         if (!nfs4_init_cp_state(nn, &cps->cp_ << 
1011                 goto out_free;                << 
1012         spin_lock(&nn->s2s_cp_lock);          << 
1013         list_add(&cps->cp_list, &p_stid->sc_c << 
1014         spin_unlock(&nn->s2s_cp_lock);        << 
1015         return cps;                           << 
1016 out_free:                                     << 
1017         kfree(cps);                           << 
1018         return NULL;                          << 
1019 }                                             << 
1020                                               << 
1021 void nfs4_free_copy_state(struct nfsd4_copy * << 
1022 {                                                747 {
1023         struct nfsd_net *nn;                     748         struct nfsd_net *nn;
1024                                                  749 
1025         if (copy->cp_stateid.cs_type != NFS4_ << 
1026                 return;                       << 
1027         nn = net_generic(copy->cp_clp->net, n    750         nn = net_generic(copy->cp_clp->net, nfsd_net_id);
1028         spin_lock(&nn->s2s_cp_lock);             751         spin_lock(&nn->s2s_cp_lock);
1029         idr_remove(&nn->s2s_cp_stateids,      !! 752         idr_remove(&nn->s2s_cp_stateids, copy->cp_stateid.si_opaque.so_id);
1030                    copy->cp_stateid.cs_stid.s << 
1031         spin_unlock(&nn->s2s_cp_lock);        << 
1032 }                                             << 
1033                                               << 
1034 static void nfs4_free_cpntf_statelist(struct  << 
1035 {                                             << 
1036         struct nfs4_cpntf_state *cps;         << 
1037         struct nfsd_net *nn;                  << 
1038                                               << 
1039         nn = net_generic(net, nfsd_net_id);   << 
1040         spin_lock(&nn->s2s_cp_lock);          << 
1041         while (!list_empty(&stid->sc_cp_list) << 
1042                 cps = list_first_entry(&stid- << 
1043                                        struct << 
1044                 _free_cpntf_state_locked(nn,  << 
1045         }                                     << 
1046         spin_unlock(&nn->s2s_cp_lock);           753         spin_unlock(&nn->s2s_cp_lock);
1047 }                                                754 }
1048                                                  755 
1049 static struct nfs4_ol_stateid * nfs4_alloc_op    756 static struct nfs4_ol_stateid * nfs4_alloc_open_stateid(struct nfs4_client *clp)
1050 {                                                757 {
1051         struct nfs4_stid *stid;                  758         struct nfs4_stid *stid;
1052                                                  759 
1053         stid = nfs4_alloc_stid(clp, stateid_s    760         stid = nfs4_alloc_stid(clp, stateid_slab, nfs4_free_ol_stateid);
1054         if (!stid)                               761         if (!stid)
1055                 return NULL;                     762                 return NULL;
1056                                                  763 
1057         return openlockstateid(stid);            764         return openlockstateid(stid);
1058 }                                                765 }
1059                                                  766 
1060 static void nfs4_free_deleg(struct nfs4_stid     767 static void nfs4_free_deleg(struct nfs4_stid *stid)
1061 {                                                768 {
1062         struct nfs4_delegation *dp = delegsta << 
1063                                               << 
1064         WARN_ON_ONCE(!list_empty(&stid->sc_cp << 
1065         WARN_ON_ONCE(!list_empty(&dp->dl_perf << 
1066         WARN_ON_ONCE(!list_empty(&dp->dl_perc << 
1067         WARN_ON_ONCE(!list_empty(&dp->dl_reca << 
1068         kmem_cache_free(deleg_slab, stid);       769         kmem_cache_free(deleg_slab, stid);
1069         atomic_long_dec(&num_delegations);       770         atomic_long_dec(&num_delegations);
1070 }                                                771 }
1071                                                  772 
1072 /*                                               773 /*
1073  * When we recall a delegation, we should be     774  * When we recall a delegation, we should be careful not to hand it
1074  * out again straight away.                      775  * out again straight away.
1075  * To ensure this we keep a pair of bloom fil    776  * To ensure this we keep a pair of bloom filters ('new' and 'old')
1076  * in which the filehandles of recalled deleg    777  * in which the filehandles of recalled delegations are "stored".
1077  * If a filehandle appear in either filter, a    778  * If a filehandle appear in either filter, a delegation is blocked.
1078  * When a delegation is recalled, the filehan    779  * When a delegation is recalled, the filehandle is stored in the "new"
1079  * filter.                                       780  * filter.
1080  * Every 30 seconds we swap the filters and c    781  * Every 30 seconds we swap the filters and clear the "new" one,
1081  * unless both are empty of course.  This res !! 782  * unless both are empty of course.
1082  * given filehandle being blocked for between << 
1083  *                                               783  *
1084  * Each filter is 256 bits.  We hash the file    784  * Each filter is 256 bits.  We hash the filehandle to 32bit and use the
1085  * low 3 bytes as hash-table indices.            785  * low 3 bytes as hash-table indices.
1086  *                                               786  *
1087  * 'blocked_delegations_lock', which is alway    787  * 'blocked_delegations_lock', which is always taken in block_delegations(),
1088  * is used to manage concurrent access.  Test    788  * is used to manage concurrent access.  Testing does not need the lock
1089  * except when swapping the two filters.         789  * except when swapping the two filters.
1090  */                                              790  */
1091 static DEFINE_SPINLOCK(blocked_delegations_lo    791 static DEFINE_SPINLOCK(blocked_delegations_lock);
1092 static struct bloom_pair {                       792 static struct bloom_pair {
1093         int     entries, old_entries;            793         int     entries, old_entries;
1094         time64_t swap_time;                   !! 794         time_t  swap_time;
1095         int     new; /* index into 'set' */      795         int     new; /* index into 'set' */
1096         DECLARE_BITMAP(set[2], 256);             796         DECLARE_BITMAP(set[2], 256);
1097 } blocked_delegations;                           797 } blocked_delegations;
1098                                                  798 
1099 static int delegation_blocked(struct knfsd_fh    799 static int delegation_blocked(struct knfsd_fh *fh)
1100 {                                                800 {
1101         u32 hash;                                801         u32 hash;
1102         struct bloom_pair *bd = &blocked_dele    802         struct bloom_pair *bd = &blocked_delegations;
1103                                                  803 
1104         if (bd->entries == 0)                    804         if (bd->entries == 0)
1105                 return 0;                        805                 return 0;
1106         if (ktime_get_seconds() - bd->swap_ti !! 806         if (seconds_since_boot() - bd->swap_time > 30) {
1107                 spin_lock(&blocked_delegation    807                 spin_lock(&blocked_delegations_lock);
1108                 if (ktime_get_seconds() - bd- !! 808                 if (seconds_since_boot() - bd->swap_time > 30) {
1109                         bd->entries -= bd->ol    809                         bd->entries -= bd->old_entries;
1110                         bd->old_entries = bd-    810                         bd->old_entries = bd->entries;
1111                         bd->new = 1-bd->new;  << 
1112                         memset(bd->set[bd->ne    811                         memset(bd->set[bd->new], 0,
1113                                sizeof(bd->set    812                                sizeof(bd->set[0]));
1114                         bd->swap_time = ktime !! 813                         bd->new = 1-bd->new;
                                                   >> 814                         bd->swap_time = seconds_since_boot();
1115                 }                                815                 }
1116                 spin_unlock(&blocked_delegati    816                 spin_unlock(&blocked_delegations_lock);
1117         }                                        817         }
1118         hash = jhash(&fh->fh_raw, fh->fh_size !! 818         hash = jhash(&fh->fh_base, fh->fh_size, 0);
1119         if (test_bit(hash&255, bd->set[0]) &&    819         if (test_bit(hash&255, bd->set[0]) &&
1120             test_bit((hash>>8)&255, bd->set[0    820             test_bit((hash>>8)&255, bd->set[0]) &&
1121             test_bit((hash>>16)&255, bd->set[    821             test_bit((hash>>16)&255, bd->set[0]))
1122                 return 1;                        822                 return 1;
1123                                                  823 
1124         if (test_bit(hash&255, bd->set[1]) &&    824         if (test_bit(hash&255, bd->set[1]) &&
1125             test_bit((hash>>8)&255, bd->set[1    825             test_bit((hash>>8)&255, bd->set[1]) &&
1126             test_bit((hash>>16)&255, bd->set[    826             test_bit((hash>>16)&255, bd->set[1]))
1127                 return 1;                        827                 return 1;
1128                                                  828 
1129         return 0;                                829         return 0;
1130 }                                                830 }
1131                                                  831 
1132 static void block_delegations(struct knfsd_fh    832 static void block_delegations(struct knfsd_fh *fh)
1133 {                                                833 {
1134         u32 hash;                                834         u32 hash;
1135         struct bloom_pair *bd = &blocked_dele    835         struct bloom_pair *bd = &blocked_delegations;
1136                                                  836 
1137         hash = jhash(&fh->fh_raw, fh->fh_size !! 837         hash = jhash(&fh->fh_base, fh->fh_size, 0);
1138                                                  838 
1139         spin_lock(&blocked_delegations_lock);    839         spin_lock(&blocked_delegations_lock);
1140         __set_bit(hash&255, bd->set[bd->new])    840         __set_bit(hash&255, bd->set[bd->new]);
1141         __set_bit((hash>>8)&255, bd->set[bd->    841         __set_bit((hash>>8)&255, bd->set[bd->new]);
1142         __set_bit((hash>>16)&255, bd->set[bd-    842         __set_bit((hash>>16)&255, bd->set[bd->new]);
1143         if (bd->entries == 0)                    843         if (bd->entries == 0)
1144                 bd->swap_time = ktime_get_sec !! 844                 bd->swap_time = seconds_since_boot();
1145         bd->entries += 1;                        845         bd->entries += 1;
1146         spin_unlock(&blocked_delegations_lock    846         spin_unlock(&blocked_delegations_lock);
1147 }                                                847 }
1148                                                  848 
1149 static struct nfs4_delegation *                  849 static struct nfs4_delegation *
1150 alloc_init_deleg(struct nfs4_client *clp, str    850 alloc_init_deleg(struct nfs4_client *clp, struct nfs4_file *fp,
1151                  struct nfs4_clnt_odstate *od !! 851                  struct svc_fh *current_fh,
                                                   >> 852                  struct nfs4_clnt_odstate *odstate)
1152 {                                                853 {
1153         struct nfs4_delegation *dp;              854         struct nfs4_delegation *dp;
1154         struct nfs4_stid *stid;               << 
1155         long n;                                  855         long n;
1156                                                  856 
1157         dprintk("NFSD alloc_init_deleg\n");      857         dprintk("NFSD alloc_init_deleg\n");
1158         n = atomic_long_inc_return(&num_deleg    858         n = atomic_long_inc_return(&num_delegations);
1159         if (n < 0 || n > max_delegations)        859         if (n < 0 || n > max_delegations)
1160                 goto out_dec;                    860                 goto out_dec;
1161         if (delegation_blocked(&fp->fi_fhandl !! 861         if (delegation_blocked(&current_fh->fh_handle))
1162                 goto out_dec;                    862                 goto out_dec;
1163         stid = nfs4_alloc_stid(clp, deleg_sla !! 863         dp = delegstateid(nfs4_alloc_stid(clp, deleg_slab, nfs4_free_deleg));
1164         if (stid == NULL)                     !! 864         if (dp == NULL)
1165                 goto out_dec;                    865                 goto out_dec;
1166         dp = delegstateid(stid);              << 
1167                                                  866 
1168         /*                                       867         /*
1169          * delegation seqid's are never incre    868          * delegation seqid's are never incremented.  The 4.1 special
1170          * meaning of seqid 0 isn't meaningfu    869          * meaning of seqid 0 isn't meaningful, really, but let's avoid
1171          * 0 anyway just for consistency and     870          * 0 anyway just for consistency and use 1:
1172          */                                      871          */
1173         dp->dl_stid.sc_stateid.si_generation     872         dp->dl_stid.sc_stateid.si_generation = 1;
1174         INIT_LIST_HEAD(&dp->dl_perfile);         873         INIT_LIST_HEAD(&dp->dl_perfile);
1175         INIT_LIST_HEAD(&dp->dl_perclnt);         874         INIT_LIST_HEAD(&dp->dl_perclnt);
1176         INIT_LIST_HEAD(&dp->dl_recall_lru);      875         INIT_LIST_HEAD(&dp->dl_recall_lru);
1177         dp->dl_clnt_odstate = odstate;           876         dp->dl_clnt_odstate = odstate;
1178         get_clnt_odstate(odstate);               877         get_clnt_odstate(odstate);
1179         dp->dl_type = dl_type;                !! 878         dp->dl_type = NFS4_OPEN_DELEGATE_READ;
1180         dp->dl_retries = 1;                      879         dp->dl_retries = 1;
1181         dp->dl_recalled = false;              << 
1182         nfsd4_init_cb(&dp->dl_recall, dp->dl_    880         nfsd4_init_cb(&dp->dl_recall, dp->dl_stid.sc_client,
1183                       &nfsd4_cb_recall_ops, N    881                       &nfsd4_cb_recall_ops, NFSPROC4_CLNT_CB_RECALL);
1184         nfsd4_init_cb(&dp->dl_cb_fattr.ncf_ge << 
1185                         &nfsd4_cb_getattr_ops << 
1186         dp->dl_cb_fattr.ncf_file_modified = f << 
1187         dp->dl_cb_fattr.ncf_cb_bmap[0] = FATT << 
1188         get_nfs4_file(fp);                       882         get_nfs4_file(fp);
1189         dp->dl_stid.sc_file = fp;                883         dp->dl_stid.sc_file = fp;
1190         return dp;                               884         return dp;
1191 out_dec:                                         885 out_dec:
1192         atomic_long_dec(&num_delegations);       886         atomic_long_dec(&num_delegations);
1193         return NULL;                             887         return NULL;
1194 }                                                888 }
1195                                                  889 
1196 void                                             890 void
1197 nfs4_put_stid(struct nfs4_stid *s)               891 nfs4_put_stid(struct nfs4_stid *s)
1198 {                                                892 {
1199         struct nfs4_file *fp = s->sc_file;       893         struct nfs4_file *fp = s->sc_file;
1200         struct nfs4_client *clp = s->sc_clien    894         struct nfs4_client *clp = s->sc_client;
1201                                                  895 
1202         might_lock(&clp->cl_lock);               896         might_lock(&clp->cl_lock);
1203                                                  897 
1204         if (!refcount_dec_and_lock(&s->sc_cou    898         if (!refcount_dec_and_lock(&s->sc_count, &clp->cl_lock)) {
1205                 wake_up_all(&close_wq);          899                 wake_up_all(&close_wq);
1206                 return;                          900                 return;
1207         }                                        901         }
1208         idr_remove(&clp->cl_stateids, s->sc_s    902         idr_remove(&clp->cl_stateids, s->sc_stateid.si_opaque.so_id);
1209         if (s->sc_status & SC_STATUS_ADMIN_RE << 
1210                 atomic_dec(&s->sc_client->cl_ << 
1211         nfs4_free_cpntf_statelist(clp->net, s << 
1212         spin_unlock(&clp->cl_lock);              903         spin_unlock(&clp->cl_lock);
1213         s->sc_free(s);                           904         s->sc_free(s);
1214         if (fp)                                  905         if (fp)
1215                 put_nfs4_file(fp);               906                 put_nfs4_file(fp);
1216 }                                                907 }
1217                                                  908 
1218 void                                             909 void
1219 nfs4_inc_and_copy_stateid(stateid_t *dst, str    910 nfs4_inc_and_copy_stateid(stateid_t *dst, struct nfs4_stid *stid)
1220 {                                                911 {
1221         stateid_t *src = &stid->sc_stateid;      912         stateid_t *src = &stid->sc_stateid;
1222                                                  913 
1223         spin_lock(&stid->sc_lock);               914         spin_lock(&stid->sc_lock);
1224         if (unlikely(++src->si_generation ==     915         if (unlikely(++src->si_generation == 0))
1225                 src->si_generation = 1;          916                 src->si_generation = 1;
1226         memcpy(dst, src, sizeof(*dst));          917         memcpy(dst, src, sizeof(*dst));
1227         spin_unlock(&stid->sc_lock);             918         spin_unlock(&stid->sc_lock);
1228 }                                                919 }
1229                                                  920 
1230 static void put_deleg_file(struct nfs4_file *    921 static void put_deleg_file(struct nfs4_file *fp)
1231 {                                                922 {
1232         struct nfsd_file *nf = NULL;          !! 923         struct file *filp = NULL;
1233                                                  924 
1234         spin_lock(&fp->fi_lock);                 925         spin_lock(&fp->fi_lock);
1235         if (--fp->fi_delegees == 0)              926         if (--fp->fi_delegees == 0)
1236                 swap(nf, fp->fi_deleg_file);  !! 927                 swap(filp, fp->fi_deleg_file);
1237         spin_unlock(&fp->fi_lock);               928         spin_unlock(&fp->fi_lock);
1238                                                  929 
1239         if (nf)                               !! 930         if (filp)
1240                 nfsd_file_put(nf);            !! 931                 fput(filp);
1241 }                                                932 }
1242                                                  933 
1243 static void nfs4_unlock_deleg_lease(struct nf    934 static void nfs4_unlock_deleg_lease(struct nfs4_delegation *dp)
1244 {                                                935 {
1245         struct nfs4_file *fp = dp->dl_stid.sc    936         struct nfs4_file *fp = dp->dl_stid.sc_file;
1246         struct nfsd_file *nf = fp->fi_deleg_f !! 937         struct file *filp = fp->fi_deleg_file;
1247                                                  938 
1248         WARN_ON_ONCE(!fp->fi_delegees);          939         WARN_ON_ONCE(!fp->fi_delegees);
1249                                                  940 
1250         kernel_setlease(nf->nf_file, F_UNLCK, !! 941         vfs_setlease(filp, F_UNLCK, NULL, (void **)&dp);
1251         put_deleg_file(fp);                      942         put_deleg_file(fp);
1252 }                                                943 }
1253                                                  944 
1254 static void destroy_unhashed_deleg(struct nfs    945 static void destroy_unhashed_deleg(struct nfs4_delegation *dp)
1255 {                                                946 {
1256         put_clnt_odstate(dp->dl_clnt_odstate)    947         put_clnt_odstate(dp->dl_clnt_odstate);
1257         nfs4_unlock_deleg_lease(dp);             948         nfs4_unlock_deleg_lease(dp);
1258         nfs4_put_stid(&dp->dl_stid);             949         nfs4_put_stid(&dp->dl_stid);
1259 }                                                950 }
1260                                                  951 
                                                   >> 952 void nfs4_unhash_stid(struct nfs4_stid *s)
                                                   >> 953 {
                                                   >> 954         s->sc_type = 0;
                                                   >> 955 }
                                                   >> 956 
1261 /**                                              957 /**
1262  * nfs4_delegation_exists - Discover if this     958  * nfs4_delegation_exists - Discover if this delegation already exists
1263  * @clp:     a pointer to the nfs4_client we'    959  * @clp:     a pointer to the nfs4_client we're granting a delegation to
1264  * @fp:      a pointer to the nfs4_file we're    960  * @fp:      a pointer to the nfs4_file we're granting a delegation on
1265  *                                               961  *
1266  * Return:                                       962  * Return:
1267  *      On success: true iff an existing dele    963  *      On success: true iff an existing delegation is found
1268  */                                              964  */
1269                                                  965 
1270 static bool                                      966 static bool
1271 nfs4_delegation_exists(struct nfs4_client *cl    967 nfs4_delegation_exists(struct nfs4_client *clp, struct nfs4_file *fp)
1272 {                                                968 {
1273         struct nfs4_delegation *searchdp = NU    969         struct nfs4_delegation *searchdp = NULL;
1274         struct nfs4_client *searchclp = NULL;    970         struct nfs4_client *searchclp = NULL;
1275                                                  971 
1276         lockdep_assert_held(&state_lock);        972         lockdep_assert_held(&state_lock);
1277         lockdep_assert_held(&fp->fi_lock);       973         lockdep_assert_held(&fp->fi_lock);
1278                                                  974 
1279         list_for_each_entry(searchdp, &fp->fi    975         list_for_each_entry(searchdp, &fp->fi_delegations, dl_perfile) {
1280                 searchclp = searchdp->dl_stid    976                 searchclp = searchdp->dl_stid.sc_client;
1281                 if (clp == searchclp) {          977                 if (clp == searchclp) {
1282                         return true;             978                         return true;
1283                 }                                979                 }
1284         }                                        980         }
1285         return false;                            981         return false;
1286 }                                                982 }
1287                                                  983 
1288 /**                                              984 /**
1289  * hash_delegation_locked - Add a delegation     985  * hash_delegation_locked - Add a delegation to the appropriate lists
1290  * @dp:     a pointer to the nfs4_delegation     986  * @dp:     a pointer to the nfs4_delegation we are adding.
1291  * @fp:     a pointer to the nfs4_file we're     987  * @fp:     a pointer to the nfs4_file we're granting a delegation on
1292  *                                               988  *
1293  * Return:                                       989  * Return:
1294  *      On success: NULL if the delegation wa    990  *      On success: NULL if the delegation was successfully hashed.
1295  *                                               991  *
1296  *      On error: -EAGAIN if one was previous    992  *      On error: -EAGAIN if one was previously granted to this
1297  *                 nfs4_client for this nfs4_    993  *                 nfs4_client for this nfs4_file. Delegation is not hashed.
1298  *                                               994  *
1299  */                                              995  */
1300                                                  996 
1301 static int                                       997 static int
1302 hash_delegation_locked(struct nfs4_delegation    998 hash_delegation_locked(struct nfs4_delegation *dp, struct nfs4_file *fp)
1303 {                                                999 {
1304         struct nfs4_client *clp = dp->dl_stid    1000         struct nfs4_client *clp = dp->dl_stid.sc_client;
1305                                                  1001 
1306         lockdep_assert_held(&state_lock);        1002         lockdep_assert_held(&state_lock);
1307         lockdep_assert_held(&fp->fi_lock);       1003         lockdep_assert_held(&fp->fi_lock);
1308         lockdep_assert_held(&clp->cl_lock);   << 
1309                                                  1004 
1310         if (nfs4_delegation_exists(clp, fp))     1005         if (nfs4_delegation_exists(clp, fp))
1311                 return -EAGAIN;                  1006                 return -EAGAIN;
1312         refcount_inc(&dp->dl_stid.sc_count);     1007         refcount_inc(&dp->dl_stid.sc_count);
1313         dp->dl_stid.sc_type = SC_TYPE_DELEG;  !! 1008         dp->dl_stid.sc_type = NFS4_DELEG_STID;
1314         list_add(&dp->dl_perfile, &fp->fi_del    1009         list_add(&dp->dl_perfile, &fp->fi_delegations);
1315         list_add(&dp->dl_perclnt, &clp->cl_de    1010         list_add(&dp->dl_perclnt, &clp->cl_delegations);
1316         return 0;                                1011         return 0;
1317 }                                                1012 }
1318                                                  1013 
1319 static bool delegation_hashed(struct nfs4_del << 
1320 {                                             << 
1321         return !(list_empty(&dp->dl_perfile)) << 
1322 }                                             << 
1323                                               << 
1324 static bool                                      1014 static bool
1325 unhash_delegation_locked(struct nfs4_delegati !! 1015 unhash_delegation_locked(struct nfs4_delegation *dp)
1326 {                                                1016 {
1327         struct nfs4_file *fp = dp->dl_stid.sc    1017         struct nfs4_file *fp = dp->dl_stid.sc_file;
1328                                                  1018 
1329         lockdep_assert_held(&state_lock);        1019         lockdep_assert_held(&state_lock);
1330                                                  1020 
1331         if (!delegation_hashed(dp))           !! 1021         if (list_empty(&dp->dl_perfile))
1332                 return false;                    1022                 return false;
1333                                                  1023 
1334         if (statusmask == SC_STATUS_REVOKED & !! 1024         dp->dl_stid.sc_type = NFS4_CLOSED_DELEG_STID;
1335             dp->dl_stid.sc_client->cl_minorve << 
1336                 statusmask = SC_STATUS_CLOSED << 
1337         dp->dl_stid.sc_status |= statusmask;  << 
1338         if (statusmask & SC_STATUS_ADMIN_REVO << 
1339                 atomic_inc(&dp->dl_stid.sc_cl << 
1340                                               << 
1341         /* Ensure that deleg break won't try     1025         /* Ensure that deleg break won't try to requeue it */
1342         ++dp->dl_time;                           1026         ++dp->dl_time;
1343         spin_lock(&fp->fi_lock);                 1027         spin_lock(&fp->fi_lock);
1344         list_del_init(&dp->dl_perclnt);          1028         list_del_init(&dp->dl_perclnt);
1345         list_del_init(&dp->dl_recall_lru);       1029         list_del_init(&dp->dl_recall_lru);
1346         list_del_init(&dp->dl_perfile);          1030         list_del_init(&dp->dl_perfile);
1347         spin_unlock(&fp->fi_lock);               1031         spin_unlock(&fp->fi_lock);
1348         return true;                             1032         return true;
1349 }                                                1033 }
1350                                                  1034 
1351 static void destroy_delegation(struct nfs4_de    1035 static void destroy_delegation(struct nfs4_delegation *dp)
1352 {                                                1036 {
1353         bool unhashed;                           1037         bool unhashed;
1354                                                  1038 
1355         spin_lock(&state_lock);                  1039         spin_lock(&state_lock);
1356         unhashed = unhash_delegation_locked(d !! 1040         unhashed = unhash_delegation_locked(dp);
1357         spin_unlock(&state_lock);                1041         spin_unlock(&state_lock);
1358         if (unhashed)                            1042         if (unhashed)
1359                 destroy_unhashed_deleg(dp);      1043                 destroy_unhashed_deleg(dp);
1360 }                                                1044 }
1361                                                  1045 
1362 /**                                           << 
1363  * revoke_delegation - perform nfs4 delegatio << 
1364  * @dp: pointer to the delegation             << 
1365  *                                            << 
1366  * This function assumes that it's called eit << 
1367  * interface (nfsd4_revoke_states()) that's r << 
1368  * stateid or it's called from a laundromat t << 
1369  * determined that this specific state has ex << 
1370  * (both mark state with the appropriate stid << 
1371  * assumed that a reference was taken on the  << 
1372  *                                            << 
1373  * If this function finds that the @dp state  << 
1374  * that a FREE_STATEID operation for this sta << 
1375  * we can proceed to removing it from recalle << 
1376  * isn't marked SC_STATUS_FREED, it means we  << 
1377  * list and wait for the FREE_STATEID to arri << 
1378  * time, we need to mark it as SC_STATUS_FREE << 
1379  * nfsd4_free_stateid() function that this st << 
1380  * to the cl_revoked list and that nfsd4_free << 
1381  * for removing it from the list. Inspection  << 
1382  * in the revocation process is protected by  << 
1383  */                                           << 
1384 static void revoke_delegation(struct nfs4_del    1046 static void revoke_delegation(struct nfs4_delegation *dp)
1385 {                                                1047 {
1386         struct nfs4_client *clp = dp->dl_stid    1048         struct nfs4_client *clp = dp->dl_stid.sc_client;
1387                                                  1049 
1388         WARN_ON(!list_empty(&dp->dl_recall_lr    1050         WARN_ON(!list_empty(&dp->dl_recall_lru));
1389         WARN_ON_ONCE(!(dp->dl_stid.sc_status  << 
1390                      (SC_STATUS_REVOKED | SC_ << 
1391                                               << 
1392         trace_nfsd_stid_revoke(&dp->dl_stid); << 
1393                                                  1051 
1394         spin_lock(&clp->cl_lock);             !! 1052         if (clp->cl_minorversion) {
1395         if (dp->dl_stid.sc_status & SC_STATUS !! 1053                 dp->dl_stid.sc_type = NFS4_REVOKED_DELEG_STID;
1396                 list_del_init(&dp->dl_recall_ !! 1054                 refcount_inc(&dp->dl_stid.sc_count);
1397                 goto out;                     !! 1055                 spin_lock(&clp->cl_lock);
                                                   >> 1056                 list_add(&dp->dl_recall_lru, &clp->cl_revoked);
                                                   >> 1057                 spin_unlock(&clp->cl_lock);
1398         }                                        1058         }
1399         list_add(&dp->dl_recall_lru, &clp->cl << 
1400         dp->dl_stid.sc_status |= SC_STATUS_FR << 
1401 out:                                          << 
1402         spin_unlock(&clp->cl_lock);           << 
1403         destroy_unhashed_deleg(dp);              1059         destroy_unhashed_deleg(dp);
1404 }                                                1060 }
1405                                                  1061 
1406 /*                                            !! 1062 /* 
1407  * SETCLIENTID state                          !! 1063  * SETCLIENTID state 
1408  */                                              1064  */
1409                                                  1065 
1410 static unsigned int clientid_hashval(u32 id)     1066 static unsigned int clientid_hashval(u32 id)
1411 {                                                1067 {
1412         return id & CLIENT_HASH_MASK;            1068         return id & CLIENT_HASH_MASK;
1413 }                                                1069 }
1414                                                  1070 
1415 static unsigned int clientstr_hashval(struct     1071 static unsigned int clientstr_hashval(struct xdr_netobj name)
1416 {                                                1072 {
1417         return opaque_hashval(name.data, 8) &    1073         return opaque_hashval(name.data, 8) & CLIENT_HASH_MASK;
1418 }                                                1074 }
1419                                                  1075 
1420 /*                                               1076 /*
                                                   >> 1077  * We store the NONE, READ, WRITE, and BOTH bits separately in the
                                                   >> 1078  * st_{access,deny}_bmap field of the stateid, in order to track not
                                                   >> 1079  * only what share bits are currently in force, but also what
                                                   >> 1080  * combinations of share bits previous opens have used.  This allows us
                                                   >> 1081  * to enforce the recommendation of rfc 3530 14.2.19 that the server
                                                   >> 1082  * return an error if the client attempt to downgrade to a combination
                                                   >> 1083  * of share bits not explicable by closing some of its previous opens.
                                                   >> 1084  *
                                                   >> 1085  * XXX: This enforcement is actually incomplete, since we don't keep
                                                   >> 1086  * track of access/deny bit combinations; so, e.g., we allow:
                                                   >> 1087  *
                                                   >> 1088  *      OPEN allow read, deny write
                                                   >> 1089  *      OPEN allow both, deny none
                                                   >> 1090  *      DOWNGRADE allow read, deny none
                                                   >> 1091  *
                                                   >> 1092  * which we should reject.
                                                   >> 1093  */
                                                   >> 1094 static unsigned int
                                                   >> 1095 bmap_to_share_mode(unsigned long bmap) {
                                                   >> 1096         int i;
                                                   >> 1097         unsigned int access = 0;
                                                   >> 1098 
                                                   >> 1099         for (i = 1; i < 4; i++) {
                                                   >> 1100                 if (test_bit(i, &bmap))
                                                   >> 1101                         access |= i;
                                                   >> 1102         }
                                                   >> 1103         return access;
                                                   >> 1104 }
                                                   >> 1105 
                                                   >> 1106 /* set share access for a given stateid */
                                                   >> 1107 static inline void
                                                   >> 1108 set_access(u32 access, struct nfs4_ol_stateid *stp)
                                                   >> 1109 {
                                                   >> 1110         unsigned char mask = 1 << access;
                                                   >> 1111 
                                                   >> 1112         WARN_ON_ONCE(access > NFS4_SHARE_ACCESS_BOTH);
                                                   >> 1113         stp->st_access_bmap |= mask;
                                                   >> 1114 }
                                                   >> 1115 
                                                   >> 1116 /* clear share access for a given stateid */
                                                   >> 1117 static inline void
                                                   >> 1118 clear_access(u32 access, struct nfs4_ol_stateid *stp)
                                                   >> 1119 {
                                                   >> 1120         unsigned char mask = 1 << access;
                                                   >> 1121 
                                                   >> 1122         WARN_ON_ONCE(access > NFS4_SHARE_ACCESS_BOTH);
                                                   >> 1123         stp->st_access_bmap &= ~mask;
                                                   >> 1124 }
                                                   >> 1125 
                                                   >> 1126 /* test whether a given stateid has access */
                                                   >> 1127 static inline bool
                                                   >> 1128 test_access(u32 access, struct nfs4_ol_stateid *stp)
                                                   >> 1129 {
                                                   >> 1130         unsigned char mask = 1 << access;
                                                   >> 1131 
                                                   >> 1132         return (bool)(stp->st_access_bmap & mask);
                                                   >> 1133 }
                                                   >> 1134 
                                                   >> 1135 /* set share deny for a given stateid */
                                                   >> 1136 static inline void
                                                   >> 1137 set_deny(u32 deny, struct nfs4_ol_stateid *stp)
                                                   >> 1138 {
                                                   >> 1139         unsigned char mask = 1 << deny;
                                                   >> 1140 
                                                   >> 1141         WARN_ON_ONCE(deny > NFS4_SHARE_DENY_BOTH);
                                                   >> 1142         stp->st_deny_bmap |= mask;
                                                   >> 1143 }
                                                   >> 1144 
                                                   >> 1145 /* clear share deny for a given stateid */
                                                   >> 1146 static inline void
                                                   >> 1147 clear_deny(u32 deny, struct nfs4_ol_stateid *stp)
                                                   >> 1148 {
                                                   >> 1149         unsigned char mask = 1 << deny;
                                                   >> 1150 
                                                   >> 1151         WARN_ON_ONCE(deny > NFS4_SHARE_DENY_BOTH);
                                                   >> 1152         stp->st_deny_bmap &= ~mask;
                                                   >> 1153 }
                                                   >> 1154 
                                                   >> 1155 /* test whether a given stateid is denying specific access */
                                                   >> 1156 static inline bool
                                                   >> 1157 test_deny(u32 deny, struct nfs4_ol_stateid *stp)
                                                   >> 1158 {
                                                   >> 1159         unsigned char mask = 1 << deny;
                                                   >> 1160 
                                                   >> 1161         return (bool)(stp->st_deny_bmap & mask);
                                                   >> 1162 }
                                                   >> 1163 
                                                   >> 1164 static int nfs4_access_to_omode(u32 access)
                                                   >> 1165 {
                                                   >> 1166         switch (access & NFS4_SHARE_ACCESS_BOTH) {
                                                   >> 1167         case NFS4_SHARE_ACCESS_READ:
                                                   >> 1168                 return O_RDONLY;
                                                   >> 1169         case NFS4_SHARE_ACCESS_WRITE:
                                                   >> 1170                 return O_WRONLY;
                                                   >> 1171         case NFS4_SHARE_ACCESS_BOTH:
                                                   >> 1172                 return O_RDWR;
                                                   >> 1173         }
                                                   >> 1174         WARN_ON_ONCE(1);
                                                   >> 1175         return O_RDONLY;
                                                   >> 1176 }
                                                   >> 1177 
                                                   >> 1178 /*
1421  * A stateid that had a deny mode associated     1179  * A stateid that had a deny mode associated with it is being released
1422  * or downgraded. Recalculate the deny mode o    1180  * or downgraded. Recalculate the deny mode on the file.
1423  */                                              1181  */
1424 static void                                      1182 static void
1425 recalculate_deny_mode(struct nfs4_file *fp)      1183 recalculate_deny_mode(struct nfs4_file *fp)
1426 {                                                1184 {
1427         struct nfs4_ol_stateid *stp;             1185         struct nfs4_ol_stateid *stp;
1428         u32 old_deny;                         << 
1429                                                  1186 
1430         spin_lock(&fp->fi_lock);                 1187         spin_lock(&fp->fi_lock);
1431         old_deny = fp->fi_share_deny;         << 
1432         fp->fi_share_deny = 0;                   1188         fp->fi_share_deny = 0;
1433         list_for_each_entry(stp, &fp->fi_stat !! 1189         list_for_each_entry(stp, &fp->fi_stateids, st_perfile)
1434                 fp->fi_share_deny |= bmap_to_    1190                 fp->fi_share_deny |= bmap_to_share_mode(stp->st_deny_bmap);
1435                 if (fp->fi_share_deny == old_ << 
1436                         break;                << 
1437         }                                     << 
1438         spin_unlock(&fp->fi_lock);               1191         spin_unlock(&fp->fi_lock);
1439 }                                                1192 }
1440                                                  1193 
1441 static void                                      1194 static void
1442 reset_union_bmap_deny(u32 deny, struct nfs4_o    1195 reset_union_bmap_deny(u32 deny, struct nfs4_ol_stateid *stp)
1443 {                                                1196 {
1444         int i;                                   1197         int i;
1445         bool change = false;                     1198         bool change = false;
1446                                                  1199 
1447         for (i = 1; i < 4; i++) {                1200         for (i = 1; i < 4; i++) {
1448                 if ((i & deny) != i) {           1201                 if ((i & deny) != i) {
1449                         change = true;           1202                         change = true;
1450                         clear_deny(i, stp);      1203                         clear_deny(i, stp);
1451                 }                                1204                 }
1452         }                                        1205         }
1453                                                  1206 
1454         /* Recalculate per-file deny mode if     1207         /* Recalculate per-file deny mode if there was a change */
1455         if (change)                              1208         if (change)
1456                 recalculate_deny_mode(stp->st    1209                 recalculate_deny_mode(stp->st_stid.sc_file);
1457 }                                                1210 }
1458                                                  1211 
1459 /* release all access and file references for    1212 /* release all access and file references for a given stateid */
1460 static void                                      1213 static void
1461 release_all_access(struct nfs4_ol_stateid *st    1214 release_all_access(struct nfs4_ol_stateid *stp)
1462 {                                                1215 {
1463         int i;                                   1216         int i;
1464         struct nfs4_file *fp = stp->st_stid.s    1217         struct nfs4_file *fp = stp->st_stid.sc_file;
1465                                                  1218 
1466         if (fp && stp->st_deny_bmap != 0)        1219         if (fp && stp->st_deny_bmap != 0)
1467                 recalculate_deny_mode(fp);       1220                 recalculate_deny_mode(fp);
1468                                                  1221 
1469         for (i = 1; i < 4; i++) {                1222         for (i = 1; i < 4; i++) {
1470                 if (test_access(i, stp))         1223                 if (test_access(i, stp))
1471                         nfs4_file_put_access(    1224                         nfs4_file_put_access(stp->st_stid.sc_file, i);
1472                 clear_access(i, stp);            1225                 clear_access(i, stp);
1473         }                                        1226         }
1474 }                                                1227 }
1475                                                  1228 
1476 static inline void nfs4_free_stateowner(struc    1229 static inline void nfs4_free_stateowner(struct nfs4_stateowner *sop)
1477 {                                                1230 {
1478         kfree(sop->so_owner.data);               1231         kfree(sop->so_owner.data);
1479         sop->so_ops->so_free(sop);               1232         sop->so_ops->so_free(sop);
1480 }                                                1233 }
1481                                                  1234 
1482 static void nfs4_put_stateowner(struct nfs4_s    1235 static void nfs4_put_stateowner(struct nfs4_stateowner *sop)
1483 {                                                1236 {
1484         struct nfs4_client *clp = sop->so_cli    1237         struct nfs4_client *clp = sop->so_client;
1485                                                  1238 
1486         might_lock(&clp->cl_lock);               1239         might_lock(&clp->cl_lock);
1487                                                  1240 
1488         if (!atomic_dec_and_lock(&sop->so_cou    1241         if (!atomic_dec_and_lock(&sop->so_count, &clp->cl_lock))
1489                 return;                          1242                 return;
1490         sop->so_ops->so_unhash(sop);             1243         sop->so_ops->so_unhash(sop);
1491         spin_unlock(&clp->cl_lock);              1244         spin_unlock(&clp->cl_lock);
1492         nfs4_free_stateowner(sop);               1245         nfs4_free_stateowner(sop);
1493 }                                                1246 }
1494                                                  1247 
1495 static bool                                   << 
1496 nfs4_ol_stateid_unhashed(const struct nfs4_ol << 
1497 {                                             << 
1498         return list_empty(&stp->st_perfile);  << 
1499 }                                             << 
1500                                               << 
1501 static bool unhash_ol_stateid(struct nfs4_ol_    1248 static bool unhash_ol_stateid(struct nfs4_ol_stateid *stp)
1502 {                                                1249 {
1503         struct nfs4_file *fp = stp->st_stid.s    1250         struct nfs4_file *fp = stp->st_stid.sc_file;
1504                                                  1251 
1505         lockdep_assert_held(&stp->st_stateown    1252         lockdep_assert_held(&stp->st_stateowner->so_client->cl_lock);
1506                                                  1253 
1507         if (list_empty(&stp->st_perfile))        1254         if (list_empty(&stp->st_perfile))
1508                 return false;                    1255                 return false;
1509                                                  1256 
1510         spin_lock(&fp->fi_lock);                 1257         spin_lock(&fp->fi_lock);
1511         list_del_init(&stp->st_perfile);         1258         list_del_init(&stp->st_perfile);
1512         spin_unlock(&fp->fi_lock);               1259         spin_unlock(&fp->fi_lock);
1513         list_del(&stp->st_perstateowner);        1260         list_del(&stp->st_perstateowner);
1514         return true;                             1261         return true;
1515 }                                                1262 }
1516                                                  1263 
1517 static void nfs4_free_ol_stateid(struct nfs4_    1264 static void nfs4_free_ol_stateid(struct nfs4_stid *stid)
1518 {                                                1265 {
1519         struct nfs4_ol_stateid *stp = openloc    1266         struct nfs4_ol_stateid *stp = openlockstateid(stid);
1520                                                  1267 
1521         put_clnt_odstate(stp->st_clnt_odstate    1268         put_clnt_odstate(stp->st_clnt_odstate);
1522         release_all_access(stp);                 1269         release_all_access(stp);
1523         if (stp->st_stateowner)                  1270         if (stp->st_stateowner)
1524                 nfs4_put_stateowner(stp->st_s    1271                 nfs4_put_stateowner(stp->st_stateowner);
1525         WARN_ON(!list_empty(&stid->sc_cp_list << 
1526         kmem_cache_free(stateid_slab, stid);     1272         kmem_cache_free(stateid_slab, stid);
1527 }                                                1273 }
1528                                                  1274 
1529 static void nfs4_free_lock_stateid(struct nfs    1275 static void nfs4_free_lock_stateid(struct nfs4_stid *stid)
1530 {                                                1276 {
1531         struct nfs4_ol_stateid *stp = openloc    1277         struct nfs4_ol_stateid *stp = openlockstateid(stid);
1532         struct nfs4_lockowner *lo = lockowner    1278         struct nfs4_lockowner *lo = lockowner(stp->st_stateowner);
1533         struct nfsd_file *nf;                 !! 1279         struct file *file;
1534                                                  1280 
1535         nf = find_any_file(stp->st_stid.sc_fi !! 1281         file = find_any_file(stp->st_stid.sc_file);
1536         if (nf) {                             !! 1282         if (file)
1537                 get_file(nf->nf_file);        !! 1283                 filp_close(file, (fl_owner_t)lo);
1538                 filp_close(nf->nf_file, (fl_o << 
1539                 nfsd_file_put(nf);            << 
1540         }                                     << 
1541         nfs4_free_ol_stateid(stid);              1284         nfs4_free_ol_stateid(stid);
1542 }                                                1285 }
1543                                                  1286 
1544 /*                                               1287 /*
1545  * Put the persistent reference to an already    1288  * Put the persistent reference to an already unhashed generic stateid, while
1546  * holding the cl_lock. If it's the last refe    1289  * holding the cl_lock. If it's the last reference, then put it onto the
1547  * reaplist for later destruction.               1290  * reaplist for later destruction.
1548  */                                              1291  */
1549 static void put_ol_stateid_locked(struct nfs4    1292 static void put_ol_stateid_locked(struct nfs4_ol_stateid *stp,
1550                                        struct    1293                                        struct list_head *reaplist)
1551 {                                                1294 {
1552         struct nfs4_stid *s = &stp->st_stid;     1295         struct nfs4_stid *s = &stp->st_stid;
1553         struct nfs4_client *clp = s->sc_clien    1296         struct nfs4_client *clp = s->sc_client;
1554                                                  1297 
1555         lockdep_assert_held(&clp->cl_lock);      1298         lockdep_assert_held(&clp->cl_lock);
1556                                                  1299 
1557         WARN_ON_ONCE(!list_empty(&stp->st_loc    1300         WARN_ON_ONCE(!list_empty(&stp->st_locks));
1558                                                  1301 
1559         if (!refcount_dec_and_test(&s->sc_cou    1302         if (!refcount_dec_and_test(&s->sc_count)) {
1560                 wake_up_all(&close_wq);          1303                 wake_up_all(&close_wq);
1561                 return;                          1304                 return;
1562         }                                        1305         }
1563                                                  1306 
1564         idr_remove(&clp->cl_stateids, s->sc_s    1307         idr_remove(&clp->cl_stateids, s->sc_stateid.si_opaque.so_id);
1565         if (s->sc_status & SC_STATUS_ADMIN_RE << 
1566                 atomic_dec(&s->sc_client->cl_ << 
1567         list_add(&stp->st_locks, reaplist);      1308         list_add(&stp->st_locks, reaplist);
1568 }                                                1309 }
1569                                                  1310 
1570 static bool unhash_lock_stateid(struct nfs4_o    1311 static bool unhash_lock_stateid(struct nfs4_ol_stateid *stp)
1571 {                                                1312 {
1572         lockdep_assert_held(&stp->st_stid.sc_    1313         lockdep_assert_held(&stp->st_stid.sc_client->cl_lock);
1573                                                  1314 
1574         if (!unhash_ol_stateid(stp))          << 
1575                 return false;                 << 
1576         list_del_init(&stp->st_locks);           1315         list_del_init(&stp->st_locks);
1577         stp->st_stid.sc_status |= SC_STATUS_C !! 1316         nfs4_unhash_stid(&stp->st_stid);
1578         return true;                          !! 1317         return unhash_ol_stateid(stp);
1579 }                                                1318 }
1580                                                  1319 
1581 static void release_lock_stateid(struct nfs4_    1320 static void release_lock_stateid(struct nfs4_ol_stateid *stp)
1582 {                                                1321 {
1583         struct nfs4_client *clp = stp->st_sti    1322         struct nfs4_client *clp = stp->st_stid.sc_client;
1584         bool unhashed;                           1323         bool unhashed;
1585                                                  1324 
1586         spin_lock(&clp->cl_lock);                1325         spin_lock(&clp->cl_lock);
1587         unhashed = unhash_lock_stateid(stp);     1326         unhashed = unhash_lock_stateid(stp);
1588         spin_unlock(&clp->cl_lock);              1327         spin_unlock(&clp->cl_lock);
1589         if (unhashed)                            1328         if (unhashed)
1590                 nfs4_put_stid(&stp->st_stid);    1329                 nfs4_put_stid(&stp->st_stid);
1591 }                                                1330 }
1592                                                  1331 
1593 static void unhash_lockowner_locked(struct nf    1332 static void unhash_lockowner_locked(struct nfs4_lockowner *lo)
1594 {                                                1333 {
1595         struct nfs4_client *clp = lo->lo_owne    1334         struct nfs4_client *clp = lo->lo_owner.so_client;
1596                                                  1335 
1597         lockdep_assert_held(&clp->cl_lock);      1336         lockdep_assert_held(&clp->cl_lock);
1598                                                  1337 
1599         list_del_init(&lo->lo_owner.so_strhas    1338         list_del_init(&lo->lo_owner.so_strhash);
1600 }                                                1339 }
1601                                                  1340 
1602 /*                                               1341 /*
1603  * Free a list of generic stateids that were     1342  * Free a list of generic stateids that were collected earlier after being
1604  * fully unhashed.                               1343  * fully unhashed.
1605  */                                              1344  */
1606 static void                                      1345 static void
1607 free_ol_stateid_reaplist(struct list_head *re    1346 free_ol_stateid_reaplist(struct list_head *reaplist)
1608 {                                                1347 {
1609         struct nfs4_ol_stateid *stp;             1348         struct nfs4_ol_stateid *stp;
1610         struct nfs4_file *fp;                    1349         struct nfs4_file *fp;
1611                                                  1350 
1612         might_sleep();                           1351         might_sleep();
1613                                                  1352 
1614         while (!list_empty(reaplist)) {          1353         while (!list_empty(reaplist)) {
1615                 stp = list_first_entry(reapli    1354                 stp = list_first_entry(reaplist, struct nfs4_ol_stateid,
1616                                        st_loc    1355                                        st_locks);
1617                 list_del(&stp->st_locks);        1356                 list_del(&stp->st_locks);
1618                 fp = stp->st_stid.sc_file;       1357                 fp = stp->st_stid.sc_file;
1619                 stp->st_stid.sc_free(&stp->st    1358                 stp->st_stid.sc_free(&stp->st_stid);
1620                 if (fp)                          1359                 if (fp)
1621                         put_nfs4_file(fp);       1360                         put_nfs4_file(fp);
1622         }                                        1361         }
1623 }                                                1362 }
1624                                                  1363 
1625 static void release_open_stateid_locks(struct    1364 static void release_open_stateid_locks(struct nfs4_ol_stateid *open_stp,
1626                                        struct    1365                                        struct list_head *reaplist)
1627 {                                                1366 {
1628         struct nfs4_ol_stateid *stp;             1367         struct nfs4_ol_stateid *stp;
1629                                                  1368 
1630         lockdep_assert_held(&open_stp->st_sti    1369         lockdep_assert_held(&open_stp->st_stid.sc_client->cl_lock);
1631                                                  1370 
1632         while (!list_empty(&open_stp->st_lock    1371         while (!list_empty(&open_stp->st_locks)) {
1633                 stp = list_entry(open_stp->st    1372                 stp = list_entry(open_stp->st_locks.next,
1634                                 struct nfs4_o    1373                                 struct nfs4_ol_stateid, st_locks);
1635                 unhash_lock_stateid(stp);     !! 1374                 WARN_ON(!unhash_lock_stateid(stp));
1636                 put_ol_stateid_locked(stp, re    1375                 put_ol_stateid_locked(stp, reaplist);
1637         }                                        1376         }
1638 }                                                1377 }
1639                                                  1378 
1640 static bool unhash_open_stateid(struct nfs4_o    1379 static bool unhash_open_stateid(struct nfs4_ol_stateid *stp,
1641                                 struct list_h    1380                                 struct list_head *reaplist)
1642 {                                                1381 {
                                                   >> 1382         bool unhashed;
                                                   >> 1383 
1643         lockdep_assert_held(&stp->st_stid.sc_    1384         lockdep_assert_held(&stp->st_stid.sc_client->cl_lock);
1644                                                  1385 
1645         if (!unhash_ol_stateid(stp))          !! 1386         unhashed = unhash_ol_stateid(stp);
1646                 return false;                 << 
1647         release_open_stateid_locks(stp, reapl    1387         release_open_stateid_locks(stp, reaplist);
1648         return true;                          !! 1388         return unhashed;
1649 }                                                1389 }
1650                                                  1390 
1651 static void release_open_stateid(struct nfs4_    1391 static void release_open_stateid(struct nfs4_ol_stateid *stp)
1652 {                                                1392 {
1653         LIST_HEAD(reaplist);                     1393         LIST_HEAD(reaplist);
1654                                                  1394 
1655         spin_lock(&stp->st_stid.sc_client->cl    1395         spin_lock(&stp->st_stid.sc_client->cl_lock);
1656         stp->st_stid.sc_status |= SC_STATUS_C << 
1657         if (unhash_open_stateid(stp, &reaplis    1396         if (unhash_open_stateid(stp, &reaplist))
1658                 put_ol_stateid_locked(stp, &r    1397                 put_ol_stateid_locked(stp, &reaplist);
1659         spin_unlock(&stp->st_stid.sc_client->    1398         spin_unlock(&stp->st_stid.sc_client->cl_lock);
1660         free_ol_stateid_reaplist(&reaplist);     1399         free_ol_stateid_reaplist(&reaplist);
1661 }                                                1400 }
1662                                                  1401 
1663 static void unhash_openowner_locked(struct nf    1402 static void unhash_openowner_locked(struct nfs4_openowner *oo)
1664 {                                                1403 {
1665         struct nfs4_client *clp = oo->oo_owne    1404         struct nfs4_client *clp = oo->oo_owner.so_client;
1666                                                  1405 
1667         lockdep_assert_held(&clp->cl_lock);      1406         lockdep_assert_held(&clp->cl_lock);
1668                                                  1407 
1669         list_del_init(&oo->oo_owner.so_strhas    1408         list_del_init(&oo->oo_owner.so_strhash);
1670         list_del_init(&oo->oo_perclient);        1409         list_del_init(&oo->oo_perclient);
1671 }                                                1410 }
1672                                                  1411 
1673 static void release_last_closed_stateid(struc    1412 static void release_last_closed_stateid(struct nfs4_openowner *oo)
1674 {                                                1413 {
1675         struct nfsd_net *nn = net_generic(oo-    1414         struct nfsd_net *nn = net_generic(oo->oo_owner.so_client->net,
1676                                           nfs    1415                                           nfsd_net_id);
1677         struct nfs4_ol_stateid *s;               1416         struct nfs4_ol_stateid *s;
1678                                                  1417 
1679         spin_lock(&nn->client_lock);             1418         spin_lock(&nn->client_lock);
1680         s = oo->oo_last_closed_stid;             1419         s = oo->oo_last_closed_stid;
1681         if (s) {                                 1420         if (s) {
1682                 list_del_init(&oo->oo_close_l    1421                 list_del_init(&oo->oo_close_lru);
1683                 oo->oo_last_closed_stid = NUL    1422                 oo->oo_last_closed_stid = NULL;
1684         }                                        1423         }
1685         spin_unlock(&nn->client_lock);           1424         spin_unlock(&nn->client_lock);
1686         if (s)                                   1425         if (s)
1687                 nfs4_put_stid(&s->st_stid);      1426                 nfs4_put_stid(&s->st_stid);
1688 }                                                1427 }
1689                                                  1428 
1690 static void release_openowner(struct nfs4_ope    1429 static void release_openowner(struct nfs4_openowner *oo)
1691 {                                                1430 {
1692         struct nfs4_ol_stateid *stp;             1431         struct nfs4_ol_stateid *stp;
1693         struct nfs4_client *clp = oo->oo_owne    1432         struct nfs4_client *clp = oo->oo_owner.so_client;
1694         LIST_HEAD(reaplist);                  !! 1433         struct list_head reaplist;
                                                   >> 1434 
                                                   >> 1435         INIT_LIST_HEAD(&reaplist);
1695                                                  1436 
1696         spin_lock(&clp->cl_lock);                1437         spin_lock(&clp->cl_lock);
1697         unhash_openowner_locked(oo);             1438         unhash_openowner_locked(oo);
1698         while (!list_empty(&oo->oo_owner.so_s    1439         while (!list_empty(&oo->oo_owner.so_stateids)) {
1699                 stp = list_first_entry(&oo->o    1440                 stp = list_first_entry(&oo->oo_owner.so_stateids,
1700                                 struct nfs4_o    1441                                 struct nfs4_ol_stateid, st_perstateowner);
1701                 if (unhash_open_stateid(stp,     1442                 if (unhash_open_stateid(stp, &reaplist))
1702                         put_ol_stateid_locked    1443                         put_ol_stateid_locked(stp, &reaplist);
1703         }                                        1444         }
1704         spin_unlock(&clp->cl_lock);              1445         spin_unlock(&clp->cl_lock);
1705         free_ol_stateid_reaplist(&reaplist);     1446         free_ol_stateid_reaplist(&reaplist);
1706         release_last_closed_stateid(oo);         1447         release_last_closed_stateid(oo);
1707         nfs4_put_stateowner(&oo->oo_owner);      1448         nfs4_put_stateowner(&oo->oo_owner);
1708 }                                                1449 }
1709                                                  1450 
1710 static struct nfs4_stid *find_one_sb_stid(str << 
1711                                           str << 
1712                                           uns << 
1713 {                                             << 
1714         unsigned long id, tmp;                << 
1715         struct nfs4_stid *stid;               << 
1716                                               << 
1717         spin_lock(&clp->cl_lock);             << 
1718         idr_for_each_entry_ul(&clp->cl_statei << 
1719                 if ((stid->sc_type & sc_types << 
1720                     stid->sc_status == 0 &&   << 
1721                     stid->sc_file->fi_inode-> << 
1722                         refcount_inc(&stid->s << 
1723                         break;                << 
1724                 }                             << 
1725         spin_unlock(&clp->cl_lock);           << 
1726         return stid;                          << 
1727 }                                             << 
1728                                               << 
1729 /**                                           << 
1730  * nfsd4_revoke_states - revoke all nfsv4 sta << 
1731  * @net:  used to identify instance of nfsd ( << 
1732  * @sb:   super_block used to identify target << 
1733  *                                            << 
1734  * All nfs4 states (open, lock, delegation, l << 
1735  * and associated with a file on the given fi << 
1736  * in any files being closed and so all refer << 
1737  * being released.  Thus nfsd will no longer  << 
1738  * unmounted.                                 << 
1739  *                                            << 
1740  * The clients which own the states will subs << 
1741  * states have been "admin-revoked".          << 
1742  */                                           << 
1743 void nfsd4_revoke_states(struct net *net, str << 
1744 {                                             << 
1745         struct nfsd_net *nn = net_generic(net << 
1746         unsigned int idhashval;               << 
1747         unsigned int sc_types;                << 
1748                                               << 
1749         sc_types = SC_TYPE_OPEN | SC_TYPE_LOC << 
1750                                               << 
1751         spin_lock(&nn->client_lock);          << 
1752         for (idhashval = 0; idhashval < CLIEN << 
1753                 struct list_head *head = &nn- << 
1754                 struct nfs4_client *clp;      << 
1755         retry:                                << 
1756                 list_for_each_entry(clp, head << 
1757                         struct nfs4_stid *sti << 
1758                                               << 
1759                         if (stid) {           << 
1760                                 struct nfs4_o << 
1761                                 struct nfs4_d << 
1762                                 struct nfs4_l << 
1763                                               << 
1764                                 spin_unlock(& << 
1765                                 switch (stid- << 
1766                                 case SC_TYPE_ << 
1767                                         stp = << 
1768                                         mutex << 
1769                                               << 
1770                                               << 
1771                                         spin_ << 
1772                                         if (s << 
1773                                               << 
1774                                               << 
1775                                               << 
1776                                               << 
1777                                               << 
1778                                         } els << 
1779                                               << 
1780                                         mutex << 
1781                                         break << 
1782                                 case SC_TYPE_ << 
1783                                         stp = << 
1784                                         mutex << 
1785                                               << 
1786                                         spin_ << 
1787                                         if (s << 
1788                                               << 
1789                                               << 
1790                                               << 
1791                                               << 
1792                                               << 
1793                                               << 
1794                                               << 
1795                                               << 
1796                                               << 
1797                                               << 
1798                                               << 
1799                                               << 
1800                                               << 
1801                                               << 
1802                                               << 
1803                                               << 
1804                                         } els << 
1805                                               << 
1806                                         mutex << 
1807                                         break << 
1808                                 case SC_TYPE_ << 
1809                                         refco << 
1810                                         dp =  << 
1811                                         spin_ << 
1812                                         if (! << 
1813                                               << 
1814                                               << 
1815                                         spin_ << 
1816                                         if (d << 
1817                                               << 
1818                                         break << 
1819                                 case SC_TYPE_ << 
1820                                         ls =  << 
1821                                         nfsd4 << 
1822                                         break << 
1823                                 }             << 
1824                                 nfs4_put_stid << 
1825                                 spin_lock(&nn << 
1826                                 if (clp->cl_m << 
1827                                         /* Al << 
1828                                          * st << 
1829                                          * se << 
1830                                          * se << 
1831                                          */   << 
1832                                         nn->n << 
1833                                               << 
1834                                 goto retry;   << 
1835                         }                     << 
1836                 }                             << 
1837         }                                     << 
1838         spin_unlock(&nn->client_lock);        << 
1839 }                                             << 
1840                                               << 
1841 static inline int                                1451 static inline int
1842 hash_sessionid(struct nfs4_sessionid *session    1452 hash_sessionid(struct nfs4_sessionid *sessionid)
1843 {                                                1453 {
1844         struct nfsd4_sessionid *sid = (struct    1454         struct nfsd4_sessionid *sid = (struct nfsd4_sessionid *)sessionid;
1845                                                  1455 
1846         return sid->sequence % SESSION_HASH_S    1456         return sid->sequence % SESSION_HASH_SIZE;
1847 }                                                1457 }
1848                                                  1458 
1849 #ifdef CONFIG_SUNRPC_DEBUG                       1459 #ifdef CONFIG_SUNRPC_DEBUG
1850 static inline void                               1460 static inline void
1851 dump_sessionid(const char *fn, struct nfs4_se    1461 dump_sessionid(const char *fn, struct nfs4_sessionid *sessionid)
1852 {                                                1462 {
1853         u32 *ptr = (u32 *)(&sessionid->data[0    1463         u32 *ptr = (u32 *)(&sessionid->data[0]);
1854         dprintk("%s: %u:%u:%u:%u\n", fn, ptr[    1464         dprintk("%s: %u:%u:%u:%u\n", fn, ptr[0], ptr[1], ptr[2], ptr[3]);
1855 }                                                1465 }
1856 #else                                            1466 #else
1857 static inline void                               1467 static inline void
1858 dump_sessionid(const char *fn, struct nfs4_se    1468 dump_sessionid(const char *fn, struct nfs4_sessionid *sessionid)
1859 {                                                1469 {
1860 }                                                1470 }
1861 #endif                                           1471 #endif
1862                                                  1472 
1863 /*                                               1473 /*
1864  * Bump the seqid on cstate->replay_owner, an    1474  * Bump the seqid on cstate->replay_owner, and clear replay_owner if it
1865  * won't be used for replay.                     1475  * won't be used for replay.
1866  */                                              1476  */
1867 void nfsd4_bump_seqid(struct nfsd4_compound_s    1477 void nfsd4_bump_seqid(struct nfsd4_compound_state *cstate, __be32 nfserr)
1868 {                                                1478 {
1869         struct nfs4_stateowner *so = cstate->    1479         struct nfs4_stateowner *so = cstate->replay_owner;
1870                                                  1480 
1871         if (nfserr == nfserr_replay_me)          1481         if (nfserr == nfserr_replay_me)
1872                 return;                          1482                 return;
1873                                                  1483 
1874         if (!seqid_mutating_err(ntohl(nfserr)    1484         if (!seqid_mutating_err(ntohl(nfserr))) {
1875                 nfsd4_cstate_clear_replay(cst    1485                 nfsd4_cstate_clear_replay(cstate);
1876                 return;                          1486                 return;
1877         }                                        1487         }
1878         if (!so)                                 1488         if (!so)
1879                 return;                          1489                 return;
1880         if (so->so_is_open_owner)                1490         if (so->so_is_open_owner)
1881                 release_last_closed_stateid(o    1491                 release_last_closed_stateid(openowner(so));
1882         so->so_seqid++;                          1492         so->so_seqid++;
1883         return;                                  1493         return;
1884 }                                                1494 }
1885                                                  1495 
1886 static void                                      1496 static void
1887 gen_sessionid(struct nfsd4_session *ses)         1497 gen_sessionid(struct nfsd4_session *ses)
1888 {                                                1498 {
1889         struct nfs4_client *clp = ses->se_cli    1499         struct nfs4_client *clp = ses->se_client;
1890         struct nfsd4_sessionid *sid;             1500         struct nfsd4_sessionid *sid;
1891                                                  1501 
1892         sid = (struct nfsd4_sessionid *)ses->    1502         sid = (struct nfsd4_sessionid *)ses->se_sessionid.data;
1893         sid->clientid = clp->cl_clientid;        1503         sid->clientid = clp->cl_clientid;
1894         sid->sequence = current_sessionid++;     1504         sid->sequence = current_sessionid++;
1895         sid->reserved = 0;                       1505         sid->reserved = 0;
1896 }                                                1506 }
1897                                                  1507 
1898 /*                                               1508 /*
1899  * The protocol defines ca_maxresponssize_cac    1509  * The protocol defines ca_maxresponssize_cached to include the size of
1900  * the rpc header, but all we need to cache i    1510  * the rpc header, but all we need to cache is the data starting after
1901  * the end of the initial SEQUENCE operation-    1511  * the end of the initial SEQUENCE operation--the rest we regenerate
1902  * each time.  Therefore we can advertise a c    1512  * each time.  Therefore we can advertise a ca_maxresponssize_cached
1903  * value that is the number of bytes in our c    1513  * value that is the number of bytes in our cache plus a few additional
1904  * bytes.  In order to stay on the safe side,    1514  * bytes.  In order to stay on the safe side, and not promise more than
1905  * we can cache, those additional bytes must     1515  * we can cache, those additional bytes must be the minimum possible: 24
1906  * bytes of rpc header (xid through accept st    1516  * bytes of rpc header (xid through accept state, with AUTH_NULL
1907  * verifier), 12 for the compound header (wit    1517  * verifier), 12 for the compound header (with zero-length tag), and 44
1908  * for the SEQUENCE op response:                 1518  * for the SEQUENCE op response:
1909  */                                              1519  */
1910 #define NFSD_MIN_HDR_SEQ_SZ  (24 + 12 + 44)      1520 #define NFSD_MIN_HDR_SEQ_SZ  (24 + 12 + 44)
1911                                                  1521 
1912 static void                                      1522 static void
1913 free_session_slots(struct nfsd4_session *ses)    1523 free_session_slots(struct nfsd4_session *ses)
1914 {                                                1524 {
1915         int i;                                   1525         int i;
1916                                                  1526 
1917         for (i = 0; i < ses->se_fchannel.maxr    1527         for (i = 0; i < ses->se_fchannel.maxreqs; i++) {
1918                 free_svc_cred(&ses->se_slots[    1528                 free_svc_cred(&ses->se_slots[i]->sl_cred);
1919                 kfree(ses->se_slots[i]);         1529                 kfree(ses->se_slots[i]);
1920         }                                        1530         }
1921 }                                                1531 }
1922                                                  1532 
1923 /*                                               1533 /*
1924  * We don't actually need to cache the rpc an    1534  * We don't actually need to cache the rpc and session headers, so we
1925  * can allocate a little less for each slot:     1535  * can allocate a little less for each slot:
1926  */                                              1536  */
1927 static inline u32 slot_bytes(struct nfsd4_cha    1537 static inline u32 slot_bytes(struct nfsd4_channel_attrs *ca)
1928 {                                                1538 {
1929         u32 size;                                1539         u32 size;
1930                                                  1540 
1931         if (ca->maxresp_cached < NFSD_MIN_HDR    1541         if (ca->maxresp_cached < NFSD_MIN_HDR_SEQ_SZ)
1932                 size = 0;                        1542                 size = 0;
1933         else                                     1543         else
1934                 size = ca->maxresp_cached - N    1544                 size = ca->maxresp_cached - NFSD_MIN_HDR_SEQ_SZ;
1935         return size + sizeof(struct nfsd4_slo    1545         return size + sizeof(struct nfsd4_slot);
1936 }                                                1546 }
1937                                                  1547 
1938 /*                                               1548 /*
1939  * XXX: If we run out of reserved DRC memory     1549  * XXX: If we run out of reserved DRC memory we could (up to a point)
1940  * re-negotiate active sessions and reduce th    1550  * re-negotiate active sessions and reduce their slot usage to make
1941  * room for new connections. For now we just     1551  * room for new connections. For now we just fail the create session.
1942  */                                              1552  */
1943 static u32 nfsd4_get_drc_mem(struct nfsd4_cha !! 1553 static u32 nfsd4_get_drc_mem(struct nfsd4_channel_attrs *ca)
1944 {                                                1554 {
1945         u32 slotsize = slot_bytes(ca);           1555         u32 slotsize = slot_bytes(ca);
1946         u32 num = ca->maxreqs;                   1556         u32 num = ca->maxreqs;
1947         unsigned long avail, total_avail;        1557         unsigned long avail, total_avail;
1948         unsigned int scale_factor;            << 
1949                                                  1558 
1950         spin_lock(&nfsd_drc_lock);               1559         spin_lock(&nfsd_drc_lock);
1951         if (nfsd_drc_max_mem > nfsd_drc_mem_u !! 1560         total_avail = nfsd_drc_max_mem - nfsd_drc_mem_used;
1952                 total_avail = nfsd_drc_max_me << 
1953         else                                  << 
1954                 /* We have handed out more sp << 
1955                  * set_max_drc() to allow.  T << 
1956                  * problem as long as that do << 
1957                  * have lots more due to inte << 
1958                  */                           << 
1959                 total_avail = 0;              << 
1960         avail = min((unsigned long)NFSD_MAX_M    1561         avail = min((unsigned long)NFSD_MAX_MEM_PER_SESSION, total_avail);
1961         /*                                       1562         /*
1962          * Never use more than a fraction of  !! 1563          * Never use more than a third of the remaining memory,
1963          * unless it's the only way to give t !! 1564          * unless it's the only way to give this client a slot:
1964          * The chosen fraction is either 1/8  << 
1965          * whichever is smaller.  This ensure << 
1966          * slots to support multiple clients  << 
1967          * Give the client one slot even if t << 
1968          * over-allocation--it is better than << 
1969          */                                      1565          */
1970         scale_factor = max_t(unsigned int, 8, !! 1566         avail = clamp_t(unsigned long, avail, slotsize, total_avail/3);
1971                                               << 
1972         avail = clamp_t(unsigned long, avail, << 
1973                         total_avail/scale_fac << 
1974         num = min_t(int, num, avail / slotsiz    1567         num = min_t(int, num, avail / slotsize);
1975         num = max_t(int, num, 1);             << 
1976         nfsd_drc_mem_used += num * slotsize;     1568         nfsd_drc_mem_used += num * slotsize;
1977         spin_unlock(&nfsd_drc_lock);             1569         spin_unlock(&nfsd_drc_lock);
1978                                                  1570 
1979         return num;                              1571         return num;
1980 }                                                1572 }
1981                                                  1573 
1982 static void nfsd4_put_drc_mem(struct nfsd4_ch    1574 static void nfsd4_put_drc_mem(struct nfsd4_channel_attrs *ca)
1983 {                                                1575 {
1984         int slotsize = slot_bytes(ca);           1576         int slotsize = slot_bytes(ca);
1985                                                  1577 
1986         spin_lock(&nfsd_drc_lock);               1578         spin_lock(&nfsd_drc_lock);
1987         nfsd_drc_mem_used -= slotsize * ca->m    1579         nfsd_drc_mem_used -= slotsize * ca->maxreqs;
1988         spin_unlock(&nfsd_drc_lock);             1580         spin_unlock(&nfsd_drc_lock);
1989 }                                                1581 }
1990                                                  1582 
1991 static struct nfsd4_session *alloc_session(st    1583 static struct nfsd4_session *alloc_session(struct nfsd4_channel_attrs *fattrs,
1992                                            st    1584                                            struct nfsd4_channel_attrs *battrs)
1993 {                                                1585 {
1994         int numslots = fattrs->maxreqs;          1586         int numslots = fattrs->maxreqs;
1995         int slotsize = slot_bytes(fattrs);       1587         int slotsize = slot_bytes(fattrs);
1996         struct nfsd4_session *new;               1588         struct nfsd4_session *new;
1997         int i;                                !! 1589         int mem, i;
1998                                                  1590 
1999         BUILD_BUG_ON(struct_size(new, se_slot !! 1591         BUILD_BUG_ON(NFSD_MAX_SLOTS_PER_SESSION * sizeof(struct nfsd4_slot *)
2000                      > PAGE_SIZE);            !! 1592                         + sizeof(struct nfsd4_session) > PAGE_SIZE);
                                                   >> 1593         mem = numslots * sizeof(struct nfsd4_slot *);
2001                                                  1594 
2002         new = kzalloc(struct_size(new, se_slo !! 1595         new = kzalloc(sizeof(*new) + mem, GFP_KERNEL);
2003         if (!new)                                1596         if (!new)
2004                 return NULL;                     1597                 return NULL;
2005         /* allocate each struct nfsd4_slot an    1598         /* allocate each struct nfsd4_slot and data cache in one piece */
2006         for (i = 0; i < numslots; i++) {         1599         for (i = 0; i < numslots; i++) {
2007                 new->se_slots[i] = kzalloc(sl    1600                 new->se_slots[i] = kzalloc(slotsize, GFP_KERNEL);
2008                 if (!new->se_slots[i])           1601                 if (!new->se_slots[i])
2009                         goto out_free;           1602                         goto out_free;
2010         }                                        1603         }
2011                                                  1604 
2012         memcpy(&new->se_fchannel, fattrs, siz    1605         memcpy(&new->se_fchannel, fattrs, sizeof(struct nfsd4_channel_attrs));
2013         memcpy(&new->se_bchannel, battrs, siz    1606         memcpy(&new->se_bchannel, battrs, sizeof(struct nfsd4_channel_attrs));
2014                                                  1607 
2015         return new;                              1608         return new;
2016 out_free:                                        1609 out_free:
2017         while (i--)                              1610         while (i--)
2018                 kfree(new->se_slots[i]);         1611                 kfree(new->se_slots[i]);
2019         kfree(new);                              1612         kfree(new);
2020         return NULL;                             1613         return NULL;
2021 }                                                1614 }
2022                                                  1615 
2023 static void free_conn(struct nfsd4_conn *c)      1616 static void free_conn(struct nfsd4_conn *c)
2024 {                                                1617 {
2025         svc_xprt_put(c->cn_xprt);                1618         svc_xprt_put(c->cn_xprt);
2026         kfree(c);                                1619         kfree(c);
2027 }                                                1620 }
2028                                                  1621 
2029 static void nfsd4_conn_lost(struct svc_xpt_us    1622 static void nfsd4_conn_lost(struct svc_xpt_user *u)
2030 {                                                1623 {
2031         struct nfsd4_conn *c = container_of(u    1624         struct nfsd4_conn *c = container_of(u, struct nfsd4_conn, cn_xpt_user);
2032         struct nfs4_client *clp = c->cn_sessi    1625         struct nfs4_client *clp = c->cn_session->se_client;
2033                                                  1626 
2034         trace_nfsd_cb_lost(clp);              << 
2035                                               << 
2036         spin_lock(&clp->cl_lock);                1627         spin_lock(&clp->cl_lock);
2037         if (!list_empty(&c->cn_persession)) {    1628         if (!list_empty(&c->cn_persession)) {
2038                 list_del(&c->cn_persession);     1629                 list_del(&c->cn_persession);
2039                 free_conn(c);                    1630                 free_conn(c);
2040         }                                        1631         }
2041         nfsd4_probe_callback(clp);               1632         nfsd4_probe_callback(clp);
2042         spin_unlock(&clp->cl_lock);              1633         spin_unlock(&clp->cl_lock);
2043 }                                                1634 }
2044                                                  1635 
2045 static struct nfsd4_conn *alloc_conn(struct s    1636 static struct nfsd4_conn *alloc_conn(struct svc_rqst *rqstp, u32 flags)
2046 {                                                1637 {
2047         struct nfsd4_conn *conn;                 1638         struct nfsd4_conn *conn;
2048                                                  1639 
2049         conn = kmalloc(sizeof(struct nfsd4_co    1640         conn = kmalloc(sizeof(struct nfsd4_conn), GFP_KERNEL);
2050         if (!conn)                               1641         if (!conn)
2051                 return NULL;                     1642                 return NULL;
2052         svc_xprt_get(rqstp->rq_xprt);            1643         svc_xprt_get(rqstp->rq_xprt);
2053         conn->cn_xprt = rqstp->rq_xprt;          1644         conn->cn_xprt = rqstp->rq_xprt;
2054         conn->cn_flags = flags;                  1645         conn->cn_flags = flags;
2055         INIT_LIST_HEAD(&conn->cn_xpt_user.lis    1646         INIT_LIST_HEAD(&conn->cn_xpt_user.list);
2056         return conn;                             1647         return conn;
2057 }                                                1648 }
2058                                                  1649 
2059 static void __nfsd4_hash_conn(struct nfsd4_co    1650 static void __nfsd4_hash_conn(struct nfsd4_conn *conn, struct nfsd4_session *ses)
2060 {                                                1651 {
2061         conn->cn_session = ses;                  1652         conn->cn_session = ses;
2062         list_add(&conn->cn_persession, &ses->    1653         list_add(&conn->cn_persession, &ses->se_conns);
2063 }                                                1654 }
2064                                                  1655 
2065 static void nfsd4_hash_conn(struct nfsd4_conn    1656 static void nfsd4_hash_conn(struct nfsd4_conn *conn, struct nfsd4_session *ses)
2066 {                                                1657 {
2067         struct nfs4_client *clp = ses->se_cli    1658         struct nfs4_client *clp = ses->se_client;
2068                                                  1659 
2069         spin_lock(&clp->cl_lock);                1660         spin_lock(&clp->cl_lock);
2070         __nfsd4_hash_conn(conn, ses);            1661         __nfsd4_hash_conn(conn, ses);
2071         spin_unlock(&clp->cl_lock);              1662         spin_unlock(&clp->cl_lock);
2072 }                                                1663 }
2073                                                  1664 
2074 static int nfsd4_register_conn(struct nfsd4_c    1665 static int nfsd4_register_conn(struct nfsd4_conn *conn)
2075 {                                                1666 {
2076         conn->cn_xpt_user.callback = nfsd4_co    1667         conn->cn_xpt_user.callback = nfsd4_conn_lost;
2077         return register_xpt_user(conn->cn_xpr    1668         return register_xpt_user(conn->cn_xprt, &conn->cn_xpt_user);
2078 }                                                1669 }
2079                                                  1670 
2080 static void nfsd4_init_conn(struct svc_rqst *    1671 static void nfsd4_init_conn(struct svc_rqst *rqstp, struct nfsd4_conn *conn, struct nfsd4_session *ses)
2081 {                                                1672 {
2082         int ret;                                 1673         int ret;
2083                                                  1674 
2084         nfsd4_hash_conn(conn, ses);              1675         nfsd4_hash_conn(conn, ses);
2085         ret = nfsd4_register_conn(conn);         1676         ret = nfsd4_register_conn(conn);
2086         if (ret)                                 1677         if (ret)
2087                 /* oops; xprt is already down    1678                 /* oops; xprt is already down: */
2088                 nfsd4_conn_lost(&conn->cn_xpt    1679                 nfsd4_conn_lost(&conn->cn_xpt_user);
2089         /* We may have gained or lost a callb    1680         /* We may have gained or lost a callback channel: */
2090         nfsd4_probe_callback_sync(ses->se_cli    1681         nfsd4_probe_callback_sync(ses->se_client);
2091 }                                                1682 }
2092                                                  1683 
2093 static struct nfsd4_conn *alloc_conn_from_crs    1684 static struct nfsd4_conn *alloc_conn_from_crses(struct svc_rqst *rqstp, struct nfsd4_create_session *cses)
2094 {                                                1685 {
2095         u32 dir = NFS4_CDFC4_FORE;               1686         u32 dir = NFS4_CDFC4_FORE;
2096                                                  1687 
2097         if (cses->flags & SESSION4_BACK_CHAN)    1688         if (cses->flags & SESSION4_BACK_CHAN)
2098                 dir |= NFS4_CDFC4_BACK;          1689                 dir |= NFS4_CDFC4_BACK;
2099         return alloc_conn(rqstp, dir);           1690         return alloc_conn(rqstp, dir);
2100 }                                                1691 }
2101                                                  1692 
2102 /* must be called under client_lock */           1693 /* must be called under client_lock */
2103 static void nfsd4_del_conns(struct nfsd4_sess    1694 static void nfsd4_del_conns(struct nfsd4_session *s)
2104 {                                                1695 {
2105         struct nfs4_client *clp = s->se_clien    1696         struct nfs4_client *clp = s->se_client;
2106         struct nfsd4_conn *c;                    1697         struct nfsd4_conn *c;
2107                                                  1698 
2108         spin_lock(&clp->cl_lock);                1699         spin_lock(&clp->cl_lock);
2109         while (!list_empty(&s->se_conns)) {      1700         while (!list_empty(&s->se_conns)) {
2110                 c = list_first_entry(&s->se_c    1701                 c = list_first_entry(&s->se_conns, struct nfsd4_conn, cn_persession);
2111                 list_del_init(&c->cn_persessi    1702                 list_del_init(&c->cn_persession);
2112                 spin_unlock(&clp->cl_lock);      1703                 spin_unlock(&clp->cl_lock);
2113                                                  1704 
2114                 unregister_xpt_user(c->cn_xpr    1705                 unregister_xpt_user(c->cn_xprt, &c->cn_xpt_user);
2115                 free_conn(c);                    1706                 free_conn(c);
2116                                                  1707 
2117                 spin_lock(&clp->cl_lock);        1708                 spin_lock(&clp->cl_lock);
2118         }                                        1709         }
2119         spin_unlock(&clp->cl_lock);              1710         spin_unlock(&clp->cl_lock);
2120 }                                                1711 }
2121                                                  1712 
2122 static void __free_session(struct nfsd4_sessi    1713 static void __free_session(struct nfsd4_session *ses)
2123 {                                                1714 {
2124         free_session_slots(ses);                 1715         free_session_slots(ses);
2125         kfree(ses);                              1716         kfree(ses);
2126 }                                                1717 }
2127                                                  1718 
2128 static void free_session(struct nfsd4_session    1719 static void free_session(struct nfsd4_session *ses)
2129 {                                                1720 {
2130         nfsd4_del_conns(ses);                    1721         nfsd4_del_conns(ses);
2131         nfsd4_put_drc_mem(&ses->se_fchannel);    1722         nfsd4_put_drc_mem(&ses->se_fchannel);
2132         __free_session(ses);                     1723         __free_session(ses);
2133 }                                                1724 }
2134                                                  1725 
2135 static void init_session(struct svc_rqst *rqs    1726 static void init_session(struct svc_rqst *rqstp, struct nfsd4_session *new, struct nfs4_client *clp, struct nfsd4_create_session *cses)
2136 {                                                1727 {
2137         int idx;                                 1728         int idx;
2138         struct nfsd_net *nn = net_generic(SVC    1729         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
2139                                                  1730 
2140         new->se_client = clp;                    1731         new->se_client = clp;
2141         gen_sessionid(new);                      1732         gen_sessionid(new);
2142                                                  1733 
2143         INIT_LIST_HEAD(&new->se_conns);          1734         INIT_LIST_HEAD(&new->se_conns);
2144                                                  1735 
2145         new->se_cb_seq_nr = 1;                   1736         new->se_cb_seq_nr = 1;
2146         new->se_flags = cses->flags;             1737         new->se_flags = cses->flags;
2147         new->se_cb_prog = cses->callback_prog    1738         new->se_cb_prog = cses->callback_prog;
2148         new->se_cb_sec = cses->cb_sec;           1739         new->se_cb_sec = cses->cb_sec;
2149         atomic_set(&new->se_ref, 0);             1740         atomic_set(&new->se_ref, 0);
2150         idx = hash_sessionid(&new->se_session    1741         idx = hash_sessionid(&new->se_sessionid);
2151         list_add(&new->se_hash, &nn->sessioni    1742         list_add(&new->se_hash, &nn->sessionid_hashtbl[idx]);
2152         spin_lock(&clp->cl_lock);                1743         spin_lock(&clp->cl_lock);
2153         list_add(&new->se_perclnt, &clp->cl_s    1744         list_add(&new->se_perclnt, &clp->cl_sessions);
2154         spin_unlock(&clp->cl_lock);              1745         spin_unlock(&clp->cl_lock);
2155                                                  1746 
2156         {                                        1747         {
2157                 struct sockaddr *sa = svc_add    1748                 struct sockaddr *sa = svc_addr(rqstp);
2158                 /*                               1749                 /*
2159                  * This is a little silly; wi    1750                  * This is a little silly; with sessions there's no real
2160                  * use for the callback addre    1751                  * use for the callback address.  Use the peer address
2161                  * as a reasonable default fo    1752                  * as a reasonable default for now, but consider fixing
2162                  * the rpc client not to requ    1753                  * the rpc client not to require an address in the
2163                  * future:                       1754                  * future:
2164                  */                              1755                  */
2165                 rpc_copy_addr((struct sockadd    1756                 rpc_copy_addr((struct sockaddr *)&clp->cl_cb_conn.cb_addr, sa);
2166                 clp->cl_cb_conn.cb_addrlen =     1757                 clp->cl_cb_conn.cb_addrlen = svc_addr_len(sa);
2167         }                                        1758         }
2168 }                                                1759 }
2169                                                  1760 
2170 /* caller must hold client_lock */               1761 /* caller must hold client_lock */
2171 static struct nfsd4_session *                    1762 static struct nfsd4_session *
2172 __find_in_sessionid_hashtbl(struct nfs4_sessi    1763 __find_in_sessionid_hashtbl(struct nfs4_sessionid *sessionid, struct net *net)
2173 {                                                1764 {
2174         struct nfsd4_session *elem;              1765         struct nfsd4_session *elem;
2175         int idx;                                 1766         int idx;
2176         struct nfsd_net *nn = net_generic(net    1767         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
2177                                                  1768 
2178         lockdep_assert_held(&nn->client_lock)    1769         lockdep_assert_held(&nn->client_lock);
2179                                                  1770 
2180         dump_sessionid(__func__, sessionid);     1771         dump_sessionid(__func__, sessionid);
2181         idx = hash_sessionid(sessionid);         1772         idx = hash_sessionid(sessionid);
2182         /* Search in the appropriate list */     1773         /* Search in the appropriate list */
2183         list_for_each_entry(elem, &nn->sessio    1774         list_for_each_entry(elem, &nn->sessionid_hashtbl[idx], se_hash) {
2184                 if (!memcmp(elem->se_sessioni    1775                 if (!memcmp(elem->se_sessionid.data, sessionid->data,
2185                             NFS4_MAX_SESSIONI    1776                             NFS4_MAX_SESSIONID_LEN)) {
2186                         return elem;             1777                         return elem;
2187                 }                                1778                 }
2188         }                                        1779         }
2189                                                  1780 
2190         dprintk("%s: session not found\n", __    1781         dprintk("%s: session not found\n", __func__);
2191         return NULL;                             1782         return NULL;
2192 }                                                1783 }
2193                                                  1784 
2194 static struct nfsd4_session *                    1785 static struct nfsd4_session *
2195 find_in_sessionid_hashtbl(struct nfs4_session    1786 find_in_sessionid_hashtbl(struct nfs4_sessionid *sessionid, struct net *net,
2196                 __be32 *ret)                     1787                 __be32 *ret)
2197 {                                                1788 {
2198         struct nfsd4_session *session;           1789         struct nfsd4_session *session;
2199         __be32 status = nfserr_badsession;       1790         __be32 status = nfserr_badsession;
2200                                                  1791 
2201         session = __find_in_sessionid_hashtbl    1792         session = __find_in_sessionid_hashtbl(sessionid, net);
2202         if (!session)                            1793         if (!session)
2203                 goto out;                        1794                 goto out;
2204         status = nfsd4_get_session_locked(ses    1795         status = nfsd4_get_session_locked(session);
2205         if (status)                              1796         if (status)
2206                 session = NULL;                  1797                 session = NULL;
2207 out:                                             1798 out:
2208         *ret = status;                           1799         *ret = status;
2209         return session;                          1800         return session;
2210 }                                                1801 }
2211                                                  1802 
2212 /* caller must hold client_lock */               1803 /* caller must hold client_lock */
2213 static void                                      1804 static void
2214 unhash_session(struct nfsd4_session *ses)        1805 unhash_session(struct nfsd4_session *ses)
2215 {                                                1806 {
2216         struct nfs4_client *clp = ses->se_cli    1807         struct nfs4_client *clp = ses->se_client;
2217         struct nfsd_net *nn = net_generic(clp    1808         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
2218                                                  1809 
2219         lockdep_assert_held(&nn->client_lock)    1810         lockdep_assert_held(&nn->client_lock);
2220                                                  1811 
2221         list_del(&ses->se_hash);                 1812         list_del(&ses->se_hash);
2222         spin_lock(&ses->se_client->cl_lock);     1813         spin_lock(&ses->se_client->cl_lock);
2223         list_del(&ses->se_perclnt);              1814         list_del(&ses->se_perclnt);
2224         spin_unlock(&ses->se_client->cl_lock)    1815         spin_unlock(&ses->se_client->cl_lock);
2225 }                                                1816 }
2226                                                  1817 
2227 /* SETCLIENTID and SETCLIENTID_CONFIRM Helper    1818 /* SETCLIENTID and SETCLIENTID_CONFIRM Helper functions */
2228 static int                                       1819 static int
2229 STALE_CLIENTID(clientid_t *clid, struct nfsd_    1820 STALE_CLIENTID(clientid_t *clid, struct nfsd_net *nn)
2230 {                                                1821 {
2231         /*                                       1822         /*
2232          * We're assuming the clid was not gi    1823          * We're assuming the clid was not given out from a boot
2233          * precisely 2^32 (about 136 years) b    1824          * precisely 2^32 (about 136 years) before this one.  That seems
2234          * a safe assumption:                    1825          * a safe assumption:
2235          */                                      1826          */
2236         if (clid->cl_boot == (u32)nn->boot_ti    1827         if (clid->cl_boot == (u32)nn->boot_time)
2237                 return 0;                        1828                 return 0;
2238         trace_nfsd_clid_stale(clid);          !! 1829         dprintk("NFSD stale clientid (%08x/%08x) boot_time %08lx\n",
                                                   >> 1830                 clid->cl_boot, clid->cl_id, nn->boot_time);
2239         return 1;                                1831         return 1;
2240 }                                                1832 }
2241                                                  1833 
2242 /*                                               1834 /* 
2243  * XXX Should we use a slab cache ?              1835  * XXX Should we use a slab cache ?
2244  * This type of memory management is somewhat    1836  * This type of memory management is somewhat inefficient, but we use it
2245  * anyway since SETCLIENTID is not a common o    1837  * anyway since SETCLIENTID is not a common operation.
2246  */                                              1838  */
2247 static struct nfs4_client *alloc_client(struc !! 1839 static struct nfs4_client *alloc_client(struct xdr_netobj name)
2248                                 struct nfsd_n << 
2249 {                                                1840 {
2250         struct nfs4_client *clp;                 1841         struct nfs4_client *clp;
2251         int i;                                   1842         int i;
2252                                                  1843 
2253         if (atomic_read(&nn->nfs4_client_coun << 
2254                 mod_delayed_work(laundry_wq,  << 
2255                 return NULL;                  << 
2256         }                                     << 
2257         clp = kmem_cache_zalloc(client_slab,     1844         clp = kmem_cache_zalloc(client_slab, GFP_KERNEL);
2258         if (clp == NULL)                         1845         if (clp == NULL)
2259                 return NULL;                     1846                 return NULL;
2260         xdr_netobj_dup(&clp->cl_name, &name,  !! 1847         clp->cl_name.data = kmemdup(name.data, name.len, GFP_KERNEL);
2261         if (clp->cl_name.data == NULL)           1848         if (clp->cl_name.data == NULL)
2262                 goto err_no_name;                1849                 goto err_no_name;
2263         clp->cl_ownerstr_hashtbl = kmalloc_ar    1850         clp->cl_ownerstr_hashtbl = kmalloc_array(OWNER_HASH_SIZE,
2264                                                  1851                                                  sizeof(struct list_head),
2265                                                  1852                                                  GFP_KERNEL);
2266         if (!clp->cl_ownerstr_hashtbl)           1853         if (!clp->cl_ownerstr_hashtbl)
2267                 goto err_no_hashtbl;             1854                 goto err_no_hashtbl;
2268         clp->cl_callback_wq = alloc_ordered_w << 
2269         if (!clp->cl_callback_wq)             << 
2270                 goto err_no_callback_wq;      << 
2271                                               << 
2272         for (i = 0; i < OWNER_HASH_SIZE; i++)    1855         for (i = 0; i < OWNER_HASH_SIZE; i++)
2273                 INIT_LIST_HEAD(&clp->cl_owner    1856                 INIT_LIST_HEAD(&clp->cl_ownerstr_hashtbl[i]);
                                                   >> 1857         clp->cl_name.len = name.len;
2274         INIT_LIST_HEAD(&clp->cl_sessions);       1858         INIT_LIST_HEAD(&clp->cl_sessions);
2275         idr_init(&clp->cl_stateids);             1859         idr_init(&clp->cl_stateids);
2276         atomic_set(&clp->cl_rpc_users, 0);    !! 1860         atomic_set(&clp->cl_refcount, 0);
2277         clp->cl_cb_state = NFSD4_CB_UNKNOWN;     1861         clp->cl_cb_state = NFSD4_CB_UNKNOWN;
2278         clp->cl_state = NFSD4_ACTIVE;         << 
2279         atomic_inc(&nn->nfs4_client_count);   << 
2280         atomic_set(&clp->cl_delegs_in_recall, << 
2281         INIT_LIST_HEAD(&clp->cl_idhash);         1862         INIT_LIST_HEAD(&clp->cl_idhash);
2282         INIT_LIST_HEAD(&clp->cl_openowners);     1863         INIT_LIST_HEAD(&clp->cl_openowners);
2283         INIT_LIST_HEAD(&clp->cl_delegations);    1864         INIT_LIST_HEAD(&clp->cl_delegations);
2284         INIT_LIST_HEAD(&clp->cl_lru);            1865         INIT_LIST_HEAD(&clp->cl_lru);
2285         INIT_LIST_HEAD(&clp->cl_revoked);        1866         INIT_LIST_HEAD(&clp->cl_revoked);
2286 #ifdef CONFIG_NFSD_PNFS                          1867 #ifdef CONFIG_NFSD_PNFS
2287         INIT_LIST_HEAD(&clp->cl_lo_states);      1868         INIT_LIST_HEAD(&clp->cl_lo_states);
2288 #endif                                           1869 #endif
2289         INIT_LIST_HEAD(&clp->async_copies);      1870         INIT_LIST_HEAD(&clp->async_copies);
2290         spin_lock_init(&clp->async_lock);        1871         spin_lock_init(&clp->async_lock);
2291         spin_lock_init(&clp->cl_lock);           1872         spin_lock_init(&clp->cl_lock);
2292         rpc_init_wait_queue(&clp->cl_cb_waitq    1873         rpc_init_wait_queue(&clp->cl_cb_waitq, "Backchannel slot table");
2293         return clp;                              1874         return clp;
2294 err_no_callback_wq:                           << 
2295         kfree(clp->cl_ownerstr_hashtbl);      << 
2296 err_no_hashtbl:                                  1875 err_no_hashtbl:
2297         kfree(clp->cl_name.data);                1876         kfree(clp->cl_name.data);
2298 err_no_name:                                     1877 err_no_name:
2299         kmem_cache_free(client_slab, clp);       1878         kmem_cache_free(client_slab, clp);
2300         return NULL;                             1879         return NULL;
2301 }                                                1880 }
2302                                                  1881 
2303 static void __free_client(struct kref *k)     << 
2304 {                                             << 
2305         struct nfsdfs_client *c = container_o << 
2306         struct nfs4_client *clp = container_o << 
2307                                               << 
2308         free_svc_cred(&clp->cl_cred);         << 
2309         destroy_workqueue(clp->cl_callback_wq << 
2310         kfree(clp->cl_ownerstr_hashtbl);      << 
2311         kfree(clp->cl_name.data);             << 
2312         kfree(clp->cl_nii_domain.data);       << 
2313         kfree(clp->cl_nii_name.data);         << 
2314         idr_destroy(&clp->cl_stateids);       << 
2315         kfree(clp->cl_ra);                    << 
2316         kmem_cache_free(client_slab, clp);    << 
2317 }                                             << 
2318                                               << 
2319 static void drop_client(struct nfs4_client *c << 
2320 {                                             << 
2321         kref_put(&clp->cl_nfsdfs.cl_ref, __fr << 
2322 }                                             << 
2323                                               << 
2324 static void                                      1882 static void
2325 free_client(struct nfs4_client *clp)             1883 free_client(struct nfs4_client *clp)
2326 {                                                1884 {
2327         while (!list_empty(&clp->cl_sessions)    1885         while (!list_empty(&clp->cl_sessions)) {
2328                 struct nfsd4_session *ses;       1886                 struct nfsd4_session *ses;
2329                 ses = list_entry(clp->cl_sess    1887                 ses = list_entry(clp->cl_sessions.next, struct nfsd4_session,
2330                                 se_perclnt);     1888                                 se_perclnt);
2331                 list_del(&ses->se_perclnt);      1889                 list_del(&ses->se_perclnt);
2332                 WARN_ON_ONCE(atomic_read(&ses    1890                 WARN_ON_ONCE(atomic_read(&ses->se_ref));
2333                 free_session(ses);               1891                 free_session(ses);
2334         }                                        1892         }
2335         rpc_destroy_wait_queue(&clp->cl_cb_wa    1893         rpc_destroy_wait_queue(&clp->cl_cb_waitq);
2336         if (clp->cl_nfsd_dentry) {            !! 1894         free_svc_cred(&clp->cl_cred);
2337                 nfsd_client_rmdir(clp->cl_nfs !! 1895         kfree(clp->cl_ownerstr_hashtbl);
2338                 clp->cl_nfsd_dentry = NULL;   !! 1896         kfree(clp->cl_name.data);
2339                 wake_up_all(&expiry_wq);      !! 1897         idr_destroy(&clp->cl_stateids);
2340         }                                     !! 1898         kmem_cache_free(client_slab, clp);
2341         drop_client(clp);                     << 
2342 }                                                1899 }
2343                                                  1900 
2344 /* must be called under the client_lock */       1901 /* must be called under the client_lock */
2345 static void                                      1902 static void
2346 unhash_client_locked(struct nfs4_client *clp)    1903 unhash_client_locked(struct nfs4_client *clp)
2347 {                                                1904 {
2348         struct nfsd_net *nn = net_generic(clp    1905         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
2349         struct nfsd4_session *ses;               1906         struct nfsd4_session *ses;
2350                                                  1907 
2351         lockdep_assert_held(&nn->client_lock)    1908         lockdep_assert_held(&nn->client_lock);
2352                                                  1909 
2353         /* Mark the client as expired! */        1910         /* Mark the client as expired! */
2354         clp->cl_time = 0;                        1911         clp->cl_time = 0;
2355         /* Make it invisible */                  1912         /* Make it invisible */
2356         if (!list_empty(&clp->cl_idhash)) {      1913         if (!list_empty(&clp->cl_idhash)) {
2357                 list_del_init(&clp->cl_idhash    1914                 list_del_init(&clp->cl_idhash);
2358                 if (test_bit(NFSD4_CLIENT_CON    1915                 if (test_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags))
2359                         rb_erase(&clp->cl_nam    1916                         rb_erase(&clp->cl_namenode, &nn->conf_name_tree);
2360                 else                             1917                 else
2361                         rb_erase(&clp->cl_nam    1918                         rb_erase(&clp->cl_namenode, &nn->unconf_name_tree);
2362         }                                        1919         }
2363         list_del_init(&clp->cl_lru);             1920         list_del_init(&clp->cl_lru);
2364         spin_lock(&clp->cl_lock);                1921         spin_lock(&clp->cl_lock);
2365         list_for_each_entry(ses, &clp->cl_ses    1922         list_for_each_entry(ses, &clp->cl_sessions, se_perclnt)
2366                 list_del_init(&ses->se_hash);    1923                 list_del_init(&ses->se_hash);
2367         spin_unlock(&clp->cl_lock);              1924         spin_unlock(&clp->cl_lock);
2368 }                                                1925 }
2369                                                  1926 
2370 static void                                      1927 static void
2371 unhash_client(struct nfs4_client *clp)           1928 unhash_client(struct nfs4_client *clp)
2372 {                                                1929 {
2373         struct nfsd_net *nn = net_generic(clp    1930         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
2374                                                  1931 
2375         spin_lock(&nn->client_lock);             1932         spin_lock(&nn->client_lock);
2376         unhash_client_locked(clp);               1933         unhash_client_locked(clp);
2377         spin_unlock(&nn->client_lock);           1934         spin_unlock(&nn->client_lock);
2378 }                                                1935 }
2379                                                  1936 
2380 static __be32 mark_client_expired_locked(stru    1937 static __be32 mark_client_expired_locked(struct nfs4_client *clp)
2381 {                                                1938 {
2382         int users = atomic_read(&clp->cl_rpc_ !! 1939         if (atomic_read(&clp->cl_refcount))
2383                                               << 
2384         trace_nfsd_mark_client_expired(clp, u << 
2385                                               << 
2386         if (users)                            << 
2387                 return nfserr_jukebox;           1940                 return nfserr_jukebox;
2388         unhash_client_locked(clp);               1941         unhash_client_locked(clp);
2389         return nfs_ok;                           1942         return nfs_ok;
2390 }                                                1943 }
2391                                                  1944 
2392 static void                                      1945 static void
2393 __destroy_client(struct nfs4_client *clp)        1946 __destroy_client(struct nfs4_client *clp)
2394 {                                                1947 {
2395         struct nfsd_net *nn = net_generic(clp << 
2396         int i;                                   1948         int i;
2397         struct nfs4_openowner *oo;               1949         struct nfs4_openowner *oo;
2398         struct nfs4_delegation *dp;              1950         struct nfs4_delegation *dp;
2399         LIST_HEAD(reaplist);                  !! 1951         struct list_head reaplist;
2400                                                  1952 
                                                   >> 1953         INIT_LIST_HEAD(&reaplist);
2401         spin_lock(&state_lock);                  1954         spin_lock(&state_lock);
2402         while (!list_empty(&clp->cl_delegatio    1955         while (!list_empty(&clp->cl_delegations)) {
2403                 dp = list_entry(clp->cl_deleg    1956                 dp = list_entry(clp->cl_delegations.next, struct nfs4_delegation, dl_perclnt);
2404                 unhash_delegation_locked(dp,  !! 1957                 WARN_ON(!unhash_delegation_locked(dp));
2405                 list_add(&dp->dl_recall_lru,     1958                 list_add(&dp->dl_recall_lru, &reaplist);
2406         }                                        1959         }
2407         spin_unlock(&state_lock);                1960         spin_unlock(&state_lock);
2408         while (!list_empty(&reaplist)) {         1961         while (!list_empty(&reaplist)) {
2409                 dp = list_entry(reaplist.next    1962                 dp = list_entry(reaplist.next, struct nfs4_delegation, dl_recall_lru);
2410                 list_del_init(&dp->dl_recall_    1963                 list_del_init(&dp->dl_recall_lru);
2411                 destroy_unhashed_deleg(dp);      1964                 destroy_unhashed_deleg(dp);
2412         }                                        1965         }
2413         while (!list_empty(&clp->cl_revoked))    1966         while (!list_empty(&clp->cl_revoked)) {
2414                 dp = list_entry(clp->cl_revok    1967                 dp = list_entry(clp->cl_revoked.next, struct nfs4_delegation, dl_recall_lru);
2415                 list_del_init(&dp->dl_recall_    1968                 list_del_init(&dp->dl_recall_lru);
2416                 nfs4_put_stid(&dp->dl_stid);     1969                 nfs4_put_stid(&dp->dl_stid);
2417         }                                        1970         }
2418         while (!list_empty(&clp->cl_openowner    1971         while (!list_empty(&clp->cl_openowners)) {
2419                 oo = list_entry(clp->cl_openo    1972                 oo = list_entry(clp->cl_openowners.next, struct nfs4_openowner, oo_perclient);
2420                 nfs4_get_stateowner(&oo->oo_o    1973                 nfs4_get_stateowner(&oo->oo_owner);
2421                 release_openowner(oo);           1974                 release_openowner(oo);
2422         }                                        1975         }
2423         for (i = 0; i < OWNER_HASH_SIZE; i++)    1976         for (i = 0; i < OWNER_HASH_SIZE; i++) {
2424                 struct nfs4_stateowner *so, *    1977                 struct nfs4_stateowner *so, *tmp;
2425                                                  1978 
2426                 list_for_each_entry_safe(so,     1979                 list_for_each_entry_safe(so, tmp, &clp->cl_ownerstr_hashtbl[i],
2427                                          so_s    1980                                          so_strhash) {
2428                         /* Should be no openo    1981                         /* Should be no openowners at this point */
2429                         WARN_ON_ONCE(so->so_i    1982                         WARN_ON_ONCE(so->so_is_open_owner);
2430                         remove_blocked_locks(    1983                         remove_blocked_locks(lockowner(so));
2431                 }                                1984                 }
2432         }                                        1985         }
2433         nfsd4_return_all_client_layouts(clp);    1986         nfsd4_return_all_client_layouts(clp);
2434         nfsd4_shutdown_copy(clp);                1987         nfsd4_shutdown_copy(clp);
2435         nfsd4_shutdown_callback(clp);            1988         nfsd4_shutdown_callback(clp);
2436         if (clp->cl_cb_conn.cb_xprt)             1989         if (clp->cl_cb_conn.cb_xprt)
2437                 svc_xprt_put(clp->cl_cb_conn.    1990                 svc_xprt_put(clp->cl_cb_conn.cb_xprt);
2438         atomic_add_unless(&nn->nfs4_client_co << 
2439         nfsd4_dec_courtesy_client_count(nn, c << 
2440         free_client(clp);                        1991         free_client(clp);
2441         wake_up_all(&expiry_wq);              << 
2442 }                                                1992 }
2443                                                  1993 
2444 static void                                      1994 static void
2445 destroy_client(struct nfs4_client *clp)          1995 destroy_client(struct nfs4_client *clp)
2446 {                                                1996 {
2447         unhash_client(clp);                      1997         unhash_client(clp);
2448         __destroy_client(clp);                   1998         __destroy_client(clp);
2449 }                                                1999 }
2450                                                  2000 
2451 static void inc_reclaim_complete(struct nfs4_    2001 static void inc_reclaim_complete(struct nfs4_client *clp)
2452 {                                                2002 {
2453         struct nfsd_net *nn = net_generic(clp    2003         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
2454                                                  2004 
2455         if (!nn->track_reclaim_completes)        2005         if (!nn->track_reclaim_completes)
2456                 return;                          2006                 return;
2457         if (!nfsd4_find_reclaim_client(clp->c    2007         if (!nfsd4_find_reclaim_client(clp->cl_name, nn))
2458                 return;                          2008                 return;
2459         if (atomic_inc_return(&nn->nr_reclaim    2009         if (atomic_inc_return(&nn->nr_reclaim_complete) ==
2460                         nn->reclaim_str_hasht    2010                         nn->reclaim_str_hashtbl_size) {
2461                 printk(KERN_INFO "NFSD: all c    2011                 printk(KERN_INFO "NFSD: all clients done reclaiming, ending NFSv4 grace period (net %x)\n",
2462                                 clp->net->ns.    2012                                 clp->net->ns.inum);
2463                 nfsd4_end_grace(nn);             2013                 nfsd4_end_grace(nn);
2464         }                                        2014         }
2465 }                                                2015 }
2466                                                  2016 
2467 static void expire_client(struct nfs4_client     2017 static void expire_client(struct nfs4_client *clp)
2468 {                                                2018 {
2469         unhash_client(clp);                      2019         unhash_client(clp);
2470         nfsd4_client_record_remove(clp);         2020         nfsd4_client_record_remove(clp);
2471         __destroy_client(clp);                   2021         __destroy_client(clp);
2472 }                                                2022 }
2473                                                  2023 
2474 static void copy_verf(struct nfs4_client *tar    2024 static void copy_verf(struct nfs4_client *target, nfs4_verifier *source)
2475 {                                                2025 {
2476         memcpy(target->cl_verifier.data, sour    2026         memcpy(target->cl_verifier.data, source->data,
2477                         sizeof(target->cl_ver    2027                         sizeof(target->cl_verifier.data));
2478 }                                                2028 }
2479                                                  2029 
2480 static void copy_clid(struct nfs4_client *tar    2030 static void copy_clid(struct nfs4_client *target, struct nfs4_client *source)
2481 {                                                2031 {
2482         target->cl_clientid.cl_boot = source-    2032         target->cl_clientid.cl_boot = source->cl_clientid.cl_boot; 
2483         target->cl_clientid.cl_id = source->c    2033         target->cl_clientid.cl_id = source->cl_clientid.cl_id; 
2484 }                                                2034 }
2485                                                  2035 
2486 static int copy_cred(struct svc_cred *target,    2036 static int copy_cred(struct svc_cred *target, struct svc_cred *source)
2487 {                                                2037 {
2488         target->cr_principal = kstrdup(source    2038         target->cr_principal = kstrdup(source->cr_principal, GFP_KERNEL);
2489         target->cr_raw_principal = kstrdup(so    2039         target->cr_raw_principal = kstrdup(source->cr_raw_principal,
2490                                                  2040                                                                 GFP_KERNEL);
2491         target->cr_targ_princ = kstrdup(sourc    2041         target->cr_targ_princ = kstrdup(source->cr_targ_princ, GFP_KERNEL);
2492         if ((source->cr_principal && !target-    2042         if ((source->cr_principal && !target->cr_principal) ||
2493             (source->cr_raw_principal && !tar    2043             (source->cr_raw_principal && !target->cr_raw_principal) ||
2494             (source->cr_targ_princ && !target    2044             (source->cr_targ_princ && !target->cr_targ_princ))
2495                 return -ENOMEM;                  2045                 return -ENOMEM;
2496                                                  2046 
2497         target->cr_flavor = source->cr_flavor    2047         target->cr_flavor = source->cr_flavor;
2498         target->cr_uid = source->cr_uid;         2048         target->cr_uid = source->cr_uid;
2499         target->cr_gid = source->cr_gid;         2049         target->cr_gid = source->cr_gid;
2500         target->cr_group_info = source->cr_gr    2050         target->cr_group_info = source->cr_group_info;
2501         get_group_info(target->cr_group_info)    2051         get_group_info(target->cr_group_info);
2502         target->cr_gss_mech = source->cr_gss_    2052         target->cr_gss_mech = source->cr_gss_mech;
2503         if (source->cr_gss_mech)                 2053         if (source->cr_gss_mech)
2504                 gss_mech_get(source->cr_gss_m    2054                 gss_mech_get(source->cr_gss_mech);
2505         return 0;                                2055         return 0;
2506 }                                                2056 }
2507                                                  2057 
2508 static int                                       2058 static int
2509 compare_blob(const struct xdr_netobj *o1, con    2059 compare_blob(const struct xdr_netobj *o1, const struct xdr_netobj *o2)
2510 {                                                2060 {
2511         if (o1->len < o2->len)                   2061         if (o1->len < o2->len)
2512                 return -1;                       2062                 return -1;
2513         if (o1->len > o2->len)                   2063         if (o1->len > o2->len)
2514                 return 1;                        2064                 return 1;
2515         return memcmp(o1->data, o2->data, o1-    2065         return memcmp(o1->data, o2->data, o1->len);
2516 }                                                2066 }
2517                                                  2067 
2518 static int                                       2068 static int
2519 same_verf(nfs4_verifier *v1, nfs4_verifier *v    2069 same_verf(nfs4_verifier *v1, nfs4_verifier *v2)
2520 {                                                2070 {
2521         return 0 == memcmp(v1->data, v2->data    2071         return 0 == memcmp(v1->data, v2->data, sizeof(v1->data));
2522 }                                                2072 }
2523                                                  2073 
2524 static int                                       2074 static int
2525 same_clid(clientid_t *cl1, clientid_t *cl2)      2075 same_clid(clientid_t *cl1, clientid_t *cl2)
2526 {                                                2076 {
2527         return (cl1->cl_boot == cl2->cl_boot)    2077         return (cl1->cl_boot == cl2->cl_boot) && (cl1->cl_id == cl2->cl_id);
2528 }                                                2078 }
2529                                                  2079 
2530 static bool groups_equal(struct group_info *g    2080 static bool groups_equal(struct group_info *g1, struct group_info *g2)
2531 {                                                2081 {
2532         int i;                                   2082         int i;
2533                                                  2083 
2534         if (g1->ngroups != g2->ngroups)          2084         if (g1->ngroups != g2->ngroups)
2535                 return false;                    2085                 return false;
2536         for (i=0; i<g1->ngroups; i++)            2086         for (i=0; i<g1->ngroups; i++)
2537                 if (!gid_eq(g1->gid[i], g2->g    2087                 if (!gid_eq(g1->gid[i], g2->gid[i]))
2538                         return false;            2088                         return false;
2539         return true;                             2089         return true;
2540 }                                                2090 }
2541                                                  2091 
2542 /*                                               2092 /*
2543  * RFC 3530 language requires clid_inuse be r    2093  * RFC 3530 language requires clid_inuse be returned when the
2544  * "principal" associated with a requests dif    2094  * "principal" associated with a requests differs from that previously
2545  * used.  We use uid, gid's, and gss principa    2095  * used.  We use uid, gid's, and gss principal string as our best
2546  * approximation.  We also don't want to allo    2096  * approximation.  We also don't want to allow non-gss use of a client
2547  * established using gss: in theory cr_princi    2097  * established using gss: in theory cr_principal should catch that
2548  * change, but in practice cr_principal can b    2098  * change, but in practice cr_principal can be null even in the gss case
2549  * since gssd doesn't always pass down a prin    2099  * since gssd doesn't always pass down a principal string.
2550  */                                              2100  */
2551 static bool is_gss_cred(struct svc_cred *cr)     2101 static bool is_gss_cred(struct svc_cred *cr)
2552 {                                                2102 {
2553         /* Is cr_flavor one of the gss "pseud    2103         /* Is cr_flavor one of the gss "pseudoflavors"?: */
2554         return (cr->cr_flavor > RPC_AUTH_MAXF    2104         return (cr->cr_flavor > RPC_AUTH_MAXFLAVOR);
2555 }                                                2105 }
2556                                                  2106 
2557                                                  2107 
2558 static bool                                      2108 static bool
2559 same_creds(struct svc_cred *cr1, struct svc_c    2109 same_creds(struct svc_cred *cr1, struct svc_cred *cr2)
2560 {                                                2110 {
2561         if ((is_gss_cred(cr1) != is_gss_cred(    2111         if ((is_gss_cred(cr1) != is_gss_cred(cr2))
2562                 || (!uid_eq(cr1->cr_uid, cr2-    2112                 || (!uid_eq(cr1->cr_uid, cr2->cr_uid))
2563                 || (!gid_eq(cr1->cr_gid, cr2-    2113                 || (!gid_eq(cr1->cr_gid, cr2->cr_gid))
2564                 || !groups_equal(cr1->cr_grou    2114                 || !groups_equal(cr1->cr_group_info, cr2->cr_group_info))
2565                 return false;                    2115                 return false;
2566         /* XXX: check that cr_targ_princ fiel    2116         /* XXX: check that cr_targ_princ fields match ? */
2567         if (cr1->cr_principal == cr2->cr_prin    2117         if (cr1->cr_principal == cr2->cr_principal)
2568                 return true;                     2118                 return true;
2569         if (!cr1->cr_principal || !cr2->cr_pr    2119         if (!cr1->cr_principal || !cr2->cr_principal)
2570                 return false;                    2120                 return false;
2571         return 0 == strcmp(cr1->cr_principal,    2121         return 0 == strcmp(cr1->cr_principal, cr2->cr_principal);
2572 }                                                2122 }
2573                                                  2123 
2574 static bool svc_rqst_integrity_protected(stru    2124 static bool svc_rqst_integrity_protected(struct svc_rqst *rqstp)
2575 {                                                2125 {
2576         struct svc_cred *cr = &rqstp->rq_cred    2126         struct svc_cred *cr = &rqstp->rq_cred;
2577         u32 service;                             2127         u32 service;
2578                                                  2128 
2579         if (!cr->cr_gss_mech)                    2129         if (!cr->cr_gss_mech)
2580                 return false;                    2130                 return false;
2581         service = gss_pseudoflavor_to_service    2131         service = gss_pseudoflavor_to_service(cr->cr_gss_mech, cr->cr_flavor);
2582         return service == RPC_GSS_SVC_INTEGRI    2132         return service == RPC_GSS_SVC_INTEGRITY ||
2583                service == RPC_GSS_SVC_PRIVACY    2133                service == RPC_GSS_SVC_PRIVACY;
2584 }                                                2134 }
2585                                                  2135 
2586 bool nfsd4_mach_creds_match(struct nfs4_clien    2136 bool nfsd4_mach_creds_match(struct nfs4_client *cl, struct svc_rqst *rqstp)
2587 {                                                2137 {
2588         struct svc_cred *cr = &rqstp->rq_cred    2138         struct svc_cred *cr = &rqstp->rq_cred;
2589                                                  2139 
2590         if (!cl->cl_mach_cred)                   2140         if (!cl->cl_mach_cred)
2591                 return true;                     2141                 return true;
2592         if (cl->cl_cred.cr_gss_mech != cr->cr    2142         if (cl->cl_cred.cr_gss_mech != cr->cr_gss_mech)
2593                 return false;                    2143                 return false;
2594         if (!svc_rqst_integrity_protected(rqs    2144         if (!svc_rqst_integrity_protected(rqstp))
2595                 return false;                    2145                 return false;
2596         if (cl->cl_cred.cr_raw_principal)        2146         if (cl->cl_cred.cr_raw_principal)
2597                 return 0 == strcmp(cl->cl_cre    2147                 return 0 == strcmp(cl->cl_cred.cr_raw_principal,
2598                                                  2148                                                 cr->cr_raw_principal);
2599         if (!cr->cr_principal)                   2149         if (!cr->cr_principal)
2600                 return false;                    2150                 return false;
2601         return 0 == strcmp(cl->cl_cred.cr_pri    2151         return 0 == strcmp(cl->cl_cred.cr_principal, cr->cr_principal);
2602 }                                                2152 }
2603                                                  2153 
2604 static void gen_confirm(struct nfs4_client *c    2154 static void gen_confirm(struct nfs4_client *clp, struct nfsd_net *nn)
2605 {                                                2155 {
2606         __be32 verf[2];                          2156         __be32 verf[2];
2607                                                  2157 
2608         /*                                       2158         /*
2609          * This is opaque to client, so no ne    2159          * This is opaque to client, so no need to byte-swap. Use
2610          * __force to keep sparse happy          2160          * __force to keep sparse happy
2611          */                                      2161          */
2612         verf[0] = (__force __be32)(u32)ktime_ !! 2162         verf[0] = (__force __be32)get_seconds();
2613         verf[1] = (__force __be32)nn->clverif    2163         verf[1] = (__force __be32)nn->clverifier_counter++;
2614         memcpy(clp->cl_confirm.data, verf, si    2164         memcpy(clp->cl_confirm.data, verf, sizeof(clp->cl_confirm.data));
2615 }                                                2165 }
2616                                                  2166 
2617 static void gen_clid(struct nfs4_client *clp,    2167 static void gen_clid(struct nfs4_client *clp, struct nfsd_net *nn)
2618 {                                                2168 {
2619         clp->cl_clientid.cl_boot = (u32)nn->b !! 2169         clp->cl_clientid.cl_boot = nn->boot_time;
2620         clp->cl_clientid.cl_id = nn->clientid    2170         clp->cl_clientid.cl_id = nn->clientid_counter++;
2621         gen_confirm(clp, nn);                    2171         gen_confirm(clp, nn);
2622 }                                                2172 }
2623                                                  2173 
2624 static struct nfs4_stid *                        2174 static struct nfs4_stid *
2625 find_stateid_locked(struct nfs4_client *cl, s    2175 find_stateid_locked(struct nfs4_client *cl, stateid_t *t)
2626 {                                                2176 {
2627         struct nfs4_stid *ret;                   2177         struct nfs4_stid *ret;
2628                                                  2178 
2629         ret = idr_find(&cl->cl_stateids, t->s    2179         ret = idr_find(&cl->cl_stateids, t->si_opaque.so_id);
2630         if (!ret || !ret->sc_type)               2180         if (!ret || !ret->sc_type)
2631                 return NULL;                     2181                 return NULL;
2632         return ret;                              2182         return ret;
2633 }                                                2183 }
2634                                                  2184 
2635 static struct nfs4_stid *                        2185 static struct nfs4_stid *
2636 find_stateid_by_type(struct nfs4_client *cl,  !! 2186 find_stateid_by_type(struct nfs4_client *cl, stateid_t *t, char typemask)
2637                      unsigned short typemask, << 
2638 {                                                2187 {
2639         struct nfs4_stid *s;                     2188         struct nfs4_stid *s;
2640                                                  2189 
2641         spin_lock(&cl->cl_lock);                 2190         spin_lock(&cl->cl_lock);
2642         s = find_stateid_locked(cl, t);          2191         s = find_stateid_locked(cl, t);
2643         if (s != NULL) {                         2192         if (s != NULL) {
2644                 if ((s->sc_status & ~ok_state !! 2193                 if (typemask & s->sc_type)
2645                     (typemask & s->sc_type))  << 
2646                         refcount_inc(&s->sc_c    2194                         refcount_inc(&s->sc_count);
2647                 else                             2195                 else
2648                         s = NULL;                2196                         s = NULL;
2649         }                                        2197         }
2650         spin_unlock(&cl->cl_lock);               2198         spin_unlock(&cl->cl_lock);
2651         return s;                                2199         return s;
2652 }                                                2200 }
2653                                                  2201 
2654 static struct nfs4_client *get_nfsdfs_clp(str << 
2655 {                                             << 
2656         struct nfsdfs_client *nc;             << 
2657         nc = get_nfsdfs_client(inode);        << 
2658         if (!nc)                              << 
2659                 return NULL;                  << 
2660         return container_of(nc, struct nfs4_c << 
2661 }                                             << 
2662                                               << 
2663 static void seq_quote_mem(struct seq_file *m, << 
2664 {                                             << 
2665         seq_puts(m, "\"");                    << 
2666         seq_escape_mem(m, data, len, ESCAPE_H << 
2667         seq_puts(m, "\"");                    << 
2668 }                                             << 
2669                                               << 
2670 static const char *cb_state2str(int state)    << 
2671 {                                             << 
2672         switch (state) {                      << 
2673         case NFSD4_CB_UP:                     << 
2674                 return "UP";                  << 
2675         case NFSD4_CB_UNKNOWN:                << 
2676                 return "UNKNOWN";             << 
2677         case NFSD4_CB_DOWN:                   << 
2678                 return "DOWN";                << 
2679         case NFSD4_CB_FAULT:                  << 
2680                 return "FAULT";               << 
2681         }                                     << 
2682         return "UNDEFINED";                   << 
2683 }                                             << 
2684                                               << 
2685 static int client_info_show(struct seq_file * << 
2686 {                                             << 
2687         struct inode *inode = file_inode(m->f << 
2688         struct nfs4_client *clp;              << 
2689         u64 clid;                             << 
2690                                               << 
2691         clp = get_nfsdfs_clp(inode);          << 
2692         if (!clp)                             << 
2693                 return -ENXIO;                << 
2694         memcpy(&clid, &clp->cl_clientid, size << 
2695         seq_printf(m, "clientid: 0x%llx\n", c << 
2696         seq_printf(m, "address: \"%pISpc\"\n" << 
2697                                               << 
2698         if (clp->cl_state == NFSD4_COURTESY)  << 
2699                 seq_puts(m, "status: courtesy << 
2700         else if (clp->cl_state == NFSD4_EXPIR << 
2701                 seq_puts(m, "status: expirabl << 
2702         else if (test_bit(NFSD4_CLIENT_CONFIR << 
2703                 seq_puts(m, "status: confirme << 
2704         else                                  << 
2705                 seq_puts(m, "status: unconfir << 
2706         seq_printf(m, "seconds from last rene << 
2707                 ktime_get_boottime_seconds()  << 
2708         seq_puts(m, "name: ");                << 
2709         seq_quote_mem(m, clp->cl_name.data, c << 
2710         seq_printf(m, "\nminor version: %d\n" << 
2711         if (clp->cl_nii_domain.data) {        << 
2712                 seq_puts(m, "Implementation d << 
2713                 seq_quote_mem(m, clp->cl_nii_ << 
2714                                         clp-> << 
2715                 seq_puts(m, "\nImplementation << 
2716                 seq_quote_mem(m, clp->cl_nii_ << 
2717                 seq_printf(m, "\nImplementati << 
2718                         clp->cl_nii_time.tv_s << 
2719         }                                     << 
2720         seq_printf(m, "callback state: %s\n", << 
2721         seq_printf(m, "callback address: \"%p << 
2722         seq_printf(m, "admin-revoked states:  << 
2723                    atomic_read(&clp->cl_admin << 
2724         drop_client(clp);                     << 
2725                                               << 
2726         return 0;                             << 
2727 }                                             << 
2728                                               << 
2729 DEFINE_SHOW_ATTRIBUTE(client_info);           << 
2730                                               << 
2731 static void *states_start(struct seq_file *s, << 
2732         __acquires(&clp->cl_lock)             << 
2733 {                                             << 
2734         struct nfs4_client *clp = s->private; << 
2735         unsigned long id = *pos;              << 
2736         void *ret;                            << 
2737                                               << 
2738         spin_lock(&clp->cl_lock);             << 
2739         ret = idr_get_next_ul(&clp->cl_statei << 
2740         *pos = id;                            << 
2741         return ret;                           << 
2742 }                                             << 
2743                                               << 
2744 static void *states_next(struct seq_file *s,  << 
2745 {                                             << 
2746         struct nfs4_client *clp = s->private; << 
2747         unsigned long id = *pos;              << 
2748         void *ret;                            << 
2749                                               << 
2750         id = *pos;                            << 
2751         id++;                                 << 
2752         ret = idr_get_next_ul(&clp->cl_statei << 
2753         *pos = id;                            << 
2754         return ret;                           << 
2755 }                                             << 
2756                                               << 
2757 static void states_stop(struct seq_file *s, v << 
2758         __releases(&clp->cl_lock)             << 
2759 {                                             << 
2760         struct nfs4_client *clp = s->private; << 
2761                                               << 
2762         spin_unlock(&clp->cl_lock);           << 
2763 }                                             << 
2764                                               << 
2765 static void nfs4_show_fname(struct seq_file * << 
2766 {                                             << 
2767          seq_printf(s, "filename: \"%pD2\"",  << 
2768 }                                             << 
2769                                               << 
2770 static void nfs4_show_superblock(struct seq_f << 
2771 {                                             << 
2772         struct inode *inode = file_inode(f->n << 
2773                                               << 
2774         seq_printf(s, "superblock: \"%02x:%02 << 
2775                                         MAJOR << 
2776                                          MINO << 
2777                                          inod << 
2778 }                                             << 
2779                                               << 
2780 static void nfs4_show_owner(struct seq_file * << 
2781 {                                             << 
2782         seq_puts(s, "owner: ");               << 
2783         seq_quote_mem(s, oo->so_owner.data, o << 
2784 }                                             << 
2785                                               << 
2786 static void nfs4_show_stateid(struct seq_file << 
2787 {                                             << 
2788         seq_printf(s, "0x%.8x", stid->si_gene << 
2789         seq_printf(s, "%12phN", &stid->si_opa << 
2790 }                                             << 
2791                                               << 
2792 static int nfs4_show_open(struct seq_file *s, << 
2793 {                                             << 
2794         struct nfs4_ol_stateid *ols;          << 
2795         struct nfs4_file *nf;                 << 
2796         struct nfsd_file *file;               << 
2797         struct nfs4_stateowner *oo;           << 
2798         unsigned int access, deny;            << 
2799                                               << 
2800         ols = openlockstateid(st);            << 
2801         oo = ols->st_stateowner;              << 
2802         nf = st->sc_file;                     << 
2803                                               << 
2804         seq_puts(s, "- ");                    << 
2805         nfs4_show_stateid(s, &st->sc_stateid) << 
2806         seq_puts(s, ": { type: open, ");      << 
2807                                               << 
2808         access = bmap_to_share_mode(ols->st_a << 
2809         deny   = bmap_to_share_mode(ols->st_d << 
2810                                               << 
2811         seq_printf(s, "access: %s%s, ",       << 
2812                 access & NFS4_SHARE_ACCESS_RE << 
2813                 access & NFS4_SHARE_ACCESS_WR << 
2814         seq_printf(s, "deny: %s%s, ",         << 
2815                 deny & NFS4_SHARE_ACCESS_READ << 
2816                 deny & NFS4_SHARE_ACCESS_WRIT << 
2817                                               << 
2818         if (nf) {                             << 
2819                 spin_lock(&nf->fi_lock);      << 
2820                 file = find_any_file_locked(n << 
2821                 if (file) {                   << 
2822                         nfs4_show_superblock( << 
2823                         seq_puts(s, ", ");    << 
2824                         nfs4_show_fname(s, fi << 
2825                         seq_puts(s, ", ");    << 
2826                 }                             << 
2827                 spin_unlock(&nf->fi_lock);    << 
2828         } else                                << 
2829                 seq_puts(s, "closed, ");      << 
2830         nfs4_show_owner(s, oo);               << 
2831         if (st->sc_status & SC_STATUS_ADMIN_R << 
2832                 seq_puts(s, ", admin-revoked" << 
2833         seq_puts(s, " }\n");                  << 
2834         return 0;                             << 
2835 }                                             << 
2836                                               << 
2837 static int nfs4_show_lock(struct seq_file *s, << 
2838 {                                             << 
2839         struct nfs4_ol_stateid *ols;          << 
2840         struct nfs4_file *nf;                 << 
2841         struct nfsd_file *file;               << 
2842         struct nfs4_stateowner *oo;           << 
2843                                               << 
2844         ols = openlockstateid(st);            << 
2845         oo = ols->st_stateowner;              << 
2846         nf = st->sc_file;                     << 
2847                                               << 
2848         seq_puts(s, "- ");                    << 
2849         nfs4_show_stateid(s, &st->sc_stateid) << 
2850         seq_puts(s, ": { type: lock, ");      << 
2851                                               << 
2852         spin_lock(&nf->fi_lock);              << 
2853         file = find_any_file_locked(nf);      << 
2854         if (file) {                           << 
2855                 /*                            << 
2856                  * Note: a lock stateid isn't << 
2857                  * it's the locking state hel << 
2858                  * may be multiple (or no) lo << 
2859                  * (Same for the matter is tr << 
2860                  */                           << 
2861                                               << 
2862                 nfs4_show_superblock(s, file) << 
2863                 /* XXX: open stateid? */      << 
2864                 seq_puts(s, ", ");            << 
2865                 nfs4_show_fname(s, file);     << 
2866                 seq_puts(s, ", ");            << 
2867         }                                     << 
2868         nfs4_show_owner(s, oo);               << 
2869         if (st->sc_status & SC_STATUS_ADMIN_R << 
2870                 seq_puts(s, ", admin-revoked" << 
2871         seq_puts(s, " }\n");                  << 
2872         spin_unlock(&nf->fi_lock);            << 
2873         return 0;                             << 
2874 }                                             << 
2875                                               << 
2876 static int nfs4_show_deleg(struct seq_file *s << 
2877 {                                             << 
2878         struct nfs4_delegation *ds;           << 
2879         struct nfs4_file *nf;                 << 
2880         struct nfsd_file *file;               << 
2881                                               << 
2882         ds = delegstateid(st);                << 
2883         nf = st->sc_file;                     << 
2884                                               << 
2885         seq_puts(s, "- ");                    << 
2886         nfs4_show_stateid(s, &st->sc_stateid) << 
2887         seq_puts(s, ": { type: deleg, ");     << 
2888                                               << 
2889         seq_printf(s, "access: %s",           << 
2890                    ds->dl_type == NFS4_OPEN_D << 
2891                                               << 
2892         /* XXX: lease time, whether it's bein << 
2893                                               << 
2894         spin_lock(&nf->fi_lock);              << 
2895         file = nf->fi_deleg_file;             << 
2896         if (file) {                           << 
2897                 seq_puts(s, ", ");            << 
2898                 nfs4_show_superblock(s, file) << 
2899                 seq_puts(s, ", ");            << 
2900                 nfs4_show_fname(s, file);     << 
2901         }                                     << 
2902         spin_unlock(&nf->fi_lock);            << 
2903         if (st->sc_status & SC_STATUS_ADMIN_R << 
2904                 seq_puts(s, ", admin-revoked" << 
2905         seq_puts(s, " }\n");                  << 
2906         return 0;                             << 
2907 }                                             << 
2908                                               << 
2909 static int nfs4_show_layout(struct seq_file * << 
2910 {                                             << 
2911         struct nfs4_layout_stateid *ls;       << 
2912         struct nfsd_file *file;               << 
2913                                               << 
2914         ls = container_of(st, struct nfs4_lay << 
2915                                               << 
2916         seq_puts(s, "- ");                    << 
2917         nfs4_show_stateid(s, &st->sc_stateid) << 
2918         seq_puts(s, ": { type: layout");      << 
2919                                               << 
2920         /* XXX: What else would be useful? */ << 
2921                                               << 
2922         spin_lock(&ls->ls_stid.sc_file->fi_lo << 
2923         file = ls->ls_file;                   << 
2924         if (file) {                           << 
2925                 seq_puts(s, ", ");            << 
2926                 nfs4_show_superblock(s, file) << 
2927                 seq_puts(s, ", ");            << 
2928                 nfs4_show_fname(s, file);     << 
2929         }                                     << 
2930         spin_unlock(&ls->ls_stid.sc_file->fi_ << 
2931         if (st->sc_status & SC_STATUS_ADMIN_R << 
2932                 seq_puts(s, ", admin-revoked" << 
2933         seq_puts(s, " }\n");                  << 
2934                                               << 
2935         return 0;                             << 
2936 }                                             << 
2937                                               << 
2938 static int states_show(struct seq_file *s, vo << 
2939 {                                             << 
2940         struct nfs4_stid *st = v;             << 
2941                                               << 
2942         switch (st->sc_type) {                << 
2943         case SC_TYPE_OPEN:                    << 
2944                 return nfs4_show_open(s, st); << 
2945         case SC_TYPE_LOCK:                    << 
2946                 return nfs4_show_lock(s, st); << 
2947         case SC_TYPE_DELEG:                   << 
2948                 return nfs4_show_deleg(s, st) << 
2949         case SC_TYPE_LAYOUT:                  << 
2950                 return nfs4_show_layout(s, st << 
2951         default:                              << 
2952                 return 0; /* XXX: or SEQ_SKIP << 
2953         }                                     << 
2954         /* XXX: copy stateids? */             << 
2955 }                                             << 
2956                                               << 
2957 static struct seq_operations states_seq_ops = << 
2958         .start = states_start,                << 
2959         .next = states_next,                  << 
2960         .stop = states_stop,                  << 
2961         .show = states_show                   << 
2962 };                                            << 
2963                                               << 
2964 static int client_states_open(struct inode *i << 
2965 {                                             << 
2966         struct seq_file *s;                   << 
2967         struct nfs4_client *clp;              << 
2968         int ret;                              << 
2969                                               << 
2970         clp = get_nfsdfs_clp(inode);          << 
2971         if (!clp)                             << 
2972                 return -ENXIO;                << 
2973                                               << 
2974         ret = seq_open(file, &states_seq_ops) << 
2975         if (ret)                              << 
2976                 return ret;                   << 
2977         s = file->private_data;               << 
2978         s->private = clp;                     << 
2979         return 0;                             << 
2980 }                                             << 
2981                                               << 
2982 static int client_opens_release(struct inode  << 
2983 {                                             << 
2984         struct seq_file *m = file->private_da << 
2985         struct nfs4_client *clp = m->private; << 
2986                                               << 
2987         /* XXX: alternatively, we could get/d << 
2988         drop_client(clp);                     << 
2989         return seq_release(inode, file);      << 
2990 }                                             << 
2991                                               << 
2992 static const struct file_operations client_st << 
2993         .open           = client_states_open, << 
2994         .read           = seq_read,           << 
2995         .llseek         = seq_lseek,          << 
2996         .release        = client_opens_releas << 
2997 };                                            << 
2998                                               << 
2999 /*                                            << 
3000  * Normally we refuse to destroy clients that << 
3001  * administrator is telling us to just do it. << 
3002  * so the caller has a guarantee that the cli << 
3003  * the time the write returns:                << 
3004  */                                           << 
3005 static void force_expire_client(struct nfs4_c << 
3006 {                                             << 
3007         struct nfsd_net *nn = net_generic(clp << 
3008         bool already_expired;                 << 
3009                                               << 
3010         trace_nfsd_clid_admin_expired(&clp->c << 
3011                                               << 
3012         spin_lock(&nn->client_lock);          << 
3013         clp->cl_time = 0;                     << 
3014         spin_unlock(&nn->client_lock);        << 
3015                                               << 
3016         wait_event(expiry_wq, atomic_read(&cl << 
3017         spin_lock(&nn->client_lock);          << 
3018         already_expired = list_empty(&clp->cl << 
3019         if (!already_expired)                 << 
3020                 unhash_client_locked(clp);    << 
3021         spin_unlock(&nn->client_lock);        << 
3022                                               << 
3023         if (!already_expired)                 << 
3024                 expire_client(clp);           << 
3025         else                                  << 
3026                 wait_event(expiry_wq, clp->cl << 
3027 }                                             << 
3028                                               << 
3029 static ssize_t client_ctl_write(struct file * << 
3030                                    size_t siz << 
3031 {                                             << 
3032         char *data;                           << 
3033         struct nfs4_client *clp;              << 
3034                                               << 
3035         data = simple_transaction_get(file, b << 
3036         if (IS_ERR(data))                     << 
3037                 return PTR_ERR(data);         << 
3038         if (size != 7 || 0 != memcmp(data, "e << 
3039                 return -EINVAL;               << 
3040         clp = get_nfsdfs_clp(file_inode(file) << 
3041         if (!clp)                             << 
3042                 return -ENXIO;                << 
3043         force_expire_client(clp);             << 
3044         drop_client(clp);                     << 
3045         return 7;                             << 
3046 }                                             << 
3047                                               << 
3048 static const struct file_operations client_ct << 
3049         .write          = client_ctl_write,   << 
3050         .release        = simple_transaction_ << 
3051 };                                            << 
3052                                               << 
3053 static const struct tree_descr client_files[] << 
3054         [0] = {"info", &client_info_fops, S_I << 
3055         [1] = {"states", &client_states_fops, << 
3056         [2] = {"ctl", &client_ctl_fops, S_IWU << 
3057         [3] = {""},                           << 
3058 };                                            << 
3059                                               << 
3060 static int                                    << 
3061 nfsd4_cb_recall_any_done(struct nfsd4_callbac << 
3062                                 struct rpc_ta << 
3063 {                                             << 
3064         trace_nfsd_cb_recall_any_done(cb, tas << 
3065         switch (task->tk_status) {            << 
3066         case -NFS4ERR_DELAY:                  << 
3067                 rpc_delay(task, 2 * HZ);      << 
3068                 return 0;                     << 
3069         default:                              << 
3070                 return 1;                     << 
3071         }                                     << 
3072 }                                             << 
3073                                               << 
3074 static void                                   << 
3075 nfsd4_cb_recall_any_release(struct nfsd4_call << 
3076 {                                             << 
3077         struct nfs4_client *clp = cb->cb_clp; << 
3078                                               << 
3079         clear_bit(NFSD4_CLIENT_CB_RECALL_ANY, << 
3080         drop_client(clp);                     << 
3081 }                                             << 
3082                                               << 
3083 static int                                    << 
3084 nfsd4_cb_getattr_done(struct nfsd4_callback * << 
3085 {                                             << 
3086         struct nfs4_cb_fattr *ncf =           << 
3087                         container_of(cb, stru << 
3088         struct nfs4_delegation *dp =          << 
3089                         container_of(ncf, str << 
3090                                               << 
3091         trace_nfsd_cb_getattr_done(&dp->dl_st << 
3092         ncf->ncf_cb_status = task->tk_status; << 
3093         switch (task->tk_status) {            << 
3094         case -NFS4ERR_DELAY:                  << 
3095                 rpc_delay(task, 2 * HZ);      << 
3096                 return 0;                     << 
3097         default:                              << 
3098                 return 1;                     << 
3099         }                                     << 
3100 }                                             << 
3101                                               << 
3102 static void                                   << 
3103 nfsd4_cb_getattr_release(struct nfsd4_callbac << 
3104 {                                             << 
3105         struct nfs4_cb_fattr *ncf =           << 
3106                         container_of(cb, stru << 
3107         struct nfs4_delegation *dp =          << 
3108                         container_of(ncf, str << 
3109                                               << 
3110         clear_and_wake_up_bit(CB_GETATTR_BUSY << 
3111         nfs4_put_stid(&dp->dl_stid);          << 
3112 }                                             << 
3113                                               << 
3114 static const struct nfsd4_callback_ops nfsd4_ << 
3115         .done           = nfsd4_cb_recall_any << 
3116         .release        = nfsd4_cb_recall_any << 
3117         .opcode         = OP_CB_RECALL_ANY,   << 
3118 };                                            << 
3119                                               << 
3120 static const struct nfsd4_callback_ops nfsd4_ << 
3121         .done           = nfsd4_cb_getattr_do << 
3122         .release        = nfsd4_cb_getattr_re << 
3123         .opcode         = OP_CB_GETATTR,      << 
3124 };                                            << 
3125                                               << 
3126 static void nfs4_cb_getattr(struct nfs4_cb_fa << 
3127 {                                             << 
3128         struct nfs4_delegation *dp =          << 
3129                         container_of(ncf, str << 
3130                                               << 
3131         if (test_and_set_bit(CB_GETATTR_BUSY, << 
3132                 return;                       << 
3133         /* set to proper status when nfsd4_cb << 
3134         ncf->ncf_cb_status = NFS4ERR_IO;      << 
3135                                               << 
3136         refcount_inc(&dp->dl_stid.sc_count);  << 
3137         nfsd4_run_cb(&ncf->ncf_getattr);      << 
3138 }                                             << 
3139                                               << 
3140 static struct nfs4_client *create_client(stru    2202 static struct nfs4_client *create_client(struct xdr_netobj name,
3141                 struct svc_rqst *rqstp, nfs4_    2203                 struct svc_rqst *rqstp, nfs4_verifier *verf)
3142 {                                                2204 {
3143         struct nfs4_client *clp;                 2205         struct nfs4_client *clp;
3144         struct sockaddr *sa = svc_addr(rqstp)    2206         struct sockaddr *sa = svc_addr(rqstp);
3145         int ret;                                 2207         int ret;
3146         struct net *net = SVC_NET(rqstp);        2208         struct net *net = SVC_NET(rqstp);
3147         struct nfsd_net *nn = net_generic(net << 
3148         struct dentry *dentries[ARRAY_SIZE(cl << 
3149                                                  2209 
3150         clp = alloc_client(name, nn);         !! 2210         clp = alloc_client(name);
3151         if (clp == NULL)                         2211         if (clp == NULL)
3152                 return NULL;                     2212                 return NULL;
3153                                                  2213 
3154         ret = copy_cred(&clp->cl_cred, &rqstp    2214         ret = copy_cred(&clp->cl_cred, &rqstp->rq_cred);
3155         if (ret) {                               2215         if (ret) {
3156                 free_client(clp);                2216                 free_client(clp);
3157                 return NULL;                     2217                 return NULL;
3158         }                                        2218         }
3159         gen_clid(clp, nn);                    << 
3160         kref_init(&clp->cl_nfsdfs.cl_ref);    << 
3161         nfsd4_init_cb(&clp->cl_cb_null, clp,     2219         nfsd4_init_cb(&clp->cl_cb_null, clp, NULL, NFSPROC4_CLNT_CB_NULL);
3162         clp->cl_time = ktime_get_boottime_sec !! 2220         clp->cl_time = get_seconds();
3163         clear_bit(0, &clp->cl_cb_slot_busy);     2221         clear_bit(0, &clp->cl_cb_slot_busy);
3164         copy_verf(clp, verf);                    2222         copy_verf(clp, verf);
3165         memcpy(&clp->cl_addr, sa, sizeof(stru !! 2223         rpc_copy_addr((struct sockaddr *) &clp->cl_addr, sa);
3166         clp->cl_cb_session = NULL;               2224         clp->cl_cb_session = NULL;
3167         clp->net = net;                          2225         clp->net = net;
3168         clp->cl_nfsd_dentry = nfsd_client_mkd << 
3169                 nn, &clp->cl_nfsdfs,          << 
3170                 clp->cl_clientid.cl_id - nn-> << 
3171                 client_files, dentries);      << 
3172         clp->cl_nfsd_info_dentry = dentries[0 << 
3173         if (!clp->cl_nfsd_dentry) {           << 
3174                 free_client(clp);             << 
3175                 return NULL;                  << 
3176         }                                     << 
3177         clp->cl_ra = kzalloc(sizeof(*clp->cl_ << 
3178         if (!clp->cl_ra) {                    << 
3179                 free_client(clp);             << 
3180                 return NULL;                  << 
3181         }                                     << 
3182         clp->cl_ra_time = 0;                  << 
3183         nfsd4_init_cb(&clp->cl_ra->ra_cb, clp << 
3184                         NFSPROC4_CLNT_CB_RECA << 
3185         return clp;                              2226         return clp;
3186 }                                                2227 }
3187                                                  2228 
3188 static void                                      2229 static void
3189 add_clp_to_name_tree(struct nfs4_client *new_    2230 add_clp_to_name_tree(struct nfs4_client *new_clp, struct rb_root *root)
3190 {                                                2231 {
3191         struct rb_node **new = &(root->rb_nod    2232         struct rb_node **new = &(root->rb_node), *parent = NULL;
3192         struct nfs4_client *clp;                 2233         struct nfs4_client *clp;
3193                                                  2234 
3194         while (*new) {                           2235         while (*new) {
3195                 clp = rb_entry(*new, struct n    2236                 clp = rb_entry(*new, struct nfs4_client, cl_namenode);
3196                 parent = *new;                   2237                 parent = *new;
3197                                                  2238 
3198                 if (compare_blob(&clp->cl_nam    2239                 if (compare_blob(&clp->cl_name, &new_clp->cl_name) > 0)
3199                         new = &((*new)->rb_le    2240                         new = &((*new)->rb_left);
3200                 else                             2241                 else
3201                         new = &((*new)->rb_ri    2242                         new = &((*new)->rb_right);
3202         }                                        2243         }
3203                                                  2244 
3204         rb_link_node(&new_clp->cl_namenode, p    2245         rb_link_node(&new_clp->cl_namenode, parent, new);
3205         rb_insert_color(&new_clp->cl_namenode    2246         rb_insert_color(&new_clp->cl_namenode, root);
3206 }                                                2247 }
3207                                                  2248 
3208 static struct nfs4_client *                      2249 static struct nfs4_client *
3209 find_clp_in_name_tree(struct xdr_netobj *name    2250 find_clp_in_name_tree(struct xdr_netobj *name, struct rb_root *root)
3210 {                                                2251 {
3211         int cmp;                                 2252         int cmp;
3212         struct rb_node *node = root->rb_node;    2253         struct rb_node *node = root->rb_node;
3213         struct nfs4_client *clp;                 2254         struct nfs4_client *clp;
3214                                                  2255 
3215         while (node) {                           2256         while (node) {
3216                 clp = rb_entry(node, struct n    2257                 clp = rb_entry(node, struct nfs4_client, cl_namenode);
3217                 cmp = compare_blob(&clp->cl_n    2258                 cmp = compare_blob(&clp->cl_name, name);
3218                 if (cmp > 0)                     2259                 if (cmp > 0)
3219                         node = node->rb_left;    2260                         node = node->rb_left;
3220                 else if (cmp < 0)                2261                 else if (cmp < 0)
3221                         node = node->rb_right    2262                         node = node->rb_right;
3222                 else                             2263                 else
3223                         return clp;              2264                         return clp;
3224         }                                        2265         }
3225         return NULL;                             2266         return NULL;
3226 }                                                2267 }
3227                                                  2268 
3228 static void                                      2269 static void
3229 add_to_unconfirmed(struct nfs4_client *clp)      2270 add_to_unconfirmed(struct nfs4_client *clp)
3230 {                                                2271 {
3231         unsigned int idhashval;                  2272         unsigned int idhashval;
3232         struct nfsd_net *nn = net_generic(clp    2273         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
3233                                                  2274 
3234         lockdep_assert_held(&nn->client_lock)    2275         lockdep_assert_held(&nn->client_lock);
3235                                                  2276 
3236         clear_bit(NFSD4_CLIENT_CONFIRMED, &cl    2277         clear_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags);
3237         add_clp_to_name_tree(clp, &nn->unconf    2278         add_clp_to_name_tree(clp, &nn->unconf_name_tree);
3238         idhashval = clientid_hashval(clp->cl_    2279         idhashval = clientid_hashval(clp->cl_clientid.cl_id);
3239         list_add(&clp->cl_idhash, &nn->unconf    2280         list_add(&clp->cl_idhash, &nn->unconf_id_hashtbl[idhashval]);
3240         renew_client_locked(clp);                2281         renew_client_locked(clp);
3241 }                                                2282 }
3242                                                  2283 
3243 static void                                      2284 static void
3244 move_to_confirmed(struct nfs4_client *clp)       2285 move_to_confirmed(struct nfs4_client *clp)
3245 {                                                2286 {
3246         unsigned int idhashval = clientid_has    2287         unsigned int idhashval = clientid_hashval(clp->cl_clientid.cl_id);
3247         struct nfsd_net *nn = net_generic(clp    2288         struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
3248                                                  2289 
3249         lockdep_assert_held(&nn->client_lock)    2290         lockdep_assert_held(&nn->client_lock);
3250                                                  2291 
                                                   >> 2292         dprintk("NFSD: move_to_confirm nfs4_client %p\n", clp);
3251         list_move(&clp->cl_idhash, &nn->conf_    2293         list_move(&clp->cl_idhash, &nn->conf_id_hashtbl[idhashval]);
3252         rb_erase(&clp->cl_namenode, &nn->unco    2294         rb_erase(&clp->cl_namenode, &nn->unconf_name_tree);
3253         add_clp_to_name_tree(clp, &nn->conf_n    2295         add_clp_to_name_tree(clp, &nn->conf_name_tree);
3254         set_bit(NFSD4_CLIENT_CONFIRMED, &clp-    2296         set_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags);
3255         trace_nfsd_clid_confirmed(&clp->cl_cl << 
3256         renew_client_locked(clp);                2297         renew_client_locked(clp);
3257 }                                                2298 }
3258                                                  2299 
3259 static struct nfs4_client *                      2300 static struct nfs4_client *
3260 find_client_in_id_table(struct list_head *tbl    2301 find_client_in_id_table(struct list_head *tbl, clientid_t *clid, bool sessions)
3261 {                                                2302 {
3262         struct nfs4_client *clp;                 2303         struct nfs4_client *clp;
3263         unsigned int idhashval = clientid_has    2304         unsigned int idhashval = clientid_hashval(clid->cl_id);
3264                                                  2305 
3265         list_for_each_entry(clp, &tbl[idhashv    2306         list_for_each_entry(clp, &tbl[idhashval], cl_idhash) {
3266                 if (same_clid(&clp->cl_client    2307                 if (same_clid(&clp->cl_clientid, clid)) {
3267                         if ((bool)clp->cl_min    2308                         if ((bool)clp->cl_minorversion != sessions)
3268                                 return NULL;     2309                                 return NULL;
3269                         renew_client_locked(c    2310                         renew_client_locked(clp);
3270                         return clp;              2311                         return clp;
3271                 }                                2312                 }
3272         }                                        2313         }
3273         return NULL;                             2314         return NULL;
3274 }                                                2315 }
3275                                                  2316 
3276 static struct nfs4_client *                      2317 static struct nfs4_client *
3277 find_confirmed_client(clientid_t *clid, bool     2318 find_confirmed_client(clientid_t *clid, bool sessions, struct nfsd_net *nn)
3278 {                                                2319 {
3279         struct list_head *tbl = nn->conf_id_h    2320         struct list_head *tbl = nn->conf_id_hashtbl;
3280                                                  2321 
3281         lockdep_assert_held(&nn->client_lock)    2322         lockdep_assert_held(&nn->client_lock);
3282         return find_client_in_id_table(tbl, c    2323         return find_client_in_id_table(tbl, clid, sessions);
3283 }                                                2324 }
3284                                                  2325 
3285 static struct nfs4_client *                      2326 static struct nfs4_client *
3286 find_unconfirmed_client(clientid_t *clid, boo    2327 find_unconfirmed_client(clientid_t *clid, bool sessions, struct nfsd_net *nn)
3287 {                                                2328 {
3288         struct list_head *tbl = nn->unconf_id    2329         struct list_head *tbl = nn->unconf_id_hashtbl;
3289                                                  2330 
3290         lockdep_assert_held(&nn->client_lock)    2331         lockdep_assert_held(&nn->client_lock);
3291         return find_client_in_id_table(tbl, c    2332         return find_client_in_id_table(tbl, clid, sessions);
3292 }                                                2333 }
3293                                                  2334 
3294 static bool clp_used_exchangeid(struct nfs4_c    2335 static bool clp_used_exchangeid(struct nfs4_client *clp)
3295 {                                                2336 {
3296         return clp->cl_exchange_flags != 0;      2337         return clp->cl_exchange_flags != 0;
3297 }                                                2338 } 
3298                                                  2339 
3299 static struct nfs4_client *                      2340 static struct nfs4_client *
3300 find_confirmed_client_by_name(struct xdr_neto    2341 find_confirmed_client_by_name(struct xdr_netobj *name, struct nfsd_net *nn)
3301 {                                                2342 {
3302         lockdep_assert_held(&nn->client_lock)    2343         lockdep_assert_held(&nn->client_lock);
3303         return find_clp_in_name_tree(name, &n    2344         return find_clp_in_name_tree(name, &nn->conf_name_tree);
3304 }                                                2345 }
3305                                                  2346 
3306 static struct nfs4_client *                      2347 static struct nfs4_client *
3307 find_unconfirmed_client_by_name(struct xdr_ne    2348 find_unconfirmed_client_by_name(struct xdr_netobj *name, struct nfsd_net *nn)
3308 {                                                2349 {
3309         lockdep_assert_held(&nn->client_lock)    2350         lockdep_assert_held(&nn->client_lock);
3310         return find_clp_in_name_tree(name, &n    2351         return find_clp_in_name_tree(name, &nn->unconf_name_tree);
3311 }                                                2352 }
3312                                                  2353 
3313 static void                                      2354 static void
3314 gen_callback(struct nfs4_client *clp, struct     2355 gen_callback(struct nfs4_client *clp, struct nfsd4_setclientid *se, struct svc_rqst *rqstp)
3315 {                                                2356 {
3316         struct nfs4_cb_conn *conn = &clp->cl_    2357         struct nfs4_cb_conn *conn = &clp->cl_cb_conn;
3317         struct sockaddr *sa = svc_addr(rqstp)    2358         struct sockaddr *sa = svc_addr(rqstp);
3318         u32 scopeid = rpc_get_scope_id(sa);      2359         u32 scopeid = rpc_get_scope_id(sa);
3319         unsigned short expected_family;          2360         unsigned short expected_family;
3320                                                  2361 
3321         /* Currently, we only support tcp and    2362         /* Currently, we only support tcp and tcp6 for the callback channel */
3322         if (se->se_callback_netid_len == 3 &&    2363         if (se->se_callback_netid_len == 3 &&
3323             !memcmp(se->se_callback_netid_val    2364             !memcmp(se->se_callback_netid_val, "tcp", 3))
3324                 expected_family = AF_INET;       2365                 expected_family = AF_INET;
3325         else if (se->se_callback_netid_len ==    2366         else if (se->se_callback_netid_len == 4 &&
3326                  !memcmp(se->se_callback_neti    2367                  !memcmp(se->se_callback_netid_val, "tcp6", 4))
3327                 expected_family = AF_INET6;      2368                 expected_family = AF_INET6;
3328         else                                     2369         else
3329                 goto out_err;                    2370                 goto out_err;
3330                                                  2371 
3331         conn->cb_addrlen = rpc_uaddr2sockaddr    2372         conn->cb_addrlen = rpc_uaddr2sockaddr(clp->net, se->se_callback_addr_val,
3332                                             s    2373                                             se->se_callback_addr_len,
3333                                             (    2374                                             (struct sockaddr *)&conn->cb_addr,
3334                                             s    2375                                             sizeof(conn->cb_addr));
3335                                                  2376 
3336         if (!conn->cb_addrlen || conn->cb_add    2377         if (!conn->cb_addrlen || conn->cb_addr.ss_family != expected_family)
3337                 goto out_err;                    2378                 goto out_err;
3338                                                  2379 
3339         if (conn->cb_addr.ss_family == AF_INE    2380         if (conn->cb_addr.ss_family == AF_INET6)
3340                 ((struct sockaddr_in6 *)&conn    2381                 ((struct sockaddr_in6 *)&conn->cb_addr)->sin6_scope_id = scopeid;
3341                                                  2382 
3342         conn->cb_prog = se->se_callback_prog;    2383         conn->cb_prog = se->se_callback_prog;
3343         conn->cb_ident = se->se_callback_iden    2384         conn->cb_ident = se->se_callback_ident;
3344         memcpy(&conn->cb_saddr, &rqstp->rq_da    2385         memcpy(&conn->cb_saddr, &rqstp->rq_daddr, rqstp->rq_daddrlen);
3345         trace_nfsd_cb_args(clp, conn);        << 
3346         return;                                  2386         return;
3347 out_err:                                         2387 out_err:
3348         conn->cb_addr.ss_family = AF_UNSPEC;     2388         conn->cb_addr.ss_family = AF_UNSPEC;
3349         conn->cb_addrlen = 0;                    2389         conn->cb_addrlen = 0;
3350         trace_nfsd_cb_nodelegs(clp);          !! 2390         dprintk("NFSD: this client (clientid %08x/%08x) "
                                                   >> 2391                 "will not receive delegations\n",
                                                   >> 2392                 clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id);
                                                   >> 2393 
3351         return;                                  2394         return;
3352 }                                                2395 }
3353                                                  2396 
3354 /*                                               2397 /*
3355  * Cache a reply. nfsd4_check_resp_size() has    2398  * Cache a reply. nfsd4_check_resp_size() has bounded the cache size.
3356  */                                              2399  */
3357 static void                                      2400 static void
3358 nfsd4_store_cache_entry(struct nfsd4_compound    2401 nfsd4_store_cache_entry(struct nfsd4_compoundres *resp)
3359 {                                                2402 {
3360         struct xdr_buf *buf = resp->xdr->buf; !! 2403         struct xdr_buf *buf = resp->xdr.buf;
3361         struct nfsd4_slot *slot = resp->cstat    2404         struct nfsd4_slot *slot = resp->cstate.slot;
3362         unsigned int base;                       2405         unsigned int base;
3363                                                  2406 
3364         dprintk("--> %s slot %p\n", __func__,    2407         dprintk("--> %s slot %p\n", __func__, slot);
3365                                                  2408 
3366         slot->sl_flags |= NFSD4_SLOT_INITIALI    2409         slot->sl_flags |= NFSD4_SLOT_INITIALIZED;
3367         slot->sl_opcnt = resp->opcnt;            2410         slot->sl_opcnt = resp->opcnt;
3368         slot->sl_status = resp->cstate.status    2411         slot->sl_status = resp->cstate.status;
3369         free_svc_cred(&slot->sl_cred);           2412         free_svc_cred(&slot->sl_cred);
3370         copy_cred(&slot->sl_cred, &resp->rqst    2413         copy_cred(&slot->sl_cred, &resp->rqstp->rq_cred);
3371                                                  2414 
3372         if (!nfsd4_cache_this(resp)) {           2415         if (!nfsd4_cache_this(resp)) {
3373                 slot->sl_flags &= ~NFSD4_SLOT    2416                 slot->sl_flags &= ~NFSD4_SLOT_CACHED;
3374                 return;                          2417                 return;
3375         }                                        2418         }
3376         slot->sl_flags |= NFSD4_SLOT_CACHED;     2419         slot->sl_flags |= NFSD4_SLOT_CACHED;
3377                                                  2420 
3378         base = resp->cstate.data_offset;         2421         base = resp->cstate.data_offset;
3379         slot->sl_datalen = buf->len - base;      2422         slot->sl_datalen = buf->len - base;
3380         if (read_bytes_from_xdr_buf(buf, base    2423         if (read_bytes_from_xdr_buf(buf, base, slot->sl_data, slot->sl_datalen))
3381                 WARN(1, "%s: sessions DRC cou    2424                 WARN(1, "%s: sessions DRC could not cache compound\n",
3382                      __func__);                  2425                      __func__);
3383         return;                                  2426         return;
3384 }                                                2427 }
3385                                                  2428 
3386 /*                                               2429 /*
3387  * Encode the replay sequence operation from     2430  * Encode the replay sequence operation from the slot values.
3388  * If cachethis is FALSE encode the uncached     2431  * If cachethis is FALSE encode the uncached rep error on the next
3389  * operation which sets resp->p and increment    2432  * operation which sets resp->p and increments resp->opcnt for
3390  * nfs4svc_encode_compoundres.                   2433  * nfs4svc_encode_compoundres.
3391  *                                               2434  *
3392  */                                              2435  */
3393 static __be32                                    2436 static __be32
3394 nfsd4_enc_sequence_replay(struct nfsd4_compou    2437 nfsd4_enc_sequence_replay(struct nfsd4_compoundargs *args,
3395                           struct nfsd4_compou    2438                           struct nfsd4_compoundres *resp)
3396 {                                                2439 {
3397         struct nfsd4_op *op;                     2440         struct nfsd4_op *op;
3398         struct nfsd4_slot *slot = resp->cstat    2441         struct nfsd4_slot *slot = resp->cstate.slot;
3399                                                  2442 
3400         /* Encode the replayed sequence opera    2443         /* Encode the replayed sequence operation */
3401         op = &args->ops[resp->opcnt - 1];        2444         op = &args->ops[resp->opcnt - 1];
3402         nfsd4_encode_operation(resp, op);        2445         nfsd4_encode_operation(resp, op);
3403                                                  2446 
3404         if (slot->sl_flags & NFSD4_SLOT_CACHE    2447         if (slot->sl_flags & NFSD4_SLOT_CACHED)
3405                 return op->status;               2448                 return op->status;
3406         if (args->opcnt == 1) {                  2449         if (args->opcnt == 1) {
3407                 /*                               2450                 /*
3408                  * The original operation was    2451                  * The original operation wasn't a solo sequence--we
3409                  * always cache those--so thi    2452                  * always cache those--so this retry must not match the
3410                  * original:                     2453                  * original:
3411                  */                              2454                  */
3412                 op->status = nfserr_seq_false    2455                 op->status = nfserr_seq_false_retry;
3413         } else {                                 2456         } else {
3414                 op = &args->ops[resp->opcnt++    2457                 op = &args->ops[resp->opcnt++];
3415                 op->status = nfserr_retry_unc    2458                 op->status = nfserr_retry_uncached_rep;
3416                 nfsd4_encode_operation(resp,     2459                 nfsd4_encode_operation(resp, op);
3417         }                                        2460         }
3418         return op->status;                       2461         return op->status;
3419 }                                                2462 }
3420                                                  2463 
3421 /*                                               2464 /*
3422  * The sequence operation is not cached becau    2465  * The sequence operation is not cached because we can use the slot and
3423  * session values.                               2466  * session values.
3424  */                                              2467  */
3425 static __be32                                    2468 static __be32
3426 nfsd4_replay_cache_entry(struct nfsd4_compoun    2469 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
3427                          struct nfsd4_sequenc    2470                          struct nfsd4_sequence *seq)
3428 {                                                2471 {
3429         struct nfsd4_slot *slot = resp->cstat    2472         struct nfsd4_slot *slot = resp->cstate.slot;
3430         struct xdr_stream *xdr = resp->xdr;   !! 2473         struct xdr_stream *xdr = &resp->xdr;
3431         __be32 *p;                               2474         __be32 *p;
3432         __be32 status;                           2475         __be32 status;
3433                                                  2476 
3434         dprintk("--> %s slot %p\n", __func__,    2477         dprintk("--> %s slot %p\n", __func__, slot);
3435                                                  2478 
3436         status = nfsd4_enc_sequence_replay(re    2479         status = nfsd4_enc_sequence_replay(resp->rqstp->rq_argp, resp);
3437         if (status)                              2480         if (status)
3438                 return status;                   2481                 return status;
3439                                                  2482 
3440         p = xdr_reserve_space(xdr, slot->sl_d    2483         p = xdr_reserve_space(xdr, slot->sl_datalen);
3441         if (!p) {                                2484         if (!p) {
3442                 WARN_ON_ONCE(1);                 2485                 WARN_ON_ONCE(1);
3443                 return nfserr_serverfault;       2486                 return nfserr_serverfault;
3444         }                                        2487         }
3445         xdr_encode_opaque_fixed(p, slot->sl_d    2488         xdr_encode_opaque_fixed(p, slot->sl_data, slot->sl_datalen);
3446         xdr_commit_encode(xdr);                  2489         xdr_commit_encode(xdr);
3447                                                  2490 
3448         resp->opcnt = slot->sl_opcnt;            2491         resp->opcnt = slot->sl_opcnt;
3449         return slot->sl_status;                  2492         return slot->sl_status;
3450 }                                                2493 }
3451                                                  2494 
3452 /*                                               2495 /*
3453  * Set the exchange_id flags returned by the     2496  * Set the exchange_id flags returned by the server.
3454  */                                              2497  */
3455 static void                                      2498 static void
3456 nfsd4_set_ex_flags(struct nfs4_client *new, s    2499 nfsd4_set_ex_flags(struct nfs4_client *new, struct nfsd4_exchange_id *clid)
3457 {                                                2500 {
3458 #ifdef CONFIG_NFSD_PNFS                          2501 #ifdef CONFIG_NFSD_PNFS
3459         new->cl_exchange_flags |= EXCHGID4_FL    2502         new->cl_exchange_flags |= EXCHGID4_FLAG_USE_PNFS_MDS;
3460 #else                                            2503 #else
3461         new->cl_exchange_flags |= EXCHGID4_FL    2504         new->cl_exchange_flags |= EXCHGID4_FLAG_USE_NON_PNFS;
3462 #endif                                           2505 #endif
3463                                                  2506 
3464         /* Referrals are supported, Migration    2507         /* Referrals are supported, Migration is not. */
3465         new->cl_exchange_flags |= EXCHGID4_FL    2508         new->cl_exchange_flags |= EXCHGID4_FLAG_SUPP_MOVED_REFER;
3466                                                  2509 
3467         /* set the wire flags to return to cl    2510         /* set the wire flags to return to client. */
3468         clid->flags = new->cl_exchange_flags;    2511         clid->flags = new->cl_exchange_flags;
3469 }                                                2512 }
3470                                                  2513 
3471 static bool client_has_openowners(struct nfs4    2514 static bool client_has_openowners(struct nfs4_client *clp)
3472 {                                                2515 {
3473         struct nfs4_openowner *oo;               2516         struct nfs4_openowner *oo;
3474                                                  2517 
3475         list_for_each_entry(oo, &clp->cl_open    2518         list_for_each_entry(oo, &clp->cl_openowners, oo_perclient) {
3476                 if (!list_empty(&oo->oo_owner    2519                 if (!list_empty(&oo->oo_owner.so_stateids))
3477                         return true;             2520                         return true;
3478         }                                        2521         }
3479         return false;                            2522         return false;
3480 }                                                2523 }
3481                                                  2524 
3482 static bool client_has_state(struct nfs4_clie    2525 static bool client_has_state(struct nfs4_client *clp)
3483 {                                                2526 {
3484         return client_has_openowners(clp)        2527         return client_has_openowners(clp)
3485 #ifdef CONFIG_NFSD_PNFS                          2528 #ifdef CONFIG_NFSD_PNFS
3486                 || !list_empty(&clp->cl_lo_st    2529                 || !list_empty(&clp->cl_lo_states)
3487 #endif                                           2530 #endif
3488                 || !list_empty(&clp->cl_deleg    2531                 || !list_empty(&clp->cl_delegations)
3489                 || !list_empty(&clp->cl_sessi    2532                 || !list_empty(&clp->cl_sessions)
3490                 || !list_empty(&clp->async_co    2533                 || !list_empty(&clp->async_copies);
3491 }                                                2534 }
3492                                                  2535 
3493 static __be32 copy_impl_id(struct nfs4_client << 
3494                                 struct nfsd4_ << 
3495 {                                             << 
3496         if (!exid->nii_domain.data)           << 
3497                 return 0;                     << 
3498         xdr_netobj_dup(&clp->cl_nii_domain, & << 
3499         if (!clp->cl_nii_domain.data)         << 
3500                 return nfserr_jukebox;        << 
3501         xdr_netobj_dup(&clp->cl_nii_name, &ex << 
3502         if (!clp->cl_nii_name.data)           << 
3503                 return nfserr_jukebox;        << 
3504         clp->cl_nii_time = exid->nii_time;    << 
3505         return 0;                             << 
3506 }                                             << 
3507                                               << 
3508 __be32                                           2536 __be32
3509 nfsd4_exchange_id(struct svc_rqst *rqstp, str    2537 nfsd4_exchange_id(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
3510                 union nfsd4_op_u *u)             2538                 union nfsd4_op_u *u)
3511 {                                                2539 {
3512         struct nfsd4_exchange_id *exid = &u->    2540         struct nfsd4_exchange_id *exid = &u->exchange_id;
3513         struct nfs4_client *conf, *new;          2541         struct nfs4_client *conf, *new;
3514         struct nfs4_client *unconf = NULL;       2542         struct nfs4_client *unconf = NULL;
3515         __be32 status;                           2543         __be32 status;
3516         char                    addr_str[INET    2544         char                    addr_str[INET6_ADDRSTRLEN];
3517         nfs4_verifier           verf = exid->    2545         nfs4_verifier           verf = exid->verifier;
3518         struct sockaddr         *sa = svc_add    2546         struct sockaddr         *sa = svc_addr(rqstp);
3519         bool    update = exid->flags & EXCHGI    2547         bool    update = exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A;
3520         struct nfsd_net         *nn = net_gen    2548         struct nfsd_net         *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
3521                                                  2549 
3522         rpc_ntop(sa, addr_str, sizeof(addr_st    2550         rpc_ntop(sa, addr_str, sizeof(addr_str));
3523         dprintk("%s rqstp=%p exid=%p clname.l    2551         dprintk("%s rqstp=%p exid=%p clname.len=%u clname.data=%p "
3524                 "ip_addr=%s flags %x, spa_how !! 2552                 "ip_addr=%s flags %x, spa_how %d\n",
3525                 __func__, rqstp, exid, exid->    2553                 __func__, rqstp, exid, exid->clname.len, exid->clname.data,
3526                 addr_str, exid->flags, exid->    2554                 addr_str, exid->flags, exid->spa_how);
3527                                                  2555 
3528         if (exid->flags & ~EXCHGID4_FLAG_MASK    2556         if (exid->flags & ~EXCHGID4_FLAG_MASK_A)
3529                 return nfserr_inval;             2557                 return nfserr_inval;
3530                                                  2558 
3531         new = create_client(exid->clname, rqs    2559         new = create_client(exid->clname, rqstp, &verf);
3532         if (new == NULL)                         2560         if (new == NULL)
3533                 return nfserr_jukebox;           2561                 return nfserr_jukebox;
3534         status = copy_impl_id(new, exid);     << 
3535         if (status)                           << 
3536                 goto out_nolock;              << 
3537                                                  2562 
3538         switch (exid->spa_how) {                 2563         switch (exid->spa_how) {
3539         case SP4_MACH_CRED:                      2564         case SP4_MACH_CRED:
3540                 exid->spo_must_enforce[0] = 0    2565                 exid->spo_must_enforce[0] = 0;
3541                 exid->spo_must_enforce[1] = (    2566                 exid->spo_must_enforce[1] = (
3542                         1 << (OP_BIND_CONN_TO    2567                         1 << (OP_BIND_CONN_TO_SESSION - 32) |
3543                         1 << (OP_EXCHANGE_ID     2568                         1 << (OP_EXCHANGE_ID - 32) |
3544                         1 << (OP_CREATE_SESSI    2569                         1 << (OP_CREATE_SESSION - 32) |
3545                         1 << (OP_DESTROY_SESS    2570                         1 << (OP_DESTROY_SESSION - 32) |
3546                         1 << (OP_DESTROY_CLIE    2571                         1 << (OP_DESTROY_CLIENTID - 32));
3547                                                  2572 
3548                 exid->spo_must_allow[0] &= (1    2573                 exid->spo_must_allow[0] &= (1 << (OP_CLOSE) |
3549                                         1 <<     2574                                         1 << (OP_OPEN_DOWNGRADE) |
3550                                         1 <<     2575                                         1 << (OP_LOCKU) |
3551                                         1 <<     2576                                         1 << (OP_DELEGRETURN));
3552                                                  2577 
3553                 exid->spo_must_allow[1] &= (     2578                 exid->spo_must_allow[1] &= (
3554                                         1 <<     2579                                         1 << (OP_TEST_STATEID - 32) |
3555                                         1 <<     2580                                         1 << (OP_FREE_STATEID - 32));
3556                 if (!svc_rqst_integrity_prote    2581                 if (!svc_rqst_integrity_protected(rqstp)) {
3557                         status = nfserr_inval    2582                         status = nfserr_inval;
3558                         goto out_nolock;         2583                         goto out_nolock;
3559                 }                                2584                 }
3560                 /*                               2585                 /*
3561                  * Sometimes userspace doesn'    2586                  * Sometimes userspace doesn't give us a principal.
3562                  * Which is a bug, really.  A    2587                  * Which is a bug, really.  Anyway, we can't enforce
3563                  * MACH_CRED in that case, be    2588                  * MACH_CRED in that case, better to give up now:
3564                  */                              2589                  */
3565                 if (!new->cl_cred.cr_principa    2590                 if (!new->cl_cred.cr_principal &&
3566                                         !new-    2591                                         !new->cl_cred.cr_raw_principal) {
3567                         status = nfserr_serve    2592                         status = nfserr_serverfault;
3568                         goto out_nolock;         2593                         goto out_nolock;
3569                 }                                2594                 }
3570                 new->cl_mach_cred = true;        2595                 new->cl_mach_cred = true;
3571                 break;                        << 
3572         case SP4_NONE:                           2596         case SP4_NONE:
3573                 break;                           2597                 break;
3574         default:                                 2598         default:                                /* checked by xdr code */
3575                 WARN_ON_ONCE(1);                 2599                 WARN_ON_ONCE(1);
3576                 fallthrough;                  !! 2600                 /* fall through */
3577         case SP4_SSV:                            2601         case SP4_SSV:
3578                 status = nfserr_encr_alg_unsu    2602                 status = nfserr_encr_alg_unsupp;
3579                 goto out_nolock;                 2603                 goto out_nolock;
3580         }                                        2604         }
3581                                                  2605 
3582         /* Cases below refer to rfc 5661 sect    2606         /* Cases below refer to rfc 5661 section 18.35.4: */
3583         spin_lock(&nn->client_lock);             2607         spin_lock(&nn->client_lock);
3584         conf = find_confirmed_client_by_name(    2608         conf = find_confirmed_client_by_name(&exid->clname, nn);
3585         if (conf) {                              2609         if (conf) {
3586                 bool creds_match = same_creds    2610                 bool creds_match = same_creds(&conf->cl_cred, &rqstp->rq_cred);
3587                 bool verfs_match = same_verf(    2611                 bool verfs_match = same_verf(&verf, &conf->cl_verifier);
3588                                                  2612 
3589                 if (update) {                    2613                 if (update) {
3590                         if (!clp_used_exchang    2614                         if (!clp_used_exchangeid(conf)) { /* buggy client */
3591                                 status = nfse    2615                                 status = nfserr_inval;
3592                                 goto out;        2616                                 goto out;
3593                         }                        2617                         }
3594                         if (!nfsd4_mach_creds    2618                         if (!nfsd4_mach_creds_match(conf, rqstp)) {
3595                                 status = nfse    2619                                 status = nfserr_wrong_cred;
3596                                 goto out;        2620                                 goto out;
3597                         }                        2621                         }
3598                         if (!creds_match) { /    2622                         if (!creds_match) { /* case 9 */
3599                                 status = nfse    2623                                 status = nfserr_perm;
3600                                 goto out;        2624                                 goto out;
3601                         }                        2625                         }
3602                         if (!verfs_match) { /    2626                         if (!verfs_match) { /* case 8 */
3603                                 status = nfse    2627                                 status = nfserr_not_same;
3604                                 goto out;        2628                                 goto out;
3605                         }                        2629                         }
3606                         /* case 6 */             2630                         /* case 6 */
3607                         exid->flags |= EXCHGI    2631                         exid->flags |= EXCHGID4_FLAG_CONFIRMED_R;
3608                         trace_nfsd_clid_confi << 
3609                         goto out_copy;           2632                         goto out_copy;
3610                 }                                2633                 }
3611                 if (!creds_match) { /* case 3    2634                 if (!creds_match) { /* case 3 */
3612                         if (client_has_state(    2635                         if (client_has_state(conf)) {
3613                                 status = nfse    2636                                 status = nfserr_clid_inuse;
3614                                 trace_nfsd_cl << 
3615                                 goto out;        2637                                 goto out;
3616                         }                        2638                         }
3617                         goto out_new;            2639                         goto out_new;
3618                 }                                2640                 }
3619                 if (verfs_match) { /* case 2     2641                 if (verfs_match) { /* case 2 */
3620                         conf->cl_exchange_fla    2642                         conf->cl_exchange_flags |= EXCHGID4_FLAG_CONFIRMED_R;
3621                         trace_nfsd_clid_confi << 
3622                         goto out_copy;           2643                         goto out_copy;
3623                 }                                2644                 }
3624                 /* case 5, client reboot */      2645                 /* case 5, client reboot */
3625                 trace_nfsd_clid_verf_mismatch << 
3626                 conf = NULL;                     2646                 conf = NULL;
3627                 goto out_new;                    2647                 goto out_new;
3628         }                                        2648         }
3629                                                  2649 
3630         if (update) { /* case 7 */               2650         if (update) { /* case 7 */
3631                 status = nfserr_noent;           2651                 status = nfserr_noent;
3632                 goto out;                        2652                 goto out;
3633         }                                        2653         }
3634                                                  2654 
3635         unconf = find_unconfirmed_client_by_n !! 2655         unconf  = find_unconfirmed_client_by_name(&exid->clname, nn);
3636         if (unconf) /* case 4, possible retry    2656         if (unconf) /* case 4, possible retry or client restart */
3637                 unhash_client_locked(unconf);    2657                 unhash_client_locked(unconf);
3638                                                  2658 
3639         /* case 1, new owner ID */            !! 2659         /* case 1 (normal case) */
3640         trace_nfsd_clid_fresh(new);           << 
3641                                               << 
3642 out_new:                                         2660 out_new:
3643         if (conf) {                              2661         if (conf) {
3644                 status = mark_client_expired_    2662                 status = mark_client_expired_locked(conf);
3645                 if (status)                      2663                 if (status)
3646                         goto out;                2664                         goto out;
3647                 trace_nfsd_clid_replaced(&con << 
3648         }                                        2665         }
3649         new->cl_minorversion = cstate->minorv    2666         new->cl_minorversion = cstate->minorversion;
3650         new->cl_spo_must_allow.u.words[0] = e    2667         new->cl_spo_must_allow.u.words[0] = exid->spo_must_allow[0];
3651         new->cl_spo_must_allow.u.words[1] = e    2668         new->cl_spo_must_allow.u.words[1] = exid->spo_must_allow[1];
3652                                                  2669 
3653         /* Contrived initial CREATE_SESSION r !! 2670         gen_clid(new, nn);
3654         new->cl_cs_slot.sl_status = nfserr_se << 
3655                                               << 
3656         add_to_unconfirmed(new);                 2671         add_to_unconfirmed(new);
3657         swap(new, conf);                         2672         swap(new, conf);
3658 out_copy:                                        2673 out_copy:
3659         exid->clientid.cl_boot = conf->cl_cli    2674         exid->clientid.cl_boot = conf->cl_clientid.cl_boot;
3660         exid->clientid.cl_id = conf->cl_clien    2675         exid->clientid.cl_id = conf->cl_clientid.cl_id;
3661                                                  2676 
3662         exid->seqid = conf->cl_cs_slot.sl_seq    2677         exid->seqid = conf->cl_cs_slot.sl_seqid + 1;
3663         nfsd4_set_ex_flags(conf, exid);          2678         nfsd4_set_ex_flags(conf, exid);
3664                                                  2679 
3665         dprintk("nfsd4_exchange_id seqid %d f    2680         dprintk("nfsd4_exchange_id seqid %d flags %x\n",
3666                 conf->cl_cs_slot.sl_seqid, co    2681                 conf->cl_cs_slot.sl_seqid, conf->cl_exchange_flags);
3667         status = nfs_ok;                         2682         status = nfs_ok;
3668                                                  2683 
3669 out:                                             2684 out:
3670         spin_unlock(&nn->client_lock);           2685         spin_unlock(&nn->client_lock);
3671 out_nolock:                                      2686 out_nolock:
3672         if (new)                                 2687         if (new)
3673                 expire_client(new);              2688                 expire_client(new);
3674         if (unconf) {                         !! 2689         if (unconf)
3675                 trace_nfsd_clid_expire_unconf << 
3676                 expire_client(unconf);           2690                 expire_client(unconf);
3677         }                                     << 
3678         return status;                           2691         return status;
3679 }                                                2692 }
3680                                                  2693 
3681 static __be32 check_slot_seqid(u32 seqid, u32 !! 2694 static __be32
                                                   >> 2695 check_slot_seqid(u32 seqid, u32 slot_seqid, int slot_inuse)
3682 {                                                2696 {
                                                   >> 2697         dprintk("%s enter. seqid %d slot_seqid %d\n", __func__, seqid,
                                                   >> 2698                 slot_seqid);
                                                   >> 2699 
3683         /* The slot is in use, and no respons    2700         /* The slot is in use, and no response has been sent. */
3684         if (slot_inuse) {                        2701         if (slot_inuse) {
3685                 if (seqid == slot_seqid)         2702                 if (seqid == slot_seqid)
3686                         return nfserr_jukebox    2703                         return nfserr_jukebox;
3687                 else                             2704                 else
3688                         return nfserr_seq_mis    2705                         return nfserr_seq_misordered;
3689         }                                        2706         }
3690         /* Note unsigned 32-bit arithmetic ha    2707         /* Note unsigned 32-bit arithmetic handles wraparound: */
3691         if (likely(seqid == slot_seqid + 1))     2708         if (likely(seqid == slot_seqid + 1))
3692                 return nfs_ok;                   2709                 return nfs_ok;
3693         if (seqid == slot_seqid)                 2710         if (seqid == slot_seqid)
3694                 return nfserr_replay_cache;      2711                 return nfserr_replay_cache;
3695         return nfserr_seq_misordered;            2712         return nfserr_seq_misordered;
3696 }                                                2713 }
3697                                                  2714 
3698 /*                                               2715 /*
3699  * Cache the create session result into the c    2716  * Cache the create session result into the create session single DRC
3700  * slot cache by saving the xdr structure. sl    2717  * slot cache by saving the xdr structure. sl_seqid has been set.
3701  * Do this for solo or embedded create sessio    2718  * Do this for solo or embedded create session operations.
3702  */                                              2719  */
3703 static void                                      2720 static void
3704 nfsd4_cache_create_session(struct nfsd4_creat    2721 nfsd4_cache_create_session(struct nfsd4_create_session *cr_ses,
3705                            struct nfsd4_clid_    2722                            struct nfsd4_clid_slot *slot, __be32 nfserr)
3706 {                                                2723 {
3707         slot->sl_status = nfserr;                2724         slot->sl_status = nfserr;
3708         memcpy(&slot->sl_cr_ses, cr_ses, size    2725         memcpy(&slot->sl_cr_ses, cr_ses, sizeof(*cr_ses));
3709 }                                                2726 }
3710                                                  2727 
3711 static __be32                                    2728 static __be32
3712 nfsd4_replay_create_session(struct nfsd4_crea    2729 nfsd4_replay_create_session(struct nfsd4_create_session *cr_ses,
3713                             struct nfsd4_clid    2730                             struct nfsd4_clid_slot *slot)
3714 {                                                2731 {
3715         memcpy(cr_ses, &slot->sl_cr_ses, size    2732         memcpy(cr_ses, &slot->sl_cr_ses, sizeof(*cr_ses));
3716         return slot->sl_status;                  2733         return slot->sl_status;
3717 }                                                2734 }
3718                                                  2735 
3719 #define NFSD_MIN_REQ_HDR_SEQ_SZ ((\              2736 #define NFSD_MIN_REQ_HDR_SEQ_SZ ((\
3720                         2 * 2 + /* credential    2737                         2 * 2 + /* credential,verifier: AUTH_NULL, length 0 */ \
3721                         1 +     /* MIN tag is    2738                         1 +     /* MIN tag is length with zero, only length */ \
3722                         3 +     /* version, o    2739                         3 +     /* version, opcount, opcode */ \
3723                         XDR_QUADLEN(NFS4_MAX_    2740                         XDR_QUADLEN(NFS4_MAX_SESSIONID_LEN) + \
3724                                 /* seqid, slo    2741                                 /* seqid, slotID, slotID, cache */ \
3725                         4 ) * sizeof(__be32))    2742                         4 ) * sizeof(__be32))
3726                                                  2743 
3727 #define NFSD_MIN_RESP_HDR_SEQ_SZ ((\             2744 #define NFSD_MIN_RESP_HDR_SEQ_SZ ((\
3728                         2 +     /* verifier:     2745                         2 +     /* verifier: AUTH_NULL, length 0 */\
3729                         1 +     /* status */     2746                         1 +     /* status */ \
3730                         1 +     /* MIN tag is    2747                         1 +     /* MIN tag is length with zero, only length */ \
3731                         3 +     /* opcount, o    2748                         3 +     /* opcount, opcode, opstatus*/ \
3732                         XDR_QUADLEN(NFS4_MAX_    2749                         XDR_QUADLEN(NFS4_MAX_SESSIONID_LEN) + \
3733                                 /* seqid, slo    2750                                 /* seqid, slotID, slotID, slotID, status */ \
3734                         5 ) * sizeof(__be32))    2751                         5 ) * sizeof(__be32))
3735                                                  2752 
3736 static __be32 check_forechannel_attrs(struct     2753 static __be32 check_forechannel_attrs(struct nfsd4_channel_attrs *ca, struct nfsd_net *nn)
3737 {                                                2754 {
3738         u32 maxrpc = nn->nfsd_serv->sv_max_me    2755         u32 maxrpc = nn->nfsd_serv->sv_max_mesg;
3739                                                  2756 
3740         if (ca->maxreq_sz < NFSD_MIN_REQ_HDR_    2757         if (ca->maxreq_sz < NFSD_MIN_REQ_HDR_SEQ_SZ)
3741                 return nfserr_toosmall;          2758                 return nfserr_toosmall;
3742         if (ca->maxresp_sz < NFSD_MIN_RESP_HD    2759         if (ca->maxresp_sz < NFSD_MIN_RESP_HDR_SEQ_SZ)
3743                 return nfserr_toosmall;          2760                 return nfserr_toosmall;
3744         ca->headerpadsz = 0;                     2761         ca->headerpadsz = 0;
3745         ca->maxreq_sz = min_t(u32, ca->maxreq    2762         ca->maxreq_sz = min_t(u32, ca->maxreq_sz, maxrpc);
3746         ca->maxresp_sz = min_t(u32, ca->maxre    2763         ca->maxresp_sz = min_t(u32, ca->maxresp_sz, maxrpc);
3747         ca->maxops = min_t(u32, ca->maxops, N    2764         ca->maxops = min_t(u32, ca->maxops, NFSD_MAX_OPS_PER_COMPOUND);
3748         ca->maxresp_cached = min_t(u32, ca->m    2765         ca->maxresp_cached = min_t(u32, ca->maxresp_cached,
3749                         NFSD_SLOT_CACHE_SIZE     2766                         NFSD_SLOT_CACHE_SIZE + NFSD_MIN_HDR_SEQ_SZ);
3750         ca->maxreqs = min_t(u32, ca->maxreqs,    2767         ca->maxreqs = min_t(u32, ca->maxreqs, NFSD_MAX_SLOTS_PER_SESSION);
3751         /*                                       2768         /*
3752          * Note decreasing slot size below cl    2769          * Note decreasing slot size below client's request may make it
3753          * difficult for client to function c    2770          * difficult for client to function correctly, whereas
3754          * decreasing the number of slots wil    2771          * decreasing the number of slots will (just?) affect
3755          * performance.  When short on memory    2772          * performance.  When short on memory we therefore prefer to
3756          * decrease number of slots instead o    2773          * decrease number of slots instead of their size.  Clients that
3757          * request larger slots than they nee    2774          * request larger slots than they need will get poor results:
3758          * Note that we always allow at least << 
3759          * accounting is soft and provides no << 
3760          */                                      2775          */
3761         ca->maxreqs = nfsd4_get_drc_mem(ca, n !! 2776         ca->maxreqs = nfsd4_get_drc_mem(ca);
                                                   >> 2777         if (!ca->maxreqs)
                                                   >> 2778                 return nfserr_jukebox;
3762                                                  2779 
3763         return nfs_ok;                           2780         return nfs_ok;
3764 }                                                2781 }
3765                                                  2782 
3766 /*                                               2783 /*
3767  * Server's NFSv4.1 backchannel support is AU    2784  * Server's NFSv4.1 backchannel support is AUTH_SYS-only for now.
3768  * These are based on similar macros in linux    2785  * These are based on similar macros in linux/sunrpc/msg_prot.h .
3769  */                                              2786  */
3770 #define RPC_MAX_HEADER_WITH_AUTH_SYS \           2787 #define RPC_MAX_HEADER_WITH_AUTH_SYS \
3771         (RPC_CALLHDRSIZE + 2 * (2 + UNX_CALLS    2788         (RPC_CALLHDRSIZE + 2 * (2 + UNX_CALLSLACK))
3772                                                  2789 
3773 #define RPC_MAX_REPHEADER_WITH_AUTH_SYS \        2790 #define RPC_MAX_REPHEADER_WITH_AUTH_SYS \
3774         (RPC_REPHDRSIZE + (2 + NUL_REPLYSLACK    2791         (RPC_REPHDRSIZE + (2 + NUL_REPLYSLACK))
3775                                                  2792 
3776 #define NFSD_CB_MAX_REQ_SZ      ((NFS4_enc_cb    2793 #define NFSD_CB_MAX_REQ_SZ      ((NFS4_enc_cb_recall_sz + \
3777                                  RPC_MAX_HEAD    2794                                  RPC_MAX_HEADER_WITH_AUTH_SYS) * sizeof(__be32))
3778 #define NFSD_CB_MAX_RESP_SZ     ((NFS4_dec_cb    2795 #define NFSD_CB_MAX_RESP_SZ     ((NFS4_dec_cb_recall_sz + \
3779                                  RPC_MAX_REPH    2796                                  RPC_MAX_REPHEADER_WITH_AUTH_SYS) * \
3780                                  sizeof(__be3    2797                                  sizeof(__be32))
3781                                                  2798 
3782 static __be32 check_backchannel_attrs(struct     2799 static __be32 check_backchannel_attrs(struct nfsd4_channel_attrs *ca)
3783 {                                                2800 {
3784         ca->headerpadsz = 0;                     2801         ca->headerpadsz = 0;
3785                                                  2802 
3786         if (ca->maxreq_sz < NFSD_CB_MAX_REQ_S    2803         if (ca->maxreq_sz < NFSD_CB_MAX_REQ_SZ)
3787                 return nfserr_toosmall;          2804                 return nfserr_toosmall;
3788         if (ca->maxresp_sz < NFSD_CB_MAX_RESP    2805         if (ca->maxresp_sz < NFSD_CB_MAX_RESP_SZ)
3789                 return nfserr_toosmall;          2806                 return nfserr_toosmall;
3790         ca->maxresp_cached = 0;                  2807         ca->maxresp_cached = 0;
3791         if (ca->maxops < 2)                      2808         if (ca->maxops < 2)
3792                 return nfserr_toosmall;          2809                 return nfserr_toosmall;
3793                                                  2810 
3794         return nfs_ok;                           2811         return nfs_ok;
3795 }                                                2812 }
3796                                                  2813 
3797 static __be32 nfsd4_check_cb_sec(struct nfsd4    2814 static __be32 nfsd4_check_cb_sec(struct nfsd4_cb_sec *cbs)
3798 {                                                2815 {
3799         switch (cbs->flavor) {                   2816         switch (cbs->flavor) {
3800         case RPC_AUTH_NULL:                      2817         case RPC_AUTH_NULL:
3801         case RPC_AUTH_UNIX:                      2818         case RPC_AUTH_UNIX:
3802                 return nfs_ok;                   2819                 return nfs_ok;
3803         default:                                 2820         default:
3804                 /*                               2821                 /*
3805                  * GSS case: the spec doesn't    2822                  * GSS case: the spec doesn't allow us to return this
3806                  * error.  But it also doesn'    2823                  * error.  But it also doesn't allow us not to support
3807                  * GSS.                          2824                  * GSS.
3808                  * I'd rather this fail hard     2825                  * I'd rather this fail hard than return some error the
3809                  * client might think it can     2826                  * client might think it can already handle:
3810                  */                              2827                  */
3811                 return nfserr_encr_alg_unsupp    2828                 return nfserr_encr_alg_unsupp;
3812         }                                        2829         }
3813 }                                                2830 }
3814                                                  2831 
3815 __be32                                           2832 __be32
3816 nfsd4_create_session(struct svc_rqst *rqstp,     2833 nfsd4_create_session(struct svc_rqst *rqstp,
3817                 struct nfsd4_compound_state *    2834                 struct nfsd4_compound_state *cstate, union nfsd4_op_u *u)
3818 {                                                2835 {
3819         struct nfsd4_create_session *cr_ses =    2836         struct nfsd4_create_session *cr_ses = &u->create_session;
3820         struct sockaddr *sa = svc_addr(rqstp)    2837         struct sockaddr *sa = svc_addr(rqstp);
3821         struct nfs4_client *conf, *unconf;       2838         struct nfs4_client *conf, *unconf;
3822         struct nfsd4_clid_slot *cs_slot;      << 
3823         struct nfs4_client *old = NULL;          2839         struct nfs4_client *old = NULL;
3824         struct nfsd4_session *new;               2840         struct nfsd4_session *new;
3825         struct nfsd4_conn *conn;                 2841         struct nfsd4_conn *conn;
                                                   >> 2842         struct nfsd4_clid_slot *cs_slot = NULL;
3826         __be32 status = 0;                       2843         __be32 status = 0;
3827         struct nfsd_net *nn = net_generic(SVC    2844         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
3828                                                  2845 
3829         if (cr_ses->flags & ~SESSION4_FLAG_MA    2846         if (cr_ses->flags & ~SESSION4_FLAG_MASK_A)
3830                 return nfserr_inval;             2847                 return nfserr_inval;
3831         status = nfsd4_check_cb_sec(&cr_ses->    2848         status = nfsd4_check_cb_sec(&cr_ses->cb_sec);
3832         if (status)                              2849         if (status)
3833                 return status;                   2850                 return status;
3834         status = check_forechannel_attrs(&cr_    2851         status = check_forechannel_attrs(&cr_ses->fore_channel, nn);
3835         if (status)                              2852         if (status)
3836                 return status;                   2853                 return status;
3837         status = check_backchannel_attrs(&cr_    2854         status = check_backchannel_attrs(&cr_ses->back_channel);
3838         if (status)                              2855         if (status)
3839                 goto out_release_drc_mem;        2856                 goto out_release_drc_mem;
3840         status = nfserr_jukebox;                 2857         status = nfserr_jukebox;
3841         new = alloc_session(&cr_ses->fore_cha    2858         new = alloc_session(&cr_ses->fore_channel, &cr_ses->back_channel);
3842         if (!new)                                2859         if (!new)
3843                 goto out_release_drc_mem;        2860                 goto out_release_drc_mem;
3844         conn = alloc_conn_from_crses(rqstp, c    2861         conn = alloc_conn_from_crses(rqstp, cr_ses);
3845         if (!conn)                               2862         if (!conn)
3846                 goto out_free_session;           2863                 goto out_free_session;
3847                                                  2864 
3848         spin_lock(&nn->client_lock);             2865         spin_lock(&nn->client_lock);
3849                                               << 
3850         /* RFC 8881 Section 18.36.4 Phase 1:  << 
3851         unconf = find_unconfirmed_client(&cr_    2866         unconf = find_unconfirmed_client(&cr_ses->clientid, true, nn);
3852         conf = find_confirmed_client(&cr_ses-    2867         conf = find_confirmed_client(&cr_ses->clientid, true, nn);
3853         if (!conf && !unconf) {               !! 2868         WARN_ON_ONCE(conf && unconf);
3854                 status = nfserr_stale_clienti << 
3855                 goto out_free_conn;           << 
3856         }                                     << 
3857                                               << 
3858         /* RFC 8881 Section 18.36.4 Phase 2:  << 
3859         if (conf) {                           << 
3860                 cs_slot = &conf->cl_cs_slot;  << 
3861                 trace_nfsd_slot_seqid_conf(co << 
3862         } else {                              << 
3863                 cs_slot = &unconf->cl_cs_slot << 
3864                 trace_nfsd_slot_seqid_unconf( << 
3865         }                                     << 
3866         status = check_slot_seqid(cr_ses->seq << 
3867         switch (status) {                     << 
3868         case nfs_ok:                          << 
3869                 cs_slot->sl_seqid++;          << 
3870                 cr_ses->seqid = cs_slot->sl_s << 
3871                 break;                        << 
3872         case nfserr_replay_cache:             << 
3873                 status = nfsd4_replay_create_ << 
3874                 fallthrough;                  << 
3875         case nfserr_jukebox:                  << 
3876                 /* The server MUST NOT cache  << 
3877                 goto out_free_conn;           << 
3878         default:                              << 
3879                 goto out_cache_error;         << 
3880         }                                     << 
3881                                                  2869 
3882         /* RFC 8881 Section 18.36.4 Phase 3:  << 
3883         if (conf) {                              2870         if (conf) {
3884                 status = nfserr_wrong_cred;      2871                 status = nfserr_wrong_cred;
3885                 if (!nfsd4_mach_creds_match(c    2872                 if (!nfsd4_mach_creds_match(conf, rqstp))
3886                         goto out_cache_error; !! 2873                         goto out_free_conn;
3887         } else {                              !! 2874                 cs_slot = &conf->cl_cs_slot;
3888                 status = nfserr_clid_inuse;   !! 2875                 status = check_slot_seqid(cr_ses->seqid, cs_slot->sl_seqid, 0);
                                                   >> 2876                 if (status) {
                                                   >> 2877                         if (status == nfserr_replay_cache)
                                                   >> 2878                                 status = nfsd4_replay_create_session(cr_ses, cs_slot);
                                                   >> 2879                         goto out_free_conn;
                                                   >> 2880                 }
                                                   >> 2881         } else if (unconf) {
3889                 if (!same_creds(&unconf->cl_c    2882                 if (!same_creds(&unconf->cl_cred, &rqstp->rq_cred) ||
3890                     !rpc_cmp_addr(sa, (struct    2883                     !rpc_cmp_addr(sa, (struct sockaddr *) &unconf->cl_addr)) {
3891                         trace_nfsd_clid_cred_ !! 2884                         status = nfserr_clid_inuse;
3892                         goto out_cache_error; !! 2885                         goto out_free_conn;
3893                 }                                2886                 }
3894                 status = nfserr_wrong_cred;      2887                 status = nfserr_wrong_cred;
3895                 if (!nfsd4_mach_creds_match(u    2888                 if (!nfsd4_mach_creds_match(unconf, rqstp))
3896                         goto out_cache_error; !! 2889                         goto out_free_conn;
                                                   >> 2890                 cs_slot = &unconf->cl_cs_slot;
                                                   >> 2891                 status = check_slot_seqid(cr_ses->seqid, cs_slot->sl_seqid, 0);
                                                   >> 2892                 if (status) {
                                                   >> 2893                         /* an unconfirmed replay returns misordered */
                                                   >> 2894                         status = nfserr_seq_misordered;
                                                   >> 2895                         goto out_free_conn;
                                                   >> 2896                 }
3897                 old = find_confirmed_client_b    2897                 old = find_confirmed_client_by_name(&unconf->cl_name, nn);
3898                 if (old) {                       2898                 if (old) {
3899                         status = mark_client_    2899                         status = mark_client_expired_locked(old);
3900                         if (status)           !! 2900                         if (status) {
3901                                 goto out_expi !! 2901                                 old = NULL;
3902                         trace_nfsd_clid_repla !! 2902                                 goto out_free_conn;
                                                   >> 2903                         }
3903                 }                                2904                 }
3904                 move_to_confirmed(unconf);       2905                 move_to_confirmed(unconf);
3905                 conf = unconf;                   2906                 conf = unconf;
                                                   >> 2907         } else {
                                                   >> 2908                 status = nfserr_stale_clientid;
                                                   >> 2909                 goto out_free_conn;
3906         }                                        2910         }
3907                                               << 
3908         /* RFC 8881 Section 18.36.4 Phase 4:  << 
3909         status = nfs_ok;                         2911         status = nfs_ok;
3910         /* Persistent sessions are not suppor    2912         /* Persistent sessions are not supported */
3911         cr_ses->flags &= ~SESSION4_PERSIST;      2913         cr_ses->flags &= ~SESSION4_PERSIST;
3912         /* Upshifting from TCP to RDMA is not    2914         /* Upshifting from TCP to RDMA is not supported */
3913         cr_ses->flags &= ~SESSION4_RDMA;         2915         cr_ses->flags &= ~SESSION4_RDMA;
3914                                                  2916 
3915         init_session(rqstp, new, conf, cr_ses    2917         init_session(rqstp, new, conf, cr_ses);
3916         nfsd4_get_session_locked(new);           2918         nfsd4_get_session_locked(new);
3917                                                  2919 
3918         memcpy(cr_ses->sessionid.data, new->s    2920         memcpy(cr_ses->sessionid.data, new->se_sessionid.data,
3919                NFS4_MAX_SESSIONID_LEN);          2921                NFS4_MAX_SESSIONID_LEN);
                                                   >> 2922         cs_slot->sl_seqid++;
                                                   >> 2923         cr_ses->seqid = cs_slot->sl_seqid;
3920                                                  2924 
3921         /* cache solo and embedded create ses    2925         /* cache solo and embedded create sessions under the client_lock */
3922         nfsd4_cache_create_session(cr_ses, cs    2926         nfsd4_cache_create_session(cr_ses, cs_slot, status);
3923         spin_unlock(&nn->client_lock);           2927         spin_unlock(&nn->client_lock);
3924         if (conf == unconf)                   << 
3925                 fsnotify_dentry(conf->cl_nfsd << 
3926         /* init connection and backchannel */    2928         /* init connection and backchannel */
3927         nfsd4_init_conn(rqstp, conn, new);       2929         nfsd4_init_conn(rqstp, conn, new);
3928         nfsd4_put_session(new);                  2930         nfsd4_put_session(new);
3929         if (old)                                 2931         if (old)
3930                 expire_client(old);              2932                 expire_client(old);
3931         return status;                           2933         return status;
3932                                               << 
3933 out_expired_error:                            << 
3934         old = NULL;                           << 
3935         /*                                    << 
3936          * Revert the slot seq_nr change so t << 
3937          * the client's resend instead of ret << 
3938          */                                   << 
3939         if (status == nfserr_jukebox) {       << 
3940                 cs_slot->sl_seqid--;          << 
3941                 cr_ses->seqid = cs_slot->sl_s << 
3942                 goto out_free_conn;           << 
3943         }                                     << 
3944 out_cache_error:                              << 
3945         nfsd4_cache_create_session(cr_ses, cs << 
3946 out_free_conn:                                   2934 out_free_conn:
3947         spin_unlock(&nn->client_lock);           2935         spin_unlock(&nn->client_lock);
3948         free_conn(conn);                         2936         free_conn(conn);
3949         if (old)                                 2937         if (old)
3950                 expire_client(old);              2938                 expire_client(old);
3951 out_free_session:                                2939 out_free_session:
3952         __free_session(new);                     2940         __free_session(new);
3953 out_release_drc_mem:                             2941 out_release_drc_mem:
3954         nfsd4_put_drc_mem(&cr_ses->fore_chann    2942         nfsd4_put_drc_mem(&cr_ses->fore_channel);
3955         return status;                           2943         return status;
3956 }                                                2944 }
3957                                                  2945 
3958 static __be32 nfsd4_map_bcts_dir(u32 *dir)       2946 static __be32 nfsd4_map_bcts_dir(u32 *dir)
3959 {                                                2947 {
3960         switch (*dir) {                          2948         switch (*dir) {
3961         case NFS4_CDFC4_FORE:                    2949         case NFS4_CDFC4_FORE:
3962         case NFS4_CDFC4_BACK:                    2950         case NFS4_CDFC4_BACK:
3963                 return nfs_ok;                   2951                 return nfs_ok;
3964         case NFS4_CDFC4_FORE_OR_BOTH:            2952         case NFS4_CDFC4_FORE_OR_BOTH:
3965         case NFS4_CDFC4_BACK_OR_BOTH:            2953         case NFS4_CDFC4_BACK_OR_BOTH:
3966                 *dir = NFS4_CDFC4_BOTH;          2954                 *dir = NFS4_CDFC4_BOTH;
3967                 return nfs_ok;                   2955                 return nfs_ok;
3968         }                                     !! 2956         };
3969         return nfserr_inval;                     2957         return nfserr_inval;
3970 }                                                2958 }
3971                                                  2959 
3972 __be32 nfsd4_backchannel_ctl(struct svc_rqst     2960 __be32 nfsd4_backchannel_ctl(struct svc_rqst *rqstp,
3973                 struct nfsd4_compound_state *    2961                 struct nfsd4_compound_state *cstate,
3974                 union nfsd4_op_u *u)             2962                 union nfsd4_op_u *u)
3975 {                                                2963 {
3976         struct nfsd4_backchannel_ctl *bc = &u    2964         struct nfsd4_backchannel_ctl *bc = &u->backchannel_ctl;
3977         struct nfsd4_session *session = cstat    2965         struct nfsd4_session *session = cstate->session;
3978         struct nfsd_net *nn = net_generic(SVC    2966         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
3979         __be32 status;                           2967         __be32 status;
3980                                                  2968 
3981         status = nfsd4_check_cb_sec(&bc->bc_c    2969         status = nfsd4_check_cb_sec(&bc->bc_cb_sec);
3982         if (status)                              2970         if (status)
3983                 return status;                   2971                 return status;
3984         spin_lock(&nn->client_lock);             2972         spin_lock(&nn->client_lock);
3985         session->se_cb_prog = bc->bc_cb_progr    2973         session->se_cb_prog = bc->bc_cb_program;
3986         session->se_cb_sec = bc->bc_cb_sec;      2974         session->se_cb_sec = bc->bc_cb_sec;
3987         spin_unlock(&nn->client_lock);           2975         spin_unlock(&nn->client_lock);
3988                                                  2976 
3989         nfsd4_probe_callback(session->se_clie    2977         nfsd4_probe_callback(session->se_client);
3990                                                  2978 
3991         return nfs_ok;                           2979         return nfs_ok;
3992 }                                                2980 }
3993                                                  2981 
3994 static struct nfsd4_conn *__nfsd4_find_conn(s << 
3995 {                                             << 
3996         struct nfsd4_conn *c;                 << 
3997                                               << 
3998         list_for_each_entry(c, &s->se_conns,  << 
3999                 if (c->cn_xprt == xpt) {      << 
4000                         return c;             << 
4001                 }                             << 
4002         }                                     << 
4003         return NULL;                          << 
4004 }                                             << 
4005                                               << 
4006 static __be32 nfsd4_match_existing_connection << 
4007                 struct nfsd4_session *session << 
4008 {                                             << 
4009         struct nfs4_client *clp = session->se << 
4010         struct svc_xprt *xpt = rqst->rq_xprt; << 
4011         struct nfsd4_conn *c;                 << 
4012         __be32 status;                        << 
4013                                               << 
4014         /* Following the last paragraph of RF << 
4015         spin_lock(&clp->cl_lock);             << 
4016         c = __nfsd4_find_conn(xpt, session);  << 
4017         if (!c)                               << 
4018                 status = nfserr_noent;        << 
4019         else if (req == c->cn_flags)          << 
4020                 status = nfs_ok;              << 
4021         else if (req == NFS4_CDFC4_FORE_OR_BO << 
4022                                 c->cn_flags ! << 
4023                 status = nfs_ok;              << 
4024         else if (req == NFS4_CDFC4_BACK_OR_BO << 
4025                                 c->cn_flags ! << 
4026                 status = nfs_ok;              << 
4027         else                                  << 
4028                 status = nfserr_inval;        << 
4029         spin_unlock(&clp->cl_lock);           << 
4030         if (status == nfs_ok && conn)         << 
4031                 *conn = c;                    << 
4032         return status;                        << 
4033 }                                             << 
4034                                               << 
4035 __be32 nfsd4_bind_conn_to_session(struct svc_    2982 __be32 nfsd4_bind_conn_to_session(struct svc_rqst *rqstp,
4036                      struct nfsd4_compound_st    2983                      struct nfsd4_compound_state *cstate,
4037                      union nfsd4_op_u *u)        2984                      union nfsd4_op_u *u)
4038 {                                                2985 {
4039         struct nfsd4_bind_conn_to_session *bc    2986         struct nfsd4_bind_conn_to_session *bcts = &u->bind_conn_to_session;
4040         __be32 status;                           2987         __be32 status;
4041         struct nfsd4_conn *conn;                 2988         struct nfsd4_conn *conn;
4042         struct nfsd4_session *session;           2989         struct nfsd4_session *session;
4043         struct net *net = SVC_NET(rqstp);        2990         struct net *net = SVC_NET(rqstp);
4044         struct nfsd_net *nn = net_generic(net    2991         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
4045                                                  2992 
4046         if (!nfsd4_last_compound_op(rqstp))      2993         if (!nfsd4_last_compound_op(rqstp))
4047                 return nfserr_not_only_op;       2994                 return nfserr_not_only_op;
4048         spin_lock(&nn->client_lock);             2995         spin_lock(&nn->client_lock);
4049         session = find_in_sessionid_hashtbl(&    2996         session = find_in_sessionid_hashtbl(&bcts->sessionid, net, &status);
4050         spin_unlock(&nn->client_lock);           2997         spin_unlock(&nn->client_lock);
4051         if (!session)                            2998         if (!session)
4052                 goto out_no_session;             2999                 goto out_no_session;
4053         status = nfserr_wrong_cred;              3000         status = nfserr_wrong_cred;
4054         if (!nfsd4_mach_creds_match(session->    3001         if (!nfsd4_mach_creds_match(session->se_client, rqstp))
4055                 goto out;                        3002                 goto out;
4056         status = nfsd4_match_existing_connect << 
4057                         bcts->dir, &conn);    << 
4058         if (status == nfs_ok) {               << 
4059                 if (bcts->dir == NFS4_CDFC4_F << 
4060                                 bcts->dir ==  << 
4061                         conn->cn_flags |= NFS << 
4062                 nfsd4_probe_callback(session- << 
4063                 goto out;                     << 
4064         }                                     << 
4065         if (status == nfserr_inval)           << 
4066                 goto out;                     << 
4067         status = nfsd4_map_bcts_dir(&bcts->di    3003         status = nfsd4_map_bcts_dir(&bcts->dir);
4068         if (status)                              3004         if (status)
4069                 goto out;                        3005                 goto out;
4070         conn = alloc_conn(rqstp, bcts->dir);     3006         conn = alloc_conn(rqstp, bcts->dir);
4071         status = nfserr_jukebox;                 3007         status = nfserr_jukebox;
4072         if (!conn)                               3008         if (!conn)
4073                 goto out;                        3009                 goto out;
4074         nfsd4_init_conn(rqstp, conn, session)    3010         nfsd4_init_conn(rqstp, conn, session);
4075         status = nfs_ok;                         3011         status = nfs_ok;
4076 out:                                             3012 out:
4077         nfsd4_put_session(session);              3013         nfsd4_put_session(session);
4078 out_no_session:                                  3014 out_no_session:
4079         return status;                           3015         return status;
4080 }                                                3016 }
4081                                                  3017 
4082 static bool nfsd4_compound_in_session(struct     3018 static bool nfsd4_compound_in_session(struct nfsd4_compound_state *cstate, struct nfs4_sessionid *sid)
4083 {                                                3019 {
4084         if (!cstate->session)                    3020         if (!cstate->session)
4085                 return false;                    3021                 return false;
4086         return !memcmp(sid, &cstate->session-    3022         return !memcmp(sid, &cstate->session->se_sessionid, sizeof(*sid));
4087 }                                                3023 }
4088                                                  3024 
4089 __be32                                           3025 __be32
4090 nfsd4_destroy_session(struct svc_rqst *r, str    3026 nfsd4_destroy_session(struct svc_rqst *r, struct nfsd4_compound_state *cstate,
4091                 union nfsd4_op_u *u)             3027                 union nfsd4_op_u *u)
4092 {                                                3028 {
4093         struct nfs4_sessionid *sessionid = &u    3029         struct nfs4_sessionid *sessionid = &u->destroy_session.sessionid;
4094         struct nfsd4_session *ses;               3030         struct nfsd4_session *ses;
4095         __be32 status;                           3031         __be32 status;
4096         int ref_held_by_me = 0;                  3032         int ref_held_by_me = 0;
4097         struct net *net = SVC_NET(r);            3033         struct net *net = SVC_NET(r);
4098         struct nfsd_net *nn = net_generic(net    3034         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
4099                                                  3035 
4100         status = nfserr_not_only_op;             3036         status = nfserr_not_only_op;
4101         if (nfsd4_compound_in_session(cstate,    3037         if (nfsd4_compound_in_session(cstate, sessionid)) {
4102                 if (!nfsd4_last_compound_op(r    3038                 if (!nfsd4_last_compound_op(r))
4103                         goto out;                3039                         goto out;
4104                 ref_held_by_me++;                3040                 ref_held_by_me++;
4105         }                                        3041         }
4106         dump_sessionid(__func__, sessionid);     3042         dump_sessionid(__func__, sessionid);
4107         spin_lock(&nn->client_lock);             3043         spin_lock(&nn->client_lock);
4108         ses = find_in_sessionid_hashtbl(sessi    3044         ses = find_in_sessionid_hashtbl(sessionid, net, &status);
4109         if (!ses)                                3045         if (!ses)
4110                 goto out_client_lock;            3046                 goto out_client_lock;
4111         status = nfserr_wrong_cred;              3047         status = nfserr_wrong_cred;
4112         if (!nfsd4_mach_creds_match(ses->se_c    3048         if (!nfsd4_mach_creds_match(ses->se_client, r))
4113                 goto out_put_session;            3049                 goto out_put_session;
4114         status = mark_session_dead_locked(ses    3050         status = mark_session_dead_locked(ses, 1 + ref_held_by_me);
4115         if (status)                              3051         if (status)
4116                 goto out_put_session;            3052                 goto out_put_session;
4117         unhash_session(ses);                     3053         unhash_session(ses);
4118         spin_unlock(&nn->client_lock);           3054         spin_unlock(&nn->client_lock);
4119                                                  3055 
4120         nfsd4_probe_callback_sync(ses->se_cli    3056         nfsd4_probe_callback_sync(ses->se_client);
4121                                                  3057 
4122         spin_lock(&nn->client_lock);             3058         spin_lock(&nn->client_lock);
4123         status = nfs_ok;                         3059         status = nfs_ok;
4124 out_put_session:                                 3060 out_put_session:
4125         nfsd4_put_session_locked(ses);           3061         nfsd4_put_session_locked(ses);
4126 out_client_lock:                                 3062 out_client_lock:
4127         spin_unlock(&nn->client_lock);           3063         spin_unlock(&nn->client_lock);
4128 out:                                             3064 out:
4129         return status;                           3065         return status;
4130 }                                                3066 }
4131                                                  3067 
                                                   >> 3068 static struct nfsd4_conn *__nfsd4_find_conn(struct svc_xprt *xpt, struct nfsd4_session *s)
                                                   >> 3069 {
                                                   >> 3070         struct nfsd4_conn *c;
                                                   >> 3071 
                                                   >> 3072         list_for_each_entry(c, &s->se_conns, cn_persession) {
                                                   >> 3073                 if (c->cn_xprt == xpt) {
                                                   >> 3074                         return c;
                                                   >> 3075                 }
                                                   >> 3076         }
                                                   >> 3077         return NULL;
                                                   >> 3078 }
                                                   >> 3079 
4132 static __be32 nfsd4_sequence_check_conn(struc    3080 static __be32 nfsd4_sequence_check_conn(struct nfsd4_conn *new, struct nfsd4_session *ses)
4133 {                                                3081 {
4134         struct nfs4_client *clp = ses->se_cli    3082         struct nfs4_client *clp = ses->se_client;
4135         struct nfsd4_conn *c;                    3083         struct nfsd4_conn *c;
4136         __be32 status = nfs_ok;                  3084         __be32 status = nfs_ok;
4137         int ret;                                 3085         int ret;
4138                                                  3086 
4139         spin_lock(&clp->cl_lock);                3087         spin_lock(&clp->cl_lock);
4140         c = __nfsd4_find_conn(new->cn_xprt, s    3088         c = __nfsd4_find_conn(new->cn_xprt, ses);
4141         if (c)                                   3089         if (c)
4142                 goto out_free;                   3090                 goto out_free;
4143         status = nfserr_conn_not_bound_to_ses    3091         status = nfserr_conn_not_bound_to_session;
4144         if (clp->cl_mach_cred)                   3092         if (clp->cl_mach_cred)
4145                 goto out_free;                   3093                 goto out_free;
4146         __nfsd4_hash_conn(new, ses);             3094         __nfsd4_hash_conn(new, ses);
4147         spin_unlock(&clp->cl_lock);              3095         spin_unlock(&clp->cl_lock);
4148         ret = nfsd4_register_conn(new);          3096         ret = nfsd4_register_conn(new);
4149         if (ret)                                 3097         if (ret)
4150                 /* oops; xprt is already down    3098                 /* oops; xprt is already down: */
4151                 nfsd4_conn_lost(&new->cn_xpt_    3099                 nfsd4_conn_lost(&new->cn_xpt_user);
4152         return nfs_ok;                           3100         return nfs_ok;
4153 out_free:                                        3101 out_free:
4154         spin_unlock(&clp->cl_lock);              3102         spin_unlock(&clp->cl_lock);
4155         free_conn(new);                          3103         free_conn(new);
4156         return status;                           3104         return status;
4157 }                                                3105 }
4158                                                  3106 
4159 static bool nfsd4_session_too_many_ops(struct    3107 static bool nfsd4_session_too_many_ops(struct svc_rqst *rqstp, struct nfsd4_session *session)
4160 {                                                3108 {
4161         struct nfsd4_compoundargs *args = rqs    3109         struct nfsd4_compoundargs *args = rqstp->rq_argp;
4162                                                  3110 
4163         return args->opcnt > session->se_fcha    3111         return args->opcnt > session->se_fchannel.maxops;
4164 }                                                3112 }
4165                                                  3113 
4166 static bool nfsd4_request_too_big(struct svc_    3114 static bool nfsd4_request_too_big(struct svc_rqst *rqstp,
4167                                   struct nfsd    3115                                   struct nfsd4_session *session)
4168 {                                                3116 {
4169         struct xdr_buf *xb = &rqstp->rq_arg;     3117         struct xdr_buf *xb = &rqstp->rq_arg;
4170                                                  3118 
4171         return xb->len > session->se_fchannel    3119         return xb->len > session->se_fchannel.maxreq_sz;
4172 }                                                3120 }
4173                                                  3121 
4174 static bool replay_matches_cache(struct svc_r    3122 static bool replay_matches_cache(struct svc_rqst *rqstp,
4175                  struct nfsd4_sequence *seq,     3123                  struct nfsd4_sequence *seq, struct nfsd4_slot *slot)
4176 {                                                3124 {
4177         struct nfsd4_compoundargs *argp = rqs    3125         struct nfsd4_compoundargs *argp = rqstp->rq_argp;
4178                                                  3126 
4179         if ((bool)(slot->sl_flags & NFSD4_SLO    3127         if ((bool)(slot->sl_flags & NFSD4_SLOT_CACHETHIS) !=
4180             (bool)seq->cachethis)                3128             (bool)seq->cachethis)
4181                 return false;                    3129                 return false;
4182         /*                                       3130         /*
4183          * If there's an error then the reply !! 3131          * If there's an error than the reply can have fewer ops than
4184          * the call.                          !! 3132          * the call.  But if we cached a reply with *more* ops than the
                                                   >> 3133          * call you're sending us now, then this new call is clearly not
                                                   >> 3134          * really a replay of the old one:
4185          */                                      3135          */
4186         if (slot->sl_opcnt < argp->opcnt && ! !! 3136         if (slot->sl_opcnt < argp->opcnt)
4187                 return false;                 << 
4188         /*                                    << 
4189          * But if we cached a reply with *mor << 
4190          * sending us now, then this new call << 
4191          * replay of the old one:             << 
4192          */                                   << 
4193         if (slot->sl_opcnt > argp->opcnt)     << 
4194                 return false;                    3137                 return false;
4195         /* This is the only check explicitly     3138         /* This is the only check explicitly called by spec: */
4196         if (!same_creds(&rqstp->rq_cred, &slo    3139         if (!same_creds(&rqstp->rq_cred, &slot->sl_cred))
4197                 return false;                    3140                 return false;
4198         /*                                       3141         /*
4199          * There may be more comparisons we c    3142          * There may be more comparisons we could actually do, but the
4200          * spec doesn't require us to catch e    3143          * spec doesn't require us to catch every case where the calls
4201          * don't match (that would require ca    3144          * don't match (that would require caching the call as well as
4202          * the reply), so we don't bother.       3145          * the reply), so we don't bother.
4203          */                                      3146          */
4204         return true;                             3147         return true;
4205 }                                                3148 }
4206                                                  3149 
4207 __be32                                           3150 __be32
4208 nfsd4_sequence(struct svc_rqst *rqstp, struct    3151 nfsd4_sequence(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
4209                 union nfsd4_op_u *u)             3152                 union nfsd4_op_u *u)
4210 {                                                3153 {
4211         struct nfsd4_sequence *seq = &u->sequ    3154         struct nfsd4_sequence *seq = &u->sequence;
4212         struct nfsd4_compoundres *resp = rqst    3155         struct nfsd4_compoundres *resp = rqstp->rq_resp;
4213         struct xdr_stream *xdr = resp->xdr;   !! 3156         struct xdr_stream *xdr = &resp->xdr;
4214         struct nfsd4_session *session;           3157         struct nfsd4_session *session;
4215         struct nfs4_client *clp;                 3158         struct nfs4_client *clp;
4216         struct nfsd4_slot *slot;                 3159         struct nfsd4_slot *slot;
4217         struct nfsd4_conn *conn;                 3160         struct nfsd4_conn *conn;
4218         __be32 status;                           3161         __be32 status;
4219         int buflen;                              3162         int buflen;
4220         struct net *net = SVC_NET(rqstp);        3163         struct net *net = SVC_NET(rqstp);
4221         struct nfsd_net *nn = net_generic(net    3164         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
4222                                                  3165 
4223         if (resp->opcnt != 1)                    3166         if (resp->opcnt != 1)
4224                 return nfserr_sequence_pos;      3167                 return nfserr_sequence_pos;
4225                                                  3168 
4226         /*                                       3169         /*
4227          * Will be either used or freed by nf    3170          * Will be either used or freed by nfsd4_sequence_check_conn
4228          * below.                                3171          * below.
4229          */                                      3172          */
4230         conn = alloc_conn(rqstp, NFS4_CDFC4_F    3173         conn = alloc_conn(rqstp, NFS4_CDFC4_FORE);
4231         if (!conn)                               3174         if (!conn)
4232                 return nfserr_jukebox;           3175                 return nfserr_jukebox;
4233                                                  3176 
4234         spin_lock(&nn->client_lock);             3177         spin_lock(&nn->client_lock);
4235         session = find_in_sessionid_hashtbl(&    3178         session = find_in_sessionid_hashtbl(&seq->sessionid, net, &status);
4236         if (!session)                            3179         if (!session)
4237                 goto out_no_session;             3180                 goto out_no_session;
4238         clp = session->se_client;                3181         clp = session->se_client;
4239                                                  3182 
4240         status = nfserr_too_many_ops;            3183         status = nfserr_too_many_ops;
4241         if (nfsd4_session_too_many_ops(rqstp,    3184         if (nfsd4_session_too_many_ops(rqstp, session))
4242                 goto out_put_session;            3185                 goto out_put_session;
4243                                                  3186 
4244         status = nfserr_req_too_big;             3187         status = nfserr_req_too_big;
4245         if (nfsd4_request_too_big(rqstp, sess    3188         if (nfsd4_request_too_big(rqstp, session))
4246                 goto out_put_session;            3189                 goto out_put_session;
4247                                                  3190 
4248         status = nfserr_badslot;                 3191         status = nfserr_badslot;
4249         if (seq->slotid >= session->se_fchann    3192         if (seq->slotid >= session->se_fchannel.maxreqs)
4250                 goto out_put_session;            3193                 goto out_put_session;
4251                                                  3194 
4252         slot = session->se_slots[seq->slotid]    3195         slot = session->se_slots[seq->slotid];
4253         dprintk("%s: slotid %d\n", __func__,     3196         dprintk("%s: slotid %d\n", __func__, seq->slotid);
4254                                                  3197 
4255         /* We do not negotiate the number of     3198         /* We do not negotiate the number of slots yet, so set the
4256          * maxslots to the session maxreqs wh    3199          * maxslots to the session maxreqs which is used to encode
4257          * sr_highest_slotid and the sr_targe    3200          * sr_highest_slotid and the sr_target_slot id to maxslots */
4258         seq->maxslots = session->se_fchannel.    3201         seq->maxslots = session->se_fchannel.maxreqs;
4259                                                  3202 
4260         trace_nfsd_slot_seqid_sequence(clp, s << 
4261         status = check_slot_seqid(seq->seqid,    3203         status = check_slot_seqid(seq->seqid, slot->sl_seqid,
4262                                         slot-    3204                                         slot->sl_flags & NFSD4_SLOT_INUSE);
4263         if (status == nfserr_replay_cache) {     3205         if (status == nfserr_replay_cache) {
4264                 status = nfserr_seq_misordere    3206                 status = nfserr_seq_misordered;
4265                 if (!(slot->sl_flags & NFSD4_    3207                 if (!(slot->sl_flags & NFSD4_SLOT_INITIALIZED))
4266                         goto out_put_session;    3208                         goto out_put_session;
4267                 status = nfserr_seq_false_ret    3209                 status = nfserr_seq_false_retry;
4268                 if (!replay_matches_cache(rqs    3210                 if (!replay_matches_cache(rqstp, seq, slot))
4269                         goto out_put_session;    3211                         goto out_put_session;
4270                 cstate->slot = slot;             3212                 cstate->slot = slot;
4271                 cstate->session = session;       3213                 cstate->session = session;
4272                 cstate->clp = clp;               3214                 cstate->clp = clp;
4273                 /* Return the cached reply st    3215                 /* Return the cached reply status and set cstate->status
4274                  * for nfsd4_proc_compound pr    3216                  * for nfsd4_proc_compound processing */
4275                 status = nfsd4_replay_cache_e    3217                 status = nfsd4_replay_cache_entry(resp, seq);
4276                 cstate->status = nfserr_repla    3218                 cstate->status = nfserr_replay_cache;
4277                 goto out;                        3219                 goto out;
4278         }                                        3220         }
4279         if (status)                              3221         if (status)
4280                 goto out_put_session;            3222                 goto out_put_session;
4281                                                  3223 
4282         status = nfsd4_sequence_check_conn(co    3224         status = nfsd4_sequence_check_conn(conn, session);
4283         conn = NULL;                             3225         conn = NULL;
4284         if (status)                              3226         if (status)
4285                 goto out_put_session;            3227                 goto out_put_session;
4286                                                  3228 
4287         buflen = (seq->cachethis) ?              3229         buflen = (seq->cachethis) ?
4288                         session->se_fchannel.    3230                         session->se_fchannel.maxresp_cached :
4289                         session->se_fchannel.    3231                         session->se_fchannel.maxresp_sz;
4290         status = (seq->cachethis) ? nfserr_re    3232         status = (seq->cachethis) ? nfserr_rep_too_big_to_cache :
4291                                     nfserr_re    3233                                     nfserr_rep_too_big;
4292         if (xdr_restrict_buflen(xdr, buflen -    3234         if (xdr_restrict_buflen(xdr, buflen - rqstp->rq_auth_slack))
4293                 goto out_put_session;            3235                 goto out_put_session;
4294         svc_reserve(rqstp, buflen);              3236         svc_reserve(rqstp, buflen);
4295                                                  3237 
4296         status = nfs_ok;                         3238         status = nfs_ok;
4297         /* Success! bump slot seqid */           3239         /* Success! bump slot seqid */
4298         slot->sl_seqid = seq->seqid;             3240         slot->sl_seqid = seq->seqid;
4299         slot->sl_flags |= NFSD4_SLOT_INUSE;      3241         slot->sl_flags |= NFSD4_SLOT_INUSE;
4300         if (seq->cachethis)                      3242         if (seq->cachethis)
4301                 slot->sl_flags |= NFSD4_SLOT_    3243                 slot->sl_flags |= NFSD4_SLOT_CACHETHIS;
4302         else                                     3244         else
4303                 slot->sl_flags &= ~NFSD4_SLOT    3245                 slot->sl_flags &= ~NFSD4_SLOT_CACHETHIS;
4304                                                  3246 
4305         cstate->slot = slot;                     3247         cstate->slot = slot;
4306         cstate->session = session;               3248         cstate->session = session;
4307         cstate->clp = clp;                       3249         cstate->clp = clp;
4308                                                  3250 
4309 out:                                             3251 out:
4310         switch (clp->cl_cb_state) {              3252         switch (clp->cl_cb_state) {
4311         case NFSD4_CB_DOWN:                      3253         case NFSD4_CB_DOWN:
4312                 seq->status_flags = SEQ4_STAT    3254                 seq->status_flags = SEQ4_STATUS_CB_PATH_DOWN;
4313                 break;                           3255                 break;
4314         case NFSD4_CB_FAULT:                     3256         case NFSD4_CB_FAULT:
4315                 seq->status_flags = SEQ4_STAT    3257                 seq->status_flags = SEQ4_STATUS_BACKCHANNEL_FAULT;
4316                 break;                           3258                 break;
4317         default:                                 3259         default:
4318                 seq->status_flags = 0;           3260                 seq->status_flags = 0;
4319         }                                        3261         }
4320         if (!list_empty(&clp->cl_revoked))       3262         if (!list_empty(&clp->cl_revoked))
4321                 seq->status_flags |= SEQ4_STA    3263                 seq->status_flags |= SEQ4_STATUS_RECALLABLE_STATE_REVOKED;
4322         if (atomic_read(&clp->cl_admin_revoke << 
4323                 seq->status_flags |= SEQ4_STA << 
4324         trace_nfsd_seq4_status(rqstp, seq);   << 
4325 out_no_session:                                  3264 out_no_session:
4326         if (conn)                                3265         if (conn)
4327                 free_conn(conn);                 3266                 free_conn(conn);
4328         spin_unlock(&nn->client_lock);           3267         spin_unlock(&nn->client_lock);
4329         return status;                           3268         return status;
4330 out_put_session:                                 3269 out_put_session:
4331         nfsd4_put_session_locked(session);       3270         nfsd4_put_session_locked(session);
4332         goto out_no_session;                     3271         goto out_no_session;
4333 }                                                3272 }
4334                                                  3273 
4335 void                                             3274 void
4336 nfsd4_sequence_done(struct nfsd4_compoundres     3275 nfsd4_sequence_done(struct nfsd4_compoundres *resp)
4337 {                                                3276 {
4338         struct nfsd4_compound_state *cs = &re    3277         struct nfsd4_compound_state *cs = &resp->cstate;
4339                                                  3278 
4340         if (nfsd4_has_session(cs)) {             3279         if (nfsd4_has_session(cs)) {
4341                 if (cs->status != nfserr_repl    3280                 if (cs->status != nfserr_replay_cache) {
4342                         nfsd4_store_cache_ent    3281                         nfsd4_store_cache_entry(resp);
4343                         cs->slot->sl_flags &=    3282                         cs->slot->sl_flags &= ~NFSD4_SLOT_INUSE;
4344                 }                                3283                 }
4345                 /* Drop session reference tha    3284                 /* Drop session reference that was taken in nfsd4_sequence() */
4346                 nfsd4_put_session(cs->session    3285                 nfsd4_put_session(cs->session);
4347         } else if (cs->clp)                      3286         } else if (cs->clp)
4348                 put_client_renew(cs->clp);       3287                 put_client_renew(cs->clp);
4349 }                                                3288 }
4350                                                  3289 
4351 __be32                                           3290 __be32
4352 nfsd4_destroy_clientid(struct svc_rqst *rqstp    3291 nfsd4_destroy_clientid(struct svc_rqst *rqstp,
4353                 struct nfsd4_compound_state *    3292                 struct nfsd4_compound_state *cstate,
4354                 union nfsd4_op_u *u)             3293                 union nfsd4_op_u *u)
4355 {                                                3294 {
4356         struct nfsd4_destroy_clientid *dc = &    3295         struct nfsd4_destroy_clientid *dc = &u->destroy_clientid;
4357         struct nfs4_client *conf, *unconf;       3296         struct nfs4_client *conf, *unconf;
4358         struct nfs4_client *clp = NULL;          3297         struct nfs4_client *clp = NULL;
4359         __be32 status = 0;                       3298         __be32 status = 0;
4360         struct nfsd_net *nn = net_generic(SVC    3299         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
4361                                                  3300 
4362         spin_lock(&nn->client_lock);             3301         spin_lock(&nn->client_lock);
4363         unconf = find_unconfirmed_client(&dc-    3302         unconf = find_unconfirmed_client(&dc->clientid, true, nn);
4364         conf = find_confirmed_client(&dc->cli    3303         conf = find_confirmed_client(&dc->clientid, true, nn);
4365         WARN_ON_ONCE(conf && unconf);            3304         WARN_ON_ONCE(conf && unconf);
4366                                                  3305 
4367         if (conf) {                              3306         if (conf) {
4368                 if (client_has_state(conf)) {    3307                 if (client_has_state(conf)) {
4369                         status = nfserr_clien    3308                         status = nfserr_clientid_busy;
4370                         goto out;                3309                         goto out;
4371                 }                                3310                 }
4372                 status = mark_client_expired_    3311                 status = mark_client_expired_locked(conf);
4373                 if (status)                      3312                 if (status)
4374                         goto out;                3313                         goto out;
4375                 clp = conf;                      3314                 clp = conf;
4376         } else if (unconf)                       3315         } else if (unconf)
4377                 clp = unconf;                    3316                 clp = unconf;
4378         else {                                   3317         else {
4379                 status = nfserr_stale_clienti    3318                 status = nfserr_stale_clientid;
4380                 goto out;                        3319                 goto out;
4381         }                                        3320         }
4382         if (!nfsd4_mach_creds_match(clp, rqst    3321         if (!nfsd4_mach_creds_match(clp, rqstp)) {
4383                 clp = NULL;                      3322                 clp = NULL;
4384                 status = nfserr_wrong_cred;      3323                 status = nfserr_wrong_cred;
4385                 goto out;                        3324                 goto out;
4386         }                                        3325         }
4387         trace_nfsd_clid_destroyed(&clp->cl_cl << 
4388         unhash_client_locked(clp);               3326         unhash_client_locked(clp);
4389 out:                                             3327 out:
4390         spin_unlock(&nn->client_lock);           3328         spin_unlock(&nn->client_lock);
4391         if (clp)                                 3329         if (clp)
4392                 expire_client(clp);              3330                 expire_client(clp);
4393         return status;                           3331         return status;
4394 }                                                3332 }
4395                                                  3333 
4396 __be32                                           3334 __be32
4397 nfsd4_reclaim_complete(struct svc_rqst *rqstp    3335 nfsd4_reclaim_complete(struct svc_rqst *rqstp,
4398                 struct nfsd4_compound_state *    3336                 struct nfsd4_compound_state *cstate, union nfsd4_op_u *u)
4399 {                                                3337 {
4400         struct nfsd4_reclaim_complete *rc = &    3338         struct nfsd4_reclaim_complete *rc = &u->reclaim_complete;
4401         struct nfs4_client *clp = cstate->clp << 
4402         __be32 status = 0;                       3339         __be32 status = 0;
4403                                                  3340 
4404         if (rc->rca_one_fs) {                    3341         if (rc->rca_one_fs) {
4405                 if (!cstate->current_fh.fh_de    3342                 if (!cstate->current_fh.fh_dentry)
4406                         return nfserr_nofileh    3343                         return nfserr_nofilehandle;
4407                 /*                               3344                 /*
4408                  * We don't take advantage of    3345                  * We don't take advantage of the rca_one_fs case.
4409                  * That's OK, it's optional,     3346                  * That's OK, it's optional, we can safely ignore it.
4410                  */                              3347                  */
4411                 return nfs_ok;                   3348                 return nfs_ok;
4412         }                                        3349         }
4413                                                  3350 
4414         status = nfserr_complete_already;        3351         status = nfserr_complete_already;
4415         if (test_and_set_bit(NFSD4_CLIENT_REC !! 3352         if (test_and_set_bit(NFSD4_CLIENT_RECLAIM_COMPLETE,
                                                   >> 3353                              &cstate->session->se_client->cl_flags))
4416                 goto out;                        3354                 goto out;
4417                                                  3355 
4418         status = nfserr_stale_clientid;          3356         status = nfserr_stale_clientid;
4419         if (is_client_expired(clp))           !! 3357         if (is_client_expired(cstate->session->se_client))
4420                 /*                               3358                 /*
4421                  * The following error isn't     3359                  * The following error isn't really legal.
4422                  * But we only get here if th    3360                  * But we only get here if the client just explicitly
4423                  * destroyed the client.  Sur    3361                  * destroyed the client.  Surely it no longer cares what
4424                  * error it gets back on an o    3362                  * error it gets back on an operation for the dead
4425                  * client.                       3363                  * client.
4426                  */                              3364                  */
4427                 goto out;                        3365                 goto out;
4428                                                  3366 
4429         status = nfs_ok;                         3367         status = nfs_ok;
4430         trace_nfsd_clid_reclaim_complete(&clp !! 3368         nfsd4_client_record_create(cstate->session->se_client);
4431         nfsd4_client_record_create(clp);      !! 3369         inc_reclaim_complete(cstate->session->se_client);
4432         inc_reclaim_complete(clp);            << 
4433 out:                                             3370 out:
4434         return status;                           3371         return status;
4435 }                                                3372 }
4436                                                  3373 
4437 __be32                                           3374 __be32
4438 nfsd4_setclientid(struct svc_rqst *rqstp, str    3375 nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
4439                   union nfsd4_op_u *u)           3376                   union nfsd4_op_u *u)
4440 {                                                3377 {
4441         struct nfsd4_setclientid *setclid = &    3378         struct nfsd4_setclientid *setclid = &u->setclientid;
4442         struct xdr_netobj       clname = setc    3379         struct xdr_netobj       clname = setclid->se_name;
4443         nfs4_verifier           clverifier =     3380         nfs4_verifier           clverifier = setclid->se_verf;
4444         struct nfs4_client      *conf, *new;     3381         struct nfs4_client      *conf, *new;
4445         struct nfs4_client      *unconf = NUL    3382         struct nfs4_client      *unconf = NULL;
4446         __be32                  status;          3383         __be32                  status;
4447         struct nfsd_net         *nn = net_gen    3384         struct nfsd_net         *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
4448                                                  3385 
4449         new = create_client(clname, rqstp, &c    3386         new = create_client(clname, rqstp, &clverifier);
4450         if (new == NULL)                         3387         if (new == NULL)
4451                 return nfserr_jukebox;           3388                 return nfserr_jukebox;
                                                   >> 3389         /* Cases below refer to rfc 3530 section 14.2.33: */
4452         spin_lock(&nn->client_lock);             3390         spin_lock(&nn->client_lock);
4453         conf = find_confirmed_client_by_name(    3391         conf = find_confirmed_client_by_name(&clname, nn);
4454         if (conf && client_has_state(conf)) {    3392         if (conf && client_has_state(conf)) {
                                                   >> 3393                 /* case 0: */
4455                 status = nfserr_clid_inuse;      3394                 status = nfserr_clid_inuse;
4456                 if (clp_used_exchangeid(conf)    3395                 if (clp_used_exchangeid(conf))
4457                         goto out;                3396                         goto out;
4458                 if (!same_creds(&conf->cl_cre    3397                 if (!same_creds(&conf->cl_cred, &rqstp->rq_cred)) {
4459                         trace_nfsd_clid_cred_ !! 3398                         char addr_str[INET6_ADDRSTRLEN];
                                                   >> 3399                         rpc_ntop((struct sockaddr *) &conf->cl_addr, addr_str,
                                                   >> 3400                                  sizeof(addr_str));
                                                   >> 3401                         dprintk("NFSD: setclientid: string in use by client "
                                                   >> 3402                                 "at %s\n", addr_str);
4460                         goto out;                3403                         goto out;
4461                 }                                3404                 }
4462         }                                        3405         }
4463         unconf = find_unconfirmed_client_by_n    3406         unconf = find_unconfirmed_client_by_name(&clname, nn);
4464         if (unconf)                              3407         if (unconf)
4465                 unhash_client_locked(unconf);    3408                 unhash_client_locked(unconf);
4466         if (conf) {                           !! 3409         if (conf && same_verf(&conf->cl_verifier, &clverifier)) {
4467                 if (same_verf(&conf->cl_verif !! 3410                 /* case 1: probable callback update */
4468                         copy_clid(new, conf); !! 3411                 copy_clid(new, conf);
4469                         gen_confirm(new, nn); !! 3412                 gen_confirm(new, nn);
4470                 } else                        !! 3413         } else /* case 4 (new client) or cases 2, 3 (client reboot): */
4471                         trace_nfsd_clid_verf_ !! 3414                 gen_clid(new, nn);
4472                                               << 
4473         } else                                << 
4474                 trace_nfsd_clid_fresh(new);   << 
4475         new->cl_minorversion = 0;                3415         new->cl_minorversion = 0;
4476         gen_callback(new, setclid, rqstp);       3416         gen_callback(new, setclid, rqstp);
4477         add_to_unconfirmed(new);                 3417         add_to_unconfirmed(new);
4478         setclid->se_clientid.cl_boot = new->c    3418         setclid->se_clientid.cl_boot = new->cl_clientid.cl_boot;
4479         setclid->se_clientid.cl_id = new->cl_    3419         setclid->se_clientid.cl_id = new->cl_clientid.cl_id;
4480         memcpy(setclid->se_confirm.data, new-    3420         memcpy(setclid->se_confirm.data, new->cl_confirm.data, sizeof(setclid->se_confirm.data));
4481         new = NULL;                              3421         new = NULL;
4482         status = nfs_ok;                         3422         status = nfs_ok;
4483 out:                                             3423 out:
4484         spin_unlock(&nn->client_lock);           3424         spin_unlock(&nn->client_lock);
4485         if (new)                                 3425         if (new)
4486                 free_client(new);                3426                 free_client(new);
4487         if (unconf) {                         !! 3427         if (unconf)
4488                 trace_nfsd_clid_expire_unconf << 
4489                 expire_client(unconf);           3428                 expire_client(unconf);
4490         }                                     << 
4491         return status;                           3429         return status;
4492 }                                                3430 }
4493                                                  3431 
                                                   >> 3432 
4494 __be32                                           3433 __be32
4495 nfsd4_setclientid_confirm(struct svc_rqst *rq    3434 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
4496                         struct nfsd4_compound    3435                         struct nfsd4_compound_state *cstate,
4497                         union nfsd4_op_u *u)     3436                         union nfsd4_op_u *u)
4498 {                                                3437 {
4499         struct nfsd4_setclientid_confirm *set    3438         struct nfsd4_setclientid_confirm *setclientid_confirm =
4500                         &u->setclientid_confi    3439                         &u->setclientid_confirm;
4501         struct nfs4_client *conf, *unconf;       3440         struct nfs4_client *conf, *unconf;
4502         struct nfs4_client *old = NULL;          3441         struct nfs4_client *old = NULL;
4503         nfs4_verifier confirm = setclientid_c    3442         nfs4_verifier confirm = setclientid_confirm->sc_confirm; 
4504         clientid_t * clid = &setclientid_conf    3443         clientid_t * clid = &setclientid_confirm->sc_clientid;
4505         __be32 status;                           3444         __be32 status;
4506         struct nfsd_net *nn = net_generic(SVC    3445         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
4507                                                  3446 
4508         if (STALE_CLIENTID(clid, nn))            3447         if (STALE_CLIENTID(clid, nn))
4509                 return nfserr_stale_clientid;    3448                 return nfserr_stale_clientid;
4510                                                  3449 
4511         spin_lock(&nn->client_lock);             3450         spin_lock(&nn->client_lock);
4512         conf = find_confirmed_client(clid, fa    3451         conf = find_confirmed_client(clid, false, nn);
4513         unconf = find_unconfirmed_client(clid    3452         unconf = find_unconfirmed_client(clid, false, nn);
4514         /*                                       3453         /*
4515          * We try hard to give out unique cli    3454          * We try hard to give out unique clientid's, so if we get an
4516          * attempt to confirm the same client    3455          * attempt to confirm the same clientid with a different cred,
4517          * the client may be buggy; this shou    3456          * the client may be buggy; this should never happen.
4518          *                                       3457          *
4519          * Nevertheless, RFC 7530 recommends     3458          * Nevertheless, RFC 7530 recommends INUSE for this case:
4520          */                                      3459          */
4521         status = nfserr_clid_inuse;              3460         status = nfserr_clid_inuse;
4522         if (unconf && !same_creds(&unconf->cl !! 3461         if (unconf && !same_creds(&unconf->cl_cred, &rqstp->rq_cred))
4523                 trace_nfsd_clid_cred_mismatch << 
4524                 goto out;                        3462                 goto out;
4525         }                                     !! 3463         if (conf && !same_creds(&conf->cl_cred, &rqstp->rq_cred))
4526         if (conf && !same_creds(&conf->cl_cre << 
4527                 trace_nfsd_clid_cred_mismatch << 
4528                 goto out;                        3464                 goto out;
4529         }                                     !! 3465         /* cases below refer to rfc 3530 section 14.2.34: */
4530         if (!unconf || !same_verf(&confirm, &    3466         if (!unconf || !same_verf(&confirm, &unconf->cl_confirm)) {
4531                 if (conf && same_verf(&confir    3467                 if (conf && same_verf(&confirm, &conf->cl_confirm)) {
                                                   >> 3468                         /* case 2: probable retransmit */
4532                         status = nfs_ok;         3469                         status = nfs_ok;
4533                 } else                        !! 3470                 } else /* case 4: client hasn't noticed we rebooted yet? */
4534                         status = nfserr_stale    3471                         status = nfserr_stale_clientid;
4535                 goto out;                        3472                 goto out;
4536         }                                        3473         }
4537         status = nfs_ok;                         3474         status = nfs_ok;
4538         if (conf) {                           !! 3475         if (conf) { /* case 1: callback update */
4539                 old = unconf;                    3476                 old = unconf;
4540                 unhash_client_locked(old);       3477                 unhash_client_locked(old);
4541                 nfsd4_change_callback(conf, &    3478                 nfsd4_change_callback(conf, &unconf->cl_cb_conn);
4542         } else {                              !! 3479         } else { /* case 3: normal case; new or rebooted client */
4543                 old = find_confirmed_client_b    3480                 old = find_confirmed_client_by_name(&unconf->cl_name, nn);
4544                 if (old) {                       3481                 if (old) {
4545                         status = nfserr_clid_    3482                         status = nfserr_clid_inuse;
4546                         if (client_has_state(    3483                         if (client_has_state(old)
4547                                         && !s    3484                                         && !same_creds(&unconf->cl_cred,
4548                                               !! 3485                                                         &old->cl_cred))
4549                                 old = NULL;   << 
4550                                 goto out;        3486                                 goto out;
4551                         }                     << 
4552                         status = mark_client_    3487                         status = mark_client_expired_locked(old);
4553                         if (status) {            3488                         if (status) {
4554                                 old = NULL;      3489                                 old = NULL;
4555                                 goto out;        3490                                 goto out;
4556                         }                        3491                         }
4557                         trace_nfsd_clid_repla << 
4558                 }                                3492                 }
4559                 move_to_confirmed(unconf);       3493                 move_to_confirmed(unconf);
4560                 conf = unconf;                   3494                 conf = unconf;
4561         }                                        3495         }
4562         get_client_locked(conf);                 3496         get_client_locked(conf);
4563         spin_unlock(&nn->client_lock);           3497         spin_unlock(&nn->client_lock);
4564         if (conf == unconf)                   << 
4565                 fsnotify_dentry(conf->cl_nfsd << 
4566         nfsd4_probe_callback(conf);              3498         nfsd4_probe_callback(conf);
4567         spin_lock(&nn->client_lock);             3499         spin_lock(&nn->client_lock);
4568         put_client_renew_locked(conf);           3500         put_client_renew_locked(conf);
4569 out:                                             3501 out:
4570         spin_unlock(&nn->client_lock);           3502         spin_unlock(&nn->client_lock);
4571         if (old)                                 3503         if (old)
4572                 expire_client(old);              3504                 expire_client(old);
4573         return status;                           3505         return status;
4574 }                                                3506 }
4575                                                  3507 
4576 static struct nfs4_file *nfsd4_alloc_file(voi    3508 static struct nfs4_file *nfsd4_alloc_file(void)
4577 {                                                3509 {
4578         return kmem_cache_alloc(file_slab, GF    3510         return kmem_cache_alloc(file_slab, GFP_KERNEL);
4579 }                                                3511 }
4580                                                  3512 
4581 /* OPEN Share state helper functions */          3513 /* OPEN Share state helper functions */
4582                                               !! 3514 static void nfsd4_init_file(struct knfsd_fh *fh, unsigned int hashval,
4583 static void nfsd4_file_init(const struct svc_ !! 3515                                 struct nfs4_file *fp)
4584 {                                                3516 {
                                                   >> 3517         lockdep_assert_held(&state_lock);
                                                   >> 3518 
4585         refcount_set(&fp->fi_ref, 1);            3519         refcount_set(&fp->fi_ref, 1);
4586         spin_lock_init(&fp->fi_lock);            3520         spin_lock_init(&fp->fi_lock);
4587         INIT_LIST_HEAD(&fp->fi_stateids);        3521         INIT_LIST_HEAD(&fp->fi_stateids);
4588         INIT_LIST_HEAD(&fp->fi_delegations);     3522         INIT_LIST_HEAD(&fp->fi_delegations);
4589         INIT_LIST_HEAD(&fp->fi_clnt_odstate);    3523         INIT_LIST_HEAD(&fp->fi_clnt_odstate);
4590         fh_copy_shallow(&fp->fi_fhandle, &fh- !! 3524         fh_copy_shallow(&fp->fi_fhandle, fh);
4591         fp->fi_deleg_file = NULL;                3525         fp->fi_deleg_file = NULL;
4592         fp->fi_had_conflict = false;             3526         fp->fi_had_conflict = false;
4593         fp->fi_share_deny = 0;                   3527         fp->fi_share_deny = 0;
4594         memset(fp->fi_fds, 0, sizeof(fp->fi_f    3528         memset(fp->fi_fds, 0, sizeof(fp->fi_fds));
4595         memset(fp->fi_access, 0, sizeof(fp->f    3529         memset(fp->fi_access, 0, sizeof(fp->fi_access));
4596         fp->fi_aliased = false;               << 
4597         fp->fi_inode = d_inode(fh->fh_dentry) << 
4598 #ifdef CONFIG_NFSD_PNFS                          3530 #ifdef CONFIG_NFSD_PNFS
4599         INIT_LIST_HEAD(&fp->fi_lo_states);       3531         INIT_LIST_HEAD(&fp->fi_lo_states);
4600         atomic_set(&fp->fi_lo_recalls, 0);       3532         atomic_set(&fp->fi_lo_recalls, 0);
4601 #endif                                           3533 #endif
                                                   >> 3534         hlist_add_head_rcu(&fp->fi_hash, &file_hashtbl[hashval]);
4602 }                                                3535 }
4603                                                  3536 
4604 void                                             3537 void
4605 nfsd4_free_slabs(void)                           3538 nfsd4_free_slabs(void)
4606 {                                                3539 {
4607         kmem_cache_destroy(client_slab);         3540         kmem_cache_destroy(client_slab);
4608         kmem_cache_destroy(openowner_slab);      3541         kmem_cache_destroy(openowner_slab);
4609         kmem_cache_destroy(lockowner_slab);      3542         kmem_cache_destroy(lockowner_slab);
4610         kmem_cache_destroy(file_slab);           3543         kmem_cache_destroy(file_slab);
4611         kmem_cache_destroy(stateid_slab);        3544         kmem_cache_destroy(stateid_slab);
4612         kmem_cache_destroy(deleg_slab);          3545         kmem_cache_destroy(deleg_slab);
4613         kmem_cache_destroy(odstate_slab);        3546         kmem_cache_destroy(odstate_slab);
4614 }                                                3547 }
4615                                                  3548 
4616 int                                              3549 int
4617 nfsd4_init_slabs(void)                           3550 nfsd4_init_slabs(void)
4618 {                                                3551 {
4619         client_slab = KMEM_CACHE(nfs4_client, !! 3552         client_slab = kmem_cache_create("nfsd4_clients",
                                                   >> 3553                         sizeof(struct nfs4_client), 0, 0, NULL);
4620         if (client_slab == NULL)                 3554         if (client_slab == NULL)
4621                 goto out;                        3555                 goto out;
4622         openowner_slab = KMEM_CACHE(nfs4_open !! 3556         openowner_slab = kmem_cache_create("nfsd4_openowners",
                                                   >> 3557                         sizeof(struct nfs4_openowner), 0, 0, NULL);
4623         if (openowner_slab == NULL)              3558         if (openowner_slab == NULL)
4624                 goto out_free_client_slab;       3559                 goto out_free_client_slab;
4625         lockowner_slab = KMEM_CACHE(nfs4_lock !! 3560         lockowner_slab = kmem_cache_create("nfsd4_lockowners",
                                                   >> 3561                         sizeof(struct nfs4_lockowner), 0, 0, NULL);
4626         if (lockowner_slab == NULL)              3562         if (lockowner_slab == NULL)
4627                 goto out_free_openowner_slab;    3563                 goto out_free_openowner_slab;
4628         file_slab = KMEM_CACHE(nfs4_file, 0); !! 3564         file_slab = kmem_cache_create("nfsd4_files",
                                                   >> 3565                         sizeof(struct nfs4_file), 0, 0, NULL);
4629         if (file_slab == NULL)                   3566         if (file_slab == NULL)
4630                 goto out_free_lockowner_slab;    3567                 goto out_free_lockowner_slab;
4631         stateid_slab = KMEM_CACHE(nfs4_ol_sta !! 3568         stateid_slab = kmem_cache_create("nfsd4_stateids",
                                                   >> 3569                         sizeof(struct nfs4_ol_stateid), 0, 0, NULL);
4632         if (stateid_slab == NULL)                3570         if (stateid_slab == NULL)
4633                 goto out_free_file_slab;         3571                 goto out_free_file_slab;
4634         deleg_slab = KMEM_CACHE(nfs4_delegati !! 3572         deleg_slab = kmem_cache_create("nfsd4_delegations",
                                                   >> 3573                         sizeof(struct nfs4_delegation), 0, 0, NULL);
4635         if (deleg_slab == NULL)                  3574         if (deleg_slab == NULL)
4636                 goto out_free_stateid_slab;      3575                 goto out_free_stateid_slab;
4637         odstate_slab = KMEM_CACHE(nfs4_clnt_o !! 3576         odstate_slab = kmem_cache_create("nfsd4_odstate",
                                                   >> 3577                         sizeof(struct nfs4_clnt_odstate), 0, 0, NULL);
4638         if (odstate_slab == NULL)                3578         if (odstate_slab == NULL)
4639                 goto out_free_deleg_slab;        3579                 goto out_free_deleg_slab;
4640         return 0;                                3580         return 0;
4641                                                  3581 
4642 out_free_deleg_slab:                             3582 out_free_deleg_slab:
4643         kmem_cache_destroy(deleg_slab);          3583         kmem_cache_destroy(deleg_slab);
4644 out_free_stateid_slab:                           3584 out_free_stateid_slab:
4645         kmem_cache_destroy(stateid_slab);        3585         kmem_cache_destroy(stateid_slab);
4646 out_free_file_slab:                              3586 out_free_file_slab:
4647         kmem_cache_destroy(file_slab);           3587         kmem_cache_destroy(file_slab);
4648 out_free_lockowner_slab:                         3588 out_free_lockowner_slab:
4649         kmem_cache_destroy(lockowner_slab);      3589         kmem_cache_destroy(lockowner_slab);
4650 out_free_openowner_slab:                         3590 out_free_openowner_slab:
4651         kmem_cache_destroy(openowner_slab);      3591         kmem_cache_destroy(openowner_slab);
4652 out_free_client_slab:                            3592 out_free_client_slab:
4653         kmem_cache_destroy(client_slab);         3593         kmem_cache_destroy(client_slab);
4654 out:                                             3594 out:
                                                   >> 3595         dprintk("nfsd4: out of memory while initializing nfsv4\n");
4655         return -ENOMEM;                          3596         return -ENOMEM;
4656 }                                                3597 }
4657                                                  3598 
4658 static unsigned long                          << 
4659 nfsd4_state_shrinker_count(struct shrinker *s << 
4660 {                                             << 
4661         int count;                            << 
4662         struct nfsd_net *nn = shrink->private << 
4663                                               << 
4664         count = atomic_read(&nn->nfsd_courtes << 
4665         if (!count)                           << 
4666                 count = atomic_long_read(&num << 
4667         if (count)                            << 
4668                 queue_work(laundry_wq, &nn->n << 
4669         return (unsigned long)count;          << 
4670 }                                             << 
4671                                               << 
4672 static unsigned long                          << 
4673 nfsd4_state_shrinker_scan(struct shrinker *sh << 
4674 {                                             << 
4675         return SHRINK_STOP;                   << 
4676 }                                             << 
4677                                               << 
4678 void                                          << 
4679 nfsd4_init_leases_net(struct nfsd_net *nn)    << 
4680 {                                             << 
4681         struct sysinfo si;                    << 
4682         u64 max_clients;                      << 
4683                                               << 
4684         nn->nfsd4_lease = 90;   /* default le << 
4685         nn->nfsd4_grace = 90;                 << 
4686         nn->somebody_reclaimed = false;       << 
4687         nn->track_reclaim_completes = false;  << 
4688         nn->clverifier_counter = get_random_u << 
4689         nn->clientid_base = get_random_u32(); << 
4690         nn->clientid_counter = nn->clientid_b << 
4691         nn->s2s_cp_cl_id = nn->clientid_count << 
4692                                               << 
4693         atomic_set(&nn->nfs4_client_count, 0) << 
4694         si_meminfo(&si);                      << 
4695         max_clients = (u64)si.totalram * si.m << 
4696         max_clients *= NFS4_CLIENTS_PER_GB;   << 
4697         nn->nfs4_max_clients = max_t(int, max << 
4698                                               << 
4699         atomic_set(&nn->nfsd_courtesy_clients << 
4700 }                                             << 
4701                                               << 
4702 enum rp_lock {                                << 
4703         RP_UNLOCKED,                          << 
4704         RP_LOCKED,                            << 
4705         RP_UNHASHED,                          << 
4706 };                                            << 
4707                                               << 
4708 static void init_nfs4_replay(struct nfs4_repl    3599 static void init_nfs4_replay(struct nfs4_replay *rp)
4709 {                                                3600 {
4710         rp->rp_status = nfserr_serverfault;      3601         rp->rp_status = nfserr_serverfault;
4711         rp->rp_buflen = 0;                       3602         rp->rp_buflen = 0;
4712         rp->rp_buf = rp->rp_ibuf;                3603         rp->rp_buf = rp->rp_ibuf;
4713         atomic_set(&rp->rp_locked, RP_UNLOCKE !! 3604         mutex_init(&rp->rp_mutex);
4714 }                                                3605 }
4715                                                  3606 
4716 static int nfsd4_cstate_assign_replay(struct  !! 3607 static void nfsd4_cstate_assign_replay(struct nfsd4_compound_state *cstate,
4717                                       struct  !! 3608                 struct nfs4_stateowner *so)
4718 {                                                3609 {
4719         if (!nfsd4_has_session(cstate)) {        3610         if (!nfsd4_has_session(cstate)) {
4720                 wait_var_event(&so->so_replay !! 3611                 mutex_lock(&so->so_replay.rp_mutex);
4721                                atomic_cmpxchg << 
4722                                               << 
4723                 if (atomic_read(&so->so_repla << 
4724                         return -EAGAIN;       << 
4725                 cstate->replay_owner = nfs4_g    3612                 cstate->replay_owner = nfs4_get_stateowner(so);
4726         }                                        3613         }
4727         return 0;                             << 
4728 }                                                3614 }
4729                                                  3615 
4730 void nfsd4_cstate_clear_replay(struct nfsd4_c    3616 void nfsd4_cstate_clear_replay(struct nfsd4_compound_state *cstate)
4731 {                                                3617 {
4732         struct nfs4_stateowner *so = cstate->    3618         struct nfs4_stateowner *so = cstate->replay_owner;
4733                                                  3619 
4734         if (so != NULL) {                        3620         if (so != NULL) {
4735                 cstate->replay_owner = NULL;     3621                 cstate->replay_owner = NULL;
4736                 atomic_set(&so->so_replay.rp_ !! 3622                 mutex_unlock(&so->so_replay.rp_mutex);
4737                 smp_mb__after_atomic();       << 
4738                 wake_up_var(&so->so_replay.rp << 
4739                 nfs4_put_stateowner(so);         3623                 nfs4_put_stateowner(so);
4740         }                                        3624         }
4741 }                                                3625 }
4742                                                  3626 
4743 static inline void *alloc_stateowner(struct k    3627 static inline void *alloc_stateowner(struct kmem_cache *slab, struct xdr_netobj *owner, struct nfs4_client *clp)
4744 {                                                3628 {
4745         struct nfs4_stateowner *sop;             3629         struct nfs4_stateowner *sop;
4746                                                  3630 
4747         sop = kmem_cache_alloc(slab, GFP_KERN    3631         sop = kmem_cache_alloc(slab, GFP_KERNEL);
4748         if (!sop)                                3632         if (!sop)
4749                 return NULL;                     3633                 return NULL;
4750                                                  3634 
4751         xdr_netobj_dup(&sop->so_owner, owner, !! 3635         sop->so_owner.data = kmemdup(owner->data, owner->len, GFP_KERNEL);
4752         if (!sop->so_owner.data) {               3636         if (!sop->so_owner.data) {
4753                 kmem_cache_free(slab, sop);      3637                 kmem_cache_free(slab, sop);
4754                 return NULL;                     3638                 return NULL;
4755         }                                        3639         }
                                                   >> 3640         sop->so_owner.len = owner->len;
4756                                                  3641 
4757         INIT_LIST_HEAD(&sop->so_stateids);       3642         INIT_LIST_HEAD(&sop->so_stateids);
4758         sop->so_client = clp;                    3643         sop->so_client = clp;
4759         init_nfs4_replay(&sop->so_replay);       3644         init_nfs4_replay(&sop->so_replay);
4760         atomic_set(&sop->so_count, 1);           3645         atomic_set(&sop->so_count, 1);
4761         return sop;                              3646         return sop;
4762 }                                                3647 }
4763                                                  3648 
4764 static void hash_openowner(struct nfs4_openow    3649 static void hash_openowner(struct nfs4_openowner *oo, struct nfs4_client *clp, unsigned int strhashval)
4765 {                                                3650 {
4766         lockdep_assert_held(&clp->cl_lock);      3651         lockdep_assert_held(&clp->cl_lock);
4767                                                  3652 
4768         list_add(&oo->oo_owner.so_strhash,       3653         list_add(&oo->oo_owner.so_strhash,
4769                  &clp->cl_ownerstr_hashtbl[st    3654                  &clp->cl_ownerstr_hashtbl[strhashval]);
4770         list_add(&oo->oo_perclient, &clp->cl_    3655         list_add(&oo->oo_perclient, &clp->cl_openowners);
4771 }                                                3656 }
4772                                                  3657 
4773 static void nfs4_unhash_openowner(struct nfs4    3658 static void nfs4_unhash_openowner(struct nfs4_stateowner *so)
4774 {                                                3659 {
4775         unhash_openowner_locked(openowner(so)    3660         unhash_openowner_locked(openowner(so));
4776 }                                                3661 }
4777                                                  3662 
4778 static void nfs4_free_openowner(struct nfs4_s    3663 static void nfs4_free_openowner(struct nfs4_stateowner *so)
4779 {                                                3664 {
4780         struct nfs4_openowner *oo = openowner    3665         struct nfs4_openowner *oo = openowner(so);
4781                                                  3666 
4782         kmem_cache_free(openowner_slab, oo);     3667         kmem_cache_free(openowner_slab, oo);
4783 }                                                3668 }
4784                                                  3669 
4785 static const struct nfs4_stateowner_operation    3670 static const struct nfs4_stateowner_operations openowner_ops = {
4786         .so_unhash =    nfs4_unhash_openowner    3671         .so_unhash =    nfs4_unhash_openowner,
4787         .so_free =      nfs4_free_openowner,     3672         .so_free =      nfs4_free_openowner,
4788 };                                               3673 };
4789                                                  3674 
4790 static struct nfs4_ol_stateid *                  3675 static struct nfs4_ol_stateid *
4791 nfsd4_find_existing_open(struct nfs4_file *fp    3676 nfsd4_find_existing_open(struct nfs4_file *fp, struct nfsd4_open *open)
4792 {                                                3677 {
4793         struct nfs4_ol_stateid *local, *ret =    3678         struct nfs4_ol_stateid *local, *ret = NULL;
4794         struct nfs4_openowner *oo = open->op_    3679         struct nfs4_openowner *oo = open->op_openowner;
4795                                                  3680 
4796         lockdep_assert_held(&fp->fi_lock);       3681         lockdep_assert_held(&fp->fi_lock);
4797                                                  3682 
4798         list_for_each_entry(local, &fp->fi_st    3683         list_for_each_entry(local, &fp->fi_stateids, st_perfile) {
4799                 /* ignore lock owners */         3684                 /* ignore lock owners */
4800                 if (local->st_stateowner->so_    3685                 if (local->st_stateowner->so_is_open_owner == 0)
4801                         continue;                3686                         continue;
4802                 if (local->st_stateowner != &    3687                 if (local->st_stateowner != &oo->oo_owner)
4803                         continue;                3688                         continue;
4804                 if (local->st_stid.sc_type == !! 3689                 if (local->st_stid.sc_type == NFS4_OPEN_STID) {
4805                     !local->st_stid.sc_status << 
4806                         ret = local;             3690                         ret = local;
4807                         refcount_inc(&ret->st    3691                         refcount_inc(&ret->st_stid.sc_count);
4808                         break;                   3692                         break;
4809                 }                                3693                 }
4810         }                                        3694         }
4811         return ret;                              3695         return ret;
4812 }                                                3696 }
4813                                                  3697 
4814 static void nfsd4_drop_revoked_stid(struct nf << 
4815         __releases(&s->sc_client->cl_lock)    << 
4816 {                                             << 
4817         struct nfs4_client *cl = s->sc_client << 
4818         LIST_HEAD(reaplist);                  << 
4819         struct nfs4_ol_stateid *stp;          << 
4820         struct nfs4_delegation *dp;           << 
4821         bool unhashed;                        << 
4822                                               << 
4823         switch (s->sc_type) {                 << 
4824         case SC_TYPE_OPEN:                    << 
4825                 stp = openlockstateid(s);     << 
4826                 if (unhash_open_stateid(stp,  << 
4827                         put_ol_stateid_locked << 
4828                 spin_unlock(&cl->cl_lock);    << 
4829                 free_ol_stateid_reaplist(&rea << 
4830                 break;                        << 
4831         case SC_TYPE_LOCK:                    << 
4832                 stp = openlockstateid(s);     << 
4833                 unhashed = unhash_lock_statei << 
4834                 spin_unlock(&cl->cl_lock);    << 
4835                 if (unhashed)                 << 
4836                         nfs4_put_stid(s);     << 
4837                 break;                        << 
4838         case SC_TYPE_DELEG:                   << 
4839                 dp = delegstateid(s);         << 
4840                 list_del_init(&dp->dl_recall_ << 
4841                 spin_unlock(&cl->cl_lock);    << 
4842                 nfs4_put_stid(s);             << 
4843                 break;                        << 
4844         default:                              << 
4845                 spin_unlock(&cl->cl_lock);    << 
4846         }                                     << 
4847 }                                             << 
4848                                               << 
4849 static void nfsd40_drop_revoked_stid(struct n << 
4850                                     stateid_t << 
4851 {                                             << 
4852         /* NFSv4.0 has no way for the client  << 
4853          * that it can forget an admin-revoke << 
4854          * So we keep it around until the fir << 
4855          * client uses it, and drop it the fi << 
4856          * nfserr_admin_revoked is returned.  << 
4857          * For v4.1 and later we wait until e << 
4858          * to free the stateid.               << 
4859          */                                   << 
4860         if (cl->cl_minorversion == 0) {       << 
4861                 struct nfs4_stid *st;         << 
4862                                               << 
4863                 spin_lock(&cl->cl_lock);      << 
4864                 st = find_stateid_locked(cl,  << 
4865                 if (st)                       << 
4866                         nfsd4_drop_revoked_st << 
4867                 else                          << 
4868                         spin_unlock(&cl->cl_l << 
4869         }                                     << 
4870 }                                             << 
4871                                               << 
4872 static __be32                                    3698 static __be32
4873 nfsd4_verify_open_stid(struct nfs4_stid *s)      3699 nfsd4_verify_open_stid(struct nfs4_stid *s)
4874 {                                                3700 {
4875         __be32 ret = nfs_ok;                     3701         __be32 ret = nfs_ok;
4876                                                  3702 
4877         if (s->sc_status & SC_STATUS_ADMIN_RE !! 3703         switch (s->sc_type) {
4878                 ret = nfserr_admin_revoked;   !! 3704         default:
4879         else if (s->sc_status & SC_STATUS_REV !! 3705                 break;
4880                 ret = nfserr_deleg_revoked;   !! 3706         case 0:
4881         else if (s->sc_status & SC_STATUS_CLO !! 3707         case NFS4_CLOSED_STID:
                                                   >> 3708         case NFS4_CLOSED_DELEG_STID:
4882                 ret = nfserr_bad_stateid;        3709                 ret = nfserr_bad_stateid;
                                                   >> 3710                 break;
                                                   >> 3711         case NFS4_REVOKED_DELEG_STID:
                                                   >> 3712                 ret = nfserr_deleg_revoked;
                                                   >> 3713         }
4883         return ret;                              3714         return ret;
4884 }                                                3715 }
4885                                                  3716 
4886 /* Lock the stateid st_mutex, and deal with r    3717 /* Lock the stateid st_mutex, and deal with races with CLOSE */
4887 static __be32                                    3718 static __be32
4888 nfsd4_lock_ol_stateid(struct nfs4_ol_stateid     3719 nfsd4_lock_ol_stateid(struct nfs4_ol_stateid *stp)
4889 {                                                3720 {
4890         __be32 ret;                              3721         __be32 ret;
4891                                                  3722 
4892         mutex_lock_nested(&stp->st_mutex, LOC    3723         mutex_lock_nested(&stp->st_mutex, LOCK_STATEID_MUTEX);
4893         ret = nfsd4_verify_open_stid(&stp->st    3724         ret = nfsd4_verify_open_stid(&stp->st_stid);
4894         if (ret == nfserr_admin_revoked)      << 
4895                 nfsd40_drop_revoked_stid(stp- << 
4896                                         &stp- << 
4897                                               << 
4898         if (ret != nfs_ok)                       3725         if (ret != nfs_ok)
4899                 mutex_unlock(&stp->st_mutex);    3726                 mutex_unlock(&stp->st_mutex);
4900         return ret;                              3727         return ret;
4901 }                                                3728 }
4902                                                  3729 
4903 static struct nfs4_ol_stateid *                  3730 static struct nfs4_ol_stateid *
4904 nfsd4_find_and_lock_existing_open(struct nfs4    3731 nfsd4_find_and_lock_existing_open(struct nfs4_file *fp, struct nfsd4_open *open)
4905 {                                                3732 {
4906         struct nfs4_ol_stateid *stp;             3733         struct nfs4_ol_stateid *stp;
4907         for (;;) {                               3734         for (;;) {
4908                 spin_lock(&fp->fi_lock);         3735                 spin_lock(&fp->fi_lock);
4909                 stp = nfsd4_find_existing_ope    3736                 stp = nfsd4_find_existing_open(fp, open);
4910                 spin_unlock(&fp->fi_lock);       3737                 spin_unlock(&fp->fi_lock);
4911                 if (!stp || nfsd4_lock_ol_sta    3738                 if (!stp || nfsd4_lock_ol_stateid(stp) == nfs_ok)
4912                         break;                   3739                         break;
4913                 nfs4_put_stid(&stp->st_stid);    3740                 nfs4_put_stid(&stp->st_stid);
4914         }                                        3741         }
4915         return stp;                              3742         return stp;
4916 }                                                3743 }
4917                                                  3744 
4918 static struct nfs4_openowner *                   3745 static struct nfs4_openowner *
4919 find_or_alloc_open_stateowner(unsigned int st !! 3746 alloc_init_open_stateowner(unsigned int strhashval, struct nfsd4_open *open,
4920                               struct nfsd4_co !! 3747                            struct nfsd4_compound_state *cstate)
4921 {                                                3748 {
4922         struct nfs4_client *clp = cstate->clp    3749         struct nfs4_client *clp = cstate->clp;
4923         struct nfs4_openowner *oo, *new = NUL !! 3750         struct nfs4_openowner *oo, *ret;
4924                                               << 
4925 retry:                                        << 
4926         spin_lock(&clp->cl_lock);             << 
4927         oo = find_openstateowner_str(strhashv << 
4928         if (!oo && new) {                     << 
4929                 hash_openowner(new, clp, strh << 
4930                 spin_unlock(&clp->cl_lock);   << 
4931                 return new;                   << 
4932         }                                     << 
4933         spin_unlock(&clp->cl_lock);           << 
4934                                                  3751 
4935         if (oo && !(oo->oo_flags & NFS4_OO_CO !! 3752         oo = alloc_stateowner(openowner_slab, &open->op_owner, clp);
4936                 /* Replace unconfirmed owners !! 3753         if (!oo)
4937                 release_openowner(oo);        << 
4938                 oo = NULL;                    << 
4939         }                                     << 
4940         if (oo) {                             << 
4941                 if (new)                      << 
4942                         nfs4_free_stateowner( << 
4943                 return oo;                    << 
4944         }                                     << 
4945                                               << 
4946         new = alloc_stateowner(openowner_slab << 
4947         if (!new)                             << 
4948                 return NULL;                     3754                 return NULL;
4949         new->oo_owner.so_ops = &openowner_ops !! 3755         oo->oo_owner.so_ops = &openowner_ops;
4950         new->oo_owner.so_is_open_owner = 1;   !! 3756         oo->oo_owner.so_is_open_owner = 1;
4951         new->oo_owner.so_seqid = open->op_seq !! 3757         oo->oo_owner.so_seqid = open->op_seqid;
4952         new->oo_flags = 0;                    !! 3758         oo->oo_flags = 0;
4953         if (nfsd4_has_session(cstate))           3759         if (nfsd4_has_session(cstate))
4954                 new->oo_flags |= NFS4_OO_CONF !! 3760                 oo->oo_flags |= NFS4_OO_CONFIRMED;
4955         new->oo_time = 0;                     !! 3761         oo->oo_time = 0;
4956         new->oo_last_closed_stid = NULL;      !! 3762         oo->oo_last_closed_stid = NULL;
4957         INIT_LIST_HEAD(&new->oo_close_lru);   !! 3763         INIT_LIST_HEAD(&oo->oo_close_lru);
4958         goto retry;                           !! 3764         spin_lock(&clp->cl_lock);
                                                   >> 3765         ret = find_openstateowner_str_locked(strhashval, open, clp);
                                                   >> 3766         if (ret == NULL) {
                                                   >> 3767                 hash_openowner(oo, clp, strhashval);
                                                   >> 3768                 ret = oo;
                                                   >> 3769         } else
                                                   >> 3770                 nfs4_free_stateowner(&oo->oo_owner);
                                                   >> 3771 
                                                   >> 3772         spin_unlock(&clp->cl_lock);
                                                   >> 3773         return ret;
4959 }                                                3774 }
4960                                                  3775 
4961 static struct nfs4_ol_stateid *                  3776 static struct nfs4_ol_stateid *
4962 init_open_stateid(struct nfs4_file *fp, struc    3777 init_open_stateid(struct nfs4_file *fp, struct nfsd4_open *open)
4963 {                                                3778 {
4964                                                  3779 
4965         struct nfs4_openowner *oo = open->op_    3780         struct nfs4_openowner *oo = open->op_openowner;
4966         struct nfs4_ol_stateid *retstp = NULL    3781         struct nfs4_ol_stateid *retstp = NULL;
4967         struct nfs4_ol_stateid *stp;             3782         struct nfs4_ol_stateid *stp;
4968                                                  3783 
4969         stp = open->op_stp;                      3784         stp = open->op_stp;
4970         /* We are moving these outside of the    3785         /* We are moving these outside of the spinlocks to avoid the warnings */
4971         mutex_init(&stp->st_mutex);              3786         mutex_init(&stp->st_mutex);
4972         mutex_lock_nested(&stp->st_mutex, OPE    3787         mutex_lock_nested(&stp->st_mutex, OPEN_STATEID_MUTEX);
4973                                                  3788 
4974 retry:                                           3789 retry:
4975         spin_lock(&oo->oo_owner.so_client->cl    3790         spin_lock(&oo->oo_owner.so_client->cl_lock);
4976         spin_lock(&fp->fi_lock);                 3791         spin_lock(&fp->fi_lock);
4977                                                  3792 
4978         retstp = nfsd4_find_existing_open(fp,    3793         retstp = nfsd4_find_existing_open(fp, open);
4979         if (retstp)                              3794         if (retstp)
4980                 goto out_unlock;                 3795                 goto out_unlock;
4981                                                  3796 
4982         open->op_stp = NULL;                     3797         open->op_stp = NULL;
4983         refcount_inc(&stp->st_stid.sc_count);    3798         refcount_inc(&stp->st_stid.sc_count);
4984         stp->st_stid.sc_type = SC_TYPE_OPEN;  !! 3799         stp->st_stid.sc_type = NFS4_OPEN_STID;
4985         INIT_LIST_HEAD(&stp->st_locks);          3800         INIT_LIST_HEAD(&stp->st_locks);
4986         stp->st_stateowner = nfs4_get_stateow    3801         stp->st_stateowner = nfs4_get_stateowner(&oo->oo_owner);
4987         get_nfs4_file(fp);                       3802         get_nfs4_file(fp);
4988         stp->st_stid.sc_file = fp;               3803         stp->st_stid.sc_file = fp;
4989         stp->st_access_bmap = 0;                 3804         stp->st_access_bmap = 0;
4990         stp->st_deny_bmap = 0;                   3805         stp->st_deny_bmap = 0;
4991         stp->st_openstp = NULL;                  3806         stp->st_openstp = NULL;
4992         list_add(&stp->st_perstateowner, &oo-    3807         list_add(&stp->st_perstateowner, &oo->oo_owner.so_stateids);
4993         list_add(&stp->st_perfile, &fp->fi_st    3808         list_add(&stp->st_perfile, &fp->fi_stateids);
4994                                                  3809 
4995 out_unlock:                                      3810 out_unlock:
4996         spin_unlock(&fp->fi_lock);               3811         spin_unlock(&fp->fi_lock);
4997         spin_unlock(&oo->oo_owner.so_client->    3812         spin_unlock(&oo->oo_owner.so_client->cl_lock);
4998         if (retstp) {                            3813         if (retstp) {
4999                 /* Handle races with CLOSE */    3814                 /* Handle races with CLOSE */
5000                 if (nfsd4_lock_ol_stateid(ret    3815                 if (nfsd4_lock_ol_stateid(retstp) != nfs_ok) {
5001                         nfs4_put_stid(&retstp    3816                         nfs4_put_stid(&retstp->st_stid);
5002                         goto retry;              3817                         goto retry;
5003                 }                                3818                 }
5004                 /* To keep mutex tracking hap    3819                 /* To keep mutex tracking happy */
5005                 mutex_unlock(&stp->st_mutex);    3820                 mutex_unlock(&stp->st_mutex);
5006                 stp = retstp;                    3821                 stp = retstp;
5007         }                                        3822         }
5008         return stp;                              3823         return stp;
5009 }                                                3824 }
5010                                                  3825 
5011 /*                                               3826 /*
5012  * In the 4.0 case we need to keep the owners    3827  * In the 4.0 case we need to keep the owners around a little while to handle
5013  * CLOSE replay. We still do need to release     3828  * CLOSE replay. We still do need to release any file access that is held by
5014  * them before returning however.                3829  * them before returning however.
5015  */                                              3830  */
5016 static void                                      3831 static void
5017 move_to_close_lru(struct nfs4_ol_stateid *s,     3832 move_to_close_lru(struct nfs4_ol_stateid *s, struct net *net)
5018 {                                                3833 {
5019         struct nfs4_ol_stateid *last;            3834         struct nfs4_ol_stateid *last;
5020         struct nfs4_openowner *oo = openowner    3835         struct nfs4_openowner *oo = openowner(s->st_stateowner);
5021         struct nfsd_net *nn = net_generic(s->    3836         struct nfsd_net *nn = net_generic(s->st_stid.sc_client->net,
5022                                                  3837                                                 nfsd_net_id);
5023                                                  3838 
5024         dprintk("NFSD: move_to_close_lru nfs4    3839         dprintk("NFSD: move_to_close_lru nfs4_openowner %p\n", oo);
5025                                                  3840 
5026         /*                                       3841         /*
5027          * We know that we hold one reference    3842          * We know that we hold one reference via nfsd4_close, and another
5028          * "persistent" reference for the cli    3843          * "persistent" reference for the client. If the refcount is higher
5029          * than 2, then there are still calls    3844          * than 2, then there are still calls in progress that are using this
5030          * stateid. We can't put the sc_file     3845          * stateid. We can't put the sc_file reference until they are finished.
5031          * Wait for the refcount to drop to 2    3846          * Wait for the refcount to drop to 2. Since it has been unhashed,
5032          * there should be no danger of the r    3847          * there should be no danger of the refcount going back up again at
5033          * this point.                           3848          * this point.
5034          * Some threads with a reference migh << 
5035          * so tell them to stop waiting.      << 
5036          */                                      3849          */
5037         atomic_set(&oo->oo_owner.so_replay.rp << 
5038         smp_mb__after_atomic();               << 
5039         wake_up_var(&oo->oo_owner.so_replay.r << 
5040         wait_event(close_wq, refcount_read(&s    3850         wait_event(close_wq, refcount_read(&s->st_stid.sc_count) == 2);
5041                                                  3851 
5042         release_all_access(s);                   3852         release_all_access(s);
5043         if (s->st_stid.sc_file) {                3853         if (s->st_stid.sc_file) {
5044                 put_nfs4_file(s->st_stid.sc_f    3854                 put_nfs4_file(s->st_stid.sc_file);
5045                 s->st_stid.sc_file = NULL;       3855                 s->st_stid.sc_file = NULL;
5046         }                                        3856         }
5047                                                  3857 
5048         spin_lock(&nn->client_lock);             3858         spin_lock(&nn->client_lock);
5049         last = oo->oo_last_closed_stid;          3859         last = oo->oo_last_closed_stid;
5050         oo->oo_last_closed_stid = s;             3860         oo->oo_last_closed_stid = s;
5051         list_move_tail(&oo->oo_close_lru, &nn    3861         list_move_tail(&oo->oo_close_lru, &nn->close_lru);
5052         oo->oo_time = ktime_get_boottime_seco !! 3862         oo->oo_time = get_seconds();
5053         spin_unlock(&nn->client_lock);           3863         spin_unlock(&nn->client_lock);
5054         if (last)                                3864         if (last)
5055                 nfs4_put_stid(&last->st_stid)    3865                 nfs4_put_stid(&last->st_stid);
5056 }                                                3866 }
5057                                                  3867 
5058 static noinline_for_stack struct nfs4_file *  !! 3868 /* search file_hashtbl[] for file */
5059 nfsd4_file_hash_lookup(const struct svc_fh *f !! 3869 static struct nfs4_file *
                                                   >> 3870 find_file_locked(struct knfsd_fh *fh, unsigned int hashval)
5060 {                                                3871 {
5061         struct inode *inode = d_inode(fhp->fh !! 3872         struct nfs4_file *fp;
5062         struct rhlist_head *tmp, *list;       << 
5063         struct nfs4_file *fi;                 << 
5064                                                  3873 
5065         rcu_read_lock();                      !! 3874         hlist_for_each_entry_rcu(fp, &file_hashtbl[hashval], fi_hash) {
5066         list = rhltable_lookup(&nfs4_file_rhl !! 3875                 if (fh_match(&fp->fi_fhandle, fh)) {
5067                                nfs4_file_rhas !! 3876                         if (refcount_inc_not_zero(&fp->fi_ref))
5068         rhl_for_each_entry_rcu(fi, tmp, list, !! 3877                                 return fp;
5069                 if (fh_match(&fi->fi_fhandle, << 
5070                         if (refcount_inc_not_ << 
5071                                 rcu_read_unlo << 
5072                                 return fi;    << 
5073                         }                     << 
5074                 }                                3878                 }
5075         }                                        3879         }
5076         rcu_read_unlock();                    << 
5077         return NULL;                             3880         return NULL;
5078 }                                                3881 }
5079                                                  3882 
5080 /*                                            !! 3883 struct nfs4_file *
5081  * On hash insertion, identify entries with t !! 3884 find_file(struct knfsd_fh *fh)
5082  * distinct filehandles. They will all be on  << 
5083  * by rhltable_lookup().                      << 
5084  *                                            << 
5085  * inode->i_lock prevents racing insertions f << 
5086  * for the same inode/fhp pair twice.         << 
5087  */                                           << 
5088 static noinline_for_stack struct nfs4_file *  << 
5089 nfsd4_file_hash_insert(struct nfs4_file *new, << 
5090 {                                                3885 {
5091         struct inode *inode = d_inode(fhp->fh !! 3886         struct nfs4_file *fp;
5092         struct rhlist_head *tmp, *list;       !! 3887         unsigned int hashval = file_hashval(fh);
5093         struct nfs4_file *ret = NULL;         << 
5094         bool alias_found = false;             << 
5095         struct nfs4_file *fi;                 << 
5096         int err;                              << 
5097                                                  3888 
5098         rcu_read_lock();                         3889         rcu_read_lock();
5099         spin_lock(&inode->i_lock);            !! 3890         fp = find_file_locked(fh, hashval);
5100                                               << 
5101         list = rhltable_lookup(&nfs4_file_rhl << 
5102                                nfs4_file_rhas << 
5103         rhl_for_each_entry_rcu(fi, tmp, list, << 
5104                 if (fh_match(&fi->fi_fhandle, << 
5105                         if (refcount_inc_not_ << 
5106                                 ret = fi;     << 
5107                 } else                        << 
5108                         fi->fi_aliased = alia << 
5109         }                                     << 
5110         if (ret)                              << 
5111                 goto out_unlock;              << 
5112                                               << 
5113         nfsd4_file_init(fhp, new);            << 
5114         err = rhltable_insert(&nfs4_file_rhlt << 
5115                               nfs4_file_rhash << 
5116         if (err)                              << 
5117                 goto out_unlock;              << 
5118                                               << 
5119         new->fi_aliased = alias_found;        << 
5120         ret = new;                            << 
5121                                               << 
5122 out_unlock:                                   << 
5123         spin_unlock(&inode->i_lock);          << 
5124         rcu_read_unlock();                       3891         rcu_read_unlock();
5125         return ret;                           !! 3892         return fp;
5126 }                                                3893 }
5127                                                  3894 
5128 static noinline_for_stack void nfsd4_file_has !! 3895 static struct nfs4_file *
                                                   >> 3896 find_or_add_file(struct nfs4_file *new, struct knfsd_fh *fh)
5129 {                                                3897 {
5130         rhltable_remove(&nfs4_file_rhltable,  !! 3898         struct nfs4_file *fp;
5131                         nfs4_file_rhash_param !! 3899         unsigned int hashval = file_hashval(fh);
                                                   >> 3900 
                                                   >> 3901         rcu_read_lock();
                                                   >> 3902         fp = find_file_locked(fh, hashval);
                                                   >> 3903         rcu_read_unlock();
                                                   >> 3904         if (fp)
                                                   >> 3905                 return fp;
                                                   >> 3906 
                                                   >> 3907         spin_lock(&state_lock);
                                                   >> 3908         fp = find_file_locked(fh, hashval);
                                                   >> 3909         if (likely(fp == NULL)) {
                                                   >> 3910                 nfsd4_init_file(fh, hashval, new);
                                                   >> 3911                 fp = new;
                                                   >> 3912         }
                                                   >> 3913         spin_unlock(&state_lock);
                                                   >> 3914 
                                                   >> 3915         return fp;
5132 }                                                3916 }
5133                                                  3917 
5134 /*                                               3918 /*
5135  * Called to check deny when READ with all ze    3919  * Called to check deny when READ with all zero stateid or
5136  * WRITE with all zero or all one stateid        3920  * WRITE with all zero or all one stateid
5137  */                                              3921  */
5138 static __be32                                    3922 static __be32
5139 nfs4_share_conflict(struct svc_fh *current_fh    3923 nfs4_share_conflict(struct svc_fh *current_fh, unsigned int deny_type)
5140 {                                                3924 {
5141         struct nfs4_file *fp;                    3925         struct nfs4_file *fp;
5142         __be32 ret = nfs_ok;                     3926         __be32 ret = nfs_ok;
5143                                                  3927 
5144         fp = nfsd4_file_hash_lookup(current_f !! 3928         fp = find_file(&current_fh->fh_handle);
5145         if (!fp)                                 3929         if (!fp)
5146                 return ret;                      3930                 return ret;
5147                                               << 
5148         /* Check for conflicting share reserv    3931         /* Check for conflicting share reservations */
5149         spin_lock(&fp->fi_lock);                 3932         spin_lock(&fp->fi_lock);
5150         if (fp->fi_share_deny & deny_type)       3933         if (fp->fi_share_deny & deny_type)
5151                 ret = nfserr_locked;             3934                 ret = nfserr_locked;
5152         spin_unlock(&fp->fi_lock);               3935         spin_unlock(&fp->fi_lock);
5153         put_nfs4_file(fp);                       3936         put_nfs4_file(fp);
5154         return ret;                              3937         return ret;
5155 }                                                3938 }
5156                                                  3939 
5157 static bool nfsd4_deleg_present(const struct  << 
5158 {                                             << 
5159         struct file_lock_context *ctx = locks << 
5160                                               << 
5161         return ctx && !list_empty_careful(&ct << 
5162 }                                             << 
5163                                               << 
5164 /**                                           << 
5165  * nfsd_wait_for_delegreturn - wait for deleg << 
5166  * @rqstp: the RPC transaction being executed << 
5167  * @inode: in-core inode of the file being wa << 
5168  *                                            << 
5169  * The timeout prevents deadlock if all nfsd  << 
5170  * tied up waiting for returning delegations. << 
5171  *                                            << 
5172  * Return values:                             << 
5173  *   %true: delegation was returned           << 
5174  *   %false: timed out waiting for delegretur << 
5175  */                                           << 
5176 bool nfsd_wait_for_delegreturn(struct svc_rqs << 
5177 {                                             << 
5178         long __maybe_unused timeo;            << 
5179                                               << 
5180         timeo = wait_var_event_timeout(inode, << 
5181                                        NFSD_D << 
5182         trace_nfsd_delegret_wakeup(rqstp, ino << 
5183         return timeo > 0;                     << 
5184 }                                             << 
5185                                               << 
5186 static void nfsd4_cb_recall_prepare(struct nf    3940 static void nfsd4_cb_recall_prepare(struct nfsd4_callback *cb)
5187 {                                                3941 {
5188         struct nfs4_delegation *dp = cb_to_de    3942         struct nfs4_delegation *dp = cb_to_delegation(cb);
5189         struct nfsd_net *nn = net_generic(dp-    3943         struct nfsd_net *nn = net_generic(dp->dl_stid.sc_client->net,
5190                                           nfs    3944                                           nfsd_net_id);
5191                                                  3945 
5192         block_delegations(&dp->dl_stid.sc_fil    3946         block_delegations(&dp->dl_stid.sc_file->fi_fhandle);
5193                                                  3947 
5194         /*                                       3948         /*
5195          * We can't do this in nfsd_break_del    3949          * We can't do this in nfsd_break_deleg_cb because it is
5196          * already holding inode->i_lock.        3950          * already holding inode->i_lock.
5197          *                                       3951          *
5198          * If the dl_time != 0, then we know     3952          * If the dl_time != 0, then we know that it has already been
5199          * queued for a lease break. Don't qu    3953          * queued for a lease break. Don't queue it again.
5200          */                                      3954          */
5201         spin_lock(&state_lock);                  3955         spin_lock(&state_lock);
5202         if (delegation_hashed(dp) && dp->dl_t !! 3956         if (dp->dl_time == 0) {
5203                 dp->dl_time = ktime_get_boott !! 3957                 dp->dl_time = get_seconds();
5204                 list_add_tail(&dp->dl_recall_    3958                 list_add_tail(&dp->dl_recall_lru, &nn->del_recall_lru);
5205         }                                        3959         }
5206         spin_unlock(&state_lock);                3960         spin_unlock(&state_lock);
5207 }                                                3961 }
5208                                                  3962 
5209 static int nfsd4_cb_recall_done(struct nfsd4_    3963 static int nfsd4_cb_recall_done(struct nfsd4_callback *cb,
5210                 struct rpc_task *task)           3964                 struct rpc_task *task)
5211 {                                                3965 {
5212         struct nfs4_delegation *dp = cb_to_de    3966         struct nfs4_delegation *dp = cb_to_delegation(cb);
5213                                                  3967 
5214         trace_nfsd_cb_recall_done(&dp->dl_sti !! 3968         if (dp->dl_stid.sc_type == NFS4_CLOSED_DELEG_STID)
5215                                               !! 3969                 return 1;
5216         if (dp->dl_stid.sc_status)            << 
5217                 /* CLOSED or REVOKED */       << 
5218                 return 1;                     << 
5219                                                  3970 
5220         switch (task->tk_status) {               3971         switch (task->tk_status) {
5221         case 0:                                  3972         case 0:
5222                 return 1;                        3973                 return 1;
5223         case -NFS4ERR_DELAY:                     3974         case -NFS4ERR_DELAY:
5224                 rpc_delay(task, 2 * HZ);         3975                 rpc_delay(task, 2 * HZ);
5225                 return 0;                        3976                 return 0;
5226         case -EBADHANDLE:                        3977         case -EBADHANDLE:
5227         case -NFS4ERR_BAD_STATEID:               3978         case -NFS4ERR_BAD_STATEID:
5228                 /*                               3979                 /*
5229                  * Race: client probably got     3980                  * Race: client probably got cb_recall before open reply
5230                  * granting delegation.          3981                  * granting delegation.
5231                  */                              3982                  */
5232                 if (dp->dl_retries--) {          3983                 if (dp->dl_retries--) {
5233                         rpc_delay(task, 2 * H    3984                         rpc_delay(task, 2 * HZ);
5234                         return 0;                3985                         return 0;
5235                 }                                3986                 }
5236                 fallthrough;                  !! 3987                 /*FALLTHRU*/
5237         default:                                 3988         default:
5238                 return 1;                        3989                 return 1;
5239         }                                        3990         }
5240 }                                                3991 }
5241                                                  3992 
5242 static void nfsd4_cb_recall_release(struct nf    3993 static void nfsd4_cb_recall_release(struct nfsd4_callback *cb)
5243 {                                                3994 {
5244         struct nfs4_delegation *dp = cb_to_de    3995         struct nfs4_delegation *dp = cb_to_delegation(cb);
5245                                                  3996 
5246         nfs4_put_stid(&dp->dl_stid);             3997         nfs4_put_stid(&dp->dl_stid);
5247 }                                                3998 }
5248                                                  3999 
5249 static const struct nfsd4_callback_ops nfsd4_    4000 static const struct nfsd4_callback_ops nfsd4_cb_recall_ops = {
5250         .prepare        = nfsd4_cb_recall_pre    4001         .prepare        = nfsd4_cb_recall_prepare,
5251         .done           = nfsd4_cb_recall_don    4002         .done           = nfsd4_cb_recall_done,
5252         .release        = nfsd4_cb_recall_rel    4003         .release        = nfsd4_cb_recall_release,
5253         .opcode         = OP_CB_RECALL,       << 
5254 };                                               4004 };
5255                                                  4005 
5256 static void nfsd_break_one_deleg(struct nfs4_    4006 static void nfsd_break_one_deleg(struct nfs4_delegation *dp)
5257 {                                                4007 {
5258         /*                                       4008         /*
5259          * We're assuming the state code neve    4009          * We're assuming the state code never drops its reference
5260          * without first removing the lease.     4010          * without first removing the lease.  Since we're in this lease
5261          * callback (and since the lease code    4011          * callback (and since the lease code is serialized by the
5262          * flc_lock) we know the server hasn' !! 4012          * i_lock) we know the server hasn't removed the lease yet, and
5263          * we know it's safe to take a refere    4013          * we know it's safe to take a reference.
5264          */                                      4014          */
5265         refcount_inc(&dp->dl_stid.sc_count);     4015         refcount_inc(&dp->dl_stid.sc_count);
5266         WARN_ON_ONCE(!nfsd4_run_cb(&dp->dl_re !! 4016         nfsd4_run_cb(&dp->dl_recall);
5267 }                                                4017 }
5268                                                  4018 
5269 /* Called from break_lease() with flc_lock he !! 4019 /* Called from break_lease() with i_lock held. */
5270 static bool                                      4020 static bool
5271 nfsd_break_deleg_cb(struct file_lease *fl)    !! 4021 nfsd_break_deleg_cb(struct file_lock *fl)
5272 {                                                4022 {
5273         struct nfs4_delegation *dp = (struct  !! 4023         bool ret = false;
                                                   >> 4024         struct nfs4_delegation *dp = (struct nfs4_delegation *)fl->fl_owner;
5274         struct nfs4_file *fp = dp->dl_stid.sc    4025         struct nfs4_file *fp = dp->dl_stid.sc_file;
5275         struct nfs4_client *clp = dp->dl_stid << 
5276         struct nfsd_net *nn;                  << 
5277                                               << 
5278         trace_nfsd_cb_recall(&dp->dl_stid);   << 
5279                                               << 
5280         dp->dl_recalled = true;               << 
5281         atomic_inc(&clp->cl_delegs_in_recall) << 
5282         if (try_to_expire_client(clp)) {      << 
5283                 nn = net_generic(clp->net, nf << 
5284                 mod_delayed_work(laundry_wq,  << 
5285         }                                     << 
5286                                                  4026 
5287         /*                                       4027         /*
5288          * We don't want the locks code to ti    4028          * We don't want the locks code to timeout the lease for us;
5289          * we'll remove it ourself if a deleg    4029          * we'll remove it ourself if a delegation isn't returned
5290          * in time:                              4030          * in time:
5291          */                                      4031          */
5292         fl->fl_break_time = 0;                   4032         fl->fl_break_time = 0;
5293                                                  4033 
                                                   >> 4034         spin_lock(&fp->fi_lock);
5294         fp->fi_had_conflict = true;              4035         fp->fi_had_conflict = true;
5295         nfsd_break_one_deleg(dp);                4036         nfsd_break_one_deleg(dp);
5296         return false;                         !! 4037         spin_unlock(&fp->fi_lock);
5297 }                                             !! 4038         return ret;
5298                                               << 
5299 /**                                           << 
5300  * nfsd_breaker_owns_lease - Check if lease c << 
5301  * @fl: Lock state to check                   << 
5302  *                                            << 
5303  * Return values:                             << 
5304  *   %true: Lease conflict was resolved       << 
5305  *   %false: Lease conflict was not resolved. << 
5306  */                                           << 
5307 static bool nfsd_breaker_owns_lease(struct fi << 
5308 {                                             << 
5309         struct nfs4_delegation *dl = fl->c.fl << 
5310         struct svc_rqst *rqst;                << 
5311         struct nfs4_client *clp;              << 
5312                                               << 
5313         rqst = nfsd_current_rqst();           << 
5314         if (!nfsd_v4client(rqst))             << 
5315                 return false;                 << 
5316         clp = *(rqst->rq_lease_breaker);      << 
5317         return dl->dl_stid.sc_client == clp;  << 
5318 }                                                4039 }
5319                                                  4040 
5320 static int                                       4041 static int
5321 nfsd_change_deleg_cb(struct file_lease *onlis !! 4042 nfsd_change_deleg_cb(struct file_lock *onlist, int arg,
5322                      struct list_head *dispos    4043                      struct list_head *dispose)
5323 {                                                4044 {
5324         struct nfs4_delegation *dp = (struct  !! 4045         if (arg & F_UNLCK)
5325         struct nfs4_client *clp = dp->dl_stid << 
5326                                               << 
5327         if (arg & F_UNLCK) {                  << 
5328                 if (dp->dl_recalled)          << 
5329                         atomic_dec(&clp->cl_d << 
5330                 return lease_modify(onlist, a    4046                 return lease_modify(onlist, arg, dispose);
5331         } else                                !! 4047         else
5332                 return -EAGAIN;                  4048                 return -EAGAIN;
5333 }                                                4049 }
5334                                                  4050 
5335 static const struct lease_manager_operations  !! 4051 static const struct lock_manager_operations nfsd_lease_mng_ops = {
5336         .lm_breaker_owns_lease = nfsd_breaker << 
5337         .lm_break = nfsd_break_deleg_cb,         4052         .lm_break = nfsd_break_deleg_cb,
5338         .lm_change = nfsd_change_deleg_cb,       4053         .lm_change = nfsd_change_deleg_cb,
5339 };                                               4054 };
5340                                                  4055 
5341 static __be32 nfsd4_check_seqid(struct nfsd4_    4056 static __be32 nfsd4_check_seqid(struct nfsd4_compound_state *cstate, struct nfs4_stateowner *so, u32 seqid)
5342 {                                                4057 {
5343         if (nfsd4_has_session(cstate))           4058         if (nfsd4_has_session(cstate))
5344                 return nfs_ok;                   4059                 return nfs_ok;
5345         if (seqid == so->so_seqid - 1)           4060         if (seqid == so->so_seqid - 1)
5346                 return nfserr_replay_me;         4061                 return nfserr_replay_me;
5347         if (seqid == so->so_seqid)               4062         if (seqid == so->so_seqid)
5348                 return nfs_ok;                   4063                 return nfs_ok;
5349         return nfserr_bad_seqid;                 4064         return nfserr_bad_seqid;
5350 }                                                4065 }
5351                                                  4066 
5352 static struct nfs4_client *lookup_clientid(cl !! 4067 static __be32 lookup_clientid(clientid_t *clid,
5353                                               << 
5354 {                                             << 
5355         struct nfs4_client *found;            << 
5356                                               << 
5357         spin_lock(&nn->client_lock);          << 
5358         found = find_confirmed_client(clid, s << 
5359         if (found)                            << 
5360                 atomic_inc(&found->cl_rpc_use << 
5361         spin_unlock(&nn->client_lock);        << 
5362         return found;                         << 
5363 }                                             << 
5364                                               << 
5365 static __be32 set_client(clientid_t *clid,    << 
5366                 struct nfsd4_compound_state *    4068                 struct nfsd4_compound_state *cstate,
5367                 struct nfsd_net *nn)             4069                 struct nfsd_net *nn)
5368 {                                                4070 {
                                                   >> 4071         struct nfs4_client *found;
                                                   >> 4072 
5369         if (cstate->clp) {                       4073         if (cstate->clp) {
5370                 if (!same_clid(&cstate->clp-> !! 4074                 found = cstate->clp;
                                                   >> 4075                 if (!same_clid(&found->cl_clientid, clid))
5371                         return nfserr_stale_c    4076                         return nfserr_stale_clientid;
5372                 return nfs_ok;                   4077                 return nfs_ok;
5373         }                                        4078         }
                                                   >> 4079 
5374         if (STALE_CLIENTID(clid, nn))            4080         if (STALE_CLIENTID(clid, nn))
5375                 return nfserr_stale_clientid;    4081                 return nfserr_stale_clientid;
                                                   >> 4082 
5376         /*                                       4083         /*
5377          * We're in the 4.0 case (otherwise t !! 4084          * For v4.1+ we get the client in the SEQUENCE op. If we don't have one
5378          * set cstate->clp), so session = fal !! 4085          * cached already then we know this is for is for v4.0 and "sessions"
                                                   >> 4086          * will be false.
5379          */                                      4087          */
5380         cstate->clp = lookup_clientid(clid, f !! 4088         WARN_ON_ONCE(cstate->session);
5381         if (!cstate->clp)                     !! 4089         spin_lock(&nn->client_lock);
                                                   >> 4090         found = find_confirmed_client(clid, false, nn);
                                                   >> 4091         if (!found) {
                                                   >> 4092                 spin_unlock(&nn->client_lock);
5382                 return nfserr_expired;           4093                 return nfserr_expired;
                                                   >> 4094         }
                                                   >> 4095         atomic_inc(&found->cl_refcount);
                                                   >> 4096         spin_unlock(&nn->client_lock);
                                                   >> 4097 
                                                   >> 4098         /* Cache the nfs4_client in cstate! */
                                                   >> 4099         cstate->clp = found;
5383         return nfs_ok;                           4100         return nfs_ok;
5384 }                                                4101 }
5385                                                  4102 
5386 __be32                                           4103 __be32
5387 nfsd4_process_open1(struct nfsd4_compound_sta    4104 nfsd4_process_open1(struct nfsd4_compound_state *cstate,
5388                     struct nfsd4_open *open,     4105                     struct nfsd4_open *open, struct nfsd_net *nn)
5389 {                                                4106 {
5390         clientid_t *clientid = &open->op_clie    4107         clientid_t *clientid = &open->op_clientid;
5391         struct nfs4_client *clp = NULL;          4108         struct nfs4_client *clp = NULL;
5392         unsigned int strhashval;                 4109         unsigned int strhashval;
5393         struct nfs4_openowner *oo = NULL;        4110         struct nfs4_openowner *oo = NULL;
5394         __be32 status;                           4111         __be32 status;
5395                                                  4112 
                                                   >> 4113         if (STALE_CLIENTID(&open->op_clientid, nn))
                                                   >> 4114                 return nfserr_stale_clientid;
5396         /*                                       4115         /*
5397          * In case we need it later, after we    4116          * In case we need it later, after we've already created the
5398          * file and don't want to risk a furt    4117          * file and don't want to risk a further failure:
5399          */                                      4118          */
5400         open->op_file = nfsd4_alloc_file();      4119         open->op_file = nfsd4_alloc_file();
5401         if (open->op_file == NULL)               4120         if (open->op_file == NULL)
5402                 return nfserr_jukebox;           4121                 return nfserr_jukebox;
5403                                                  4122 
5404         status = set_client(clientid, cstate, !! 4123         status = lookup_clientid(clientid, cstate, nn);
5405         if (status)                              4124         if (status)
5406                 return status;                   4125                 return status;
5407         clp = cstate->clp;                       4126         clp = cstate->clp;
5408                                                  4127 
5409         strhashval = ownerstr_hashval(&open->    4128         strhashval = ownerstr_hashval(&open->op_owner);
5410 retry:                                        !! 4129         oo = find_openstateowner_str(strhashval, open, clp);
5411         oo = find_or_alloc_open_stateowner(st << 
5412         open->op_openowner = oo;                 4130         open->op_openowner = oo;
5413         if (!oo)                              !! 4131         if (!oo) {
5414                 return nfserr_jukebox;        !! 4132                 goto new_owner;
5415         if (nfsd4_cstate_assign_replay(cstate !! 4133         }
5416                 nfs4_put_stateowner(&oo->oo_o !! 4134         if (!(oo->oo_flags & NFS4_OO_CONFIRMED)) {
5417                 goto retry;                   !! 4135                 /* Replace unconfirmed owners without checking for replay. */
                                                   >> 4136                 release_openowner(oo);
                                                   >> 4137                 open->op_openowner = NULL;
                                                   >> 4138                 goto new_owner;
5418         }                                        4139         }
5419         status = nfsd4_check_seqid(cstate, &o    4140         status = nfsd4_check_seqid(cstate, &oo->oo_owner, open->op_seqid);
5420         if (status)                              4141         if (status)
5421                 return status;                   4142                 return status;
5422                                               !! 4143         goto alloc_stateid;
                                                   >> 4144 new_owner:
                                                   >> 4145         oo = alloc_init_open_stateowner(strhashval, open, cstate);
                                                   >> 4146         if (oo == NULL)
                                                   >> 4147                 return nfserr_jukebox;
                                                   >> 4148         open->op_openowner = oo;
                                                   >> 4149 alloc_stateid:
5423         open->op_stp = nfs4_alloc_open_statei    4150         open->op_stp = nfs4_alloc_open_stateid(clp);
5424         if (!open->op_stp)                       4151         if (!open->op_stp)
5425                 return nfserr_jukebox;           4152                 return nfserr_jukebox;
5426                                                  4153 
5427         if (nfsd4_has_session(cstate) &&         4154         if (nfsd4_has_session(cstate) &&
5428             (cstate->current_fh.fh_export->ex    4155             (cstate->current_fh.fh_export->ex_flags & NFSEXP_PNFS)) {
5429                 open->op_odstate = alloc_clnt    4156                 open->op_odstate = alloc_clnt_odstate(clp);
5430                 if (!open->op_odstate)           4157                 if (!open->op_odstate)
5431                         return nfserr_jukebox    4158                         return nfserr_jukebox;
5432         }                                        4159         }
5433                                                  4160 
5434         return nfs_ok;                           4161         return nfs_ok;
5435 }                                                4162 }
5436                                                  4163 
5437 static inline __be32                             4164 static inline __be32
5438 nfs4_check_delegmode(struct nfs4_delegation *    4165 nfs4_check_delegmode(struct nfs4_delegation *dp, int flags)
5439 {                                                4166 {
5440         if ((flags & WR_STATE) && (dp->dl_typ    4167         if ((flags & WR_STATE) && (dp->dl_type == NFS4_OPEN_DELEGATE_READ))
5441                 return nfserr_openmode;          4168                 return nfserr_openmode;
5442         else                                     4169         else
5443                 return nfs_ok;                   4170                 return nfs_ok;
5444 }                                                4171 }
5445                                                  4172 
5446 static int share_access_to_flags(u32 share_ac    4173 static int share_access_to_flags(u32 share_access)
5447 {                                                4174 {
5448         return share_access == NFS4_SHARE_ACC    4175         return share_access == NFS4_SHARE_ACCESS_READ ? RD_STATE : WR_STATE;
5449 }                                                4176 }
5450                                                  4177 
5451 static struct nfs4_delegation *find_deleg_sta !! 4178 static struct nfs4_delegation *find_deleg_stateid(struct nfs4_client *cl, stateid_t *s)
5452                                               << 
5453 {                                                4179 {
5454         struct nfs4_stid *ret;                   4180         struct nfs4_stid *ret;
5455                                                  4181 
5456         ret = find_stateid_by_type(cl, s, SC_ !! 4182         ret = find_stateid_by_type(cl, s,
                                                   >> 4183                                 NFS4_DELEG_STID|NFS4_REVOKED_DELEG_STID);
5457         if (!ret)                                4184         if (!ret)
5458                 return NULL;                     4185                 return NULL;
5459         return delegstateid(ret);                4186         return delegstateid(ret);
5460 }                                                4187 }
5461                                                  4188 
5462 static bool nfsd4_is_deleg_cur(struct nfsd4_o    4189 static bool nfsd4_is_deleg_cur(struct nfsd4_open *open)
5463 {                                                4190 {
5464         return open->op_claim_type == NFS4_OP    4191         return open->op_claim_type == NFS4_OPEN_CLAIM_DELEGATE_CUR ||
5465                open->op_claim_type == NFS4_OP    4192                open->op_claim_type == NFS4_OPEN_CLAIM_DELEG_CUR_FH;
5466 }                                                4193 }
5467                                                  4194 
5468 static __be32                                    4195 static __be32
5469 nfs4_check_deleg(struct nfs4_client *cl, stru    4196 nfs4_check_deleg(struct nfs4_client *cl, struct nfsd4_open *open,
5470                 struct nfs4_delegation **dp)     4197                 struct nfs4_delegation **dp)
5471 {                                                4198 {
5472         int flags;                               4199         int flags;
5473         __be32 status = nfserr_bad_stateid;      4200         __be32 status = nfserr_bad_stateid;
5474         struct nfs4_delegation *deleg;           4201         struct nfs4_delegation *deleg;
5475                                                  4202 
5476         deleg = find_deleg_stateid(cl, &open-    4203         deleg = find_deleg_stateid(cl, &open->op_delegate_stateid);
5477         if (deleg == NULL)                       4204         if (deleg == NULL)
5478                 goto out;                        4205                 goto out;
5479         if (deleg->dl_stid.sc_status & SC_STA !! 4206         if (deleg->dl_stid.sc_type == NFS4_REVOKED_DELEG_STID) {
5480                 nfs4_put_stid(&deleg->dl_stid    4207                 nfs4_put_stid(&deleg->dl_stid);
5481                 status = nfserr_admin_revoked !! 4208                 if (cl->cl_minorversion)
5482                 goto out;                     !! 4209                         status = nfserr_deleg_revoked;
5483         }                                     << 
5484         if (deleg->dl_stid.sc_status & SC_STA << 
5485                 nfs4_put_stid(&deleg->dl_stid << 
5486                 nfsd40_drop_revoked_stid(cl,  << 
5487                 status = nfserr_deleg_revoked << 
5488                 goto out;                        4210                 goto out;
5489         }                                        4211         }
5490         flags = share_access_to_flags(open->o    4212         flags = share_access_to_flags(open->op_share_access);
5491         status = nfs4_check_delegmode(deleg,     4213         status = nfs4_check_delegmode(deleg, flags);
5492         if (status) {                            4214         if (status) {
5493                 nfs4_put_stid(&deleg->dl_stid    4215                 nfs4_put_stid(&deleg->dl_stid);
5494                 goto out;                        4216                 goto out;
5495         }                                        4217         }
5496         *dp = deleg;                             4218         *dp = deleg;
5497 out:                                             4219 out:
5498         if (!nfsd4_is_deleg_cur(open))           4220         if (!nfsd4_is_deleg_cur(open))
5499                 return nfs_ok;                   4221                 return nfs_ok;
5500         if (status)                              4222         if (status)
5501                 return status;                   4223                 return status;
5502         open->op_openowner->oo_flags |= NFS4_    4224         open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED;
5503         return nfs_ok;                           4225         return nfs_ok;
5504 }                                                4226 }
5505                                                  4227 
5506 static inline int nfs4_access_to_access(u32 n    4228 static inline int nfs4_access_to_access(u32 nfs4_access)
5507 {                                                4229 {
5508         int flags = 0;                           4230         int flags = 0;
5509                                                  4231 
5510         if (nfs4_access & NFS4_SHARE_ACCESS_R    4232         if (nfs4_access & NFS4_SHARE_ACCESS_READ)
5511                 flags |= NFSD_MAY_READ;          4233                 flags |= NFSD_MAY_READ;
5512         if (nfs4_access & NFS4_SHARE_ACCESS_W    4234         if (nfs4_access & NFS4_SHARE_ACCESS_WRITE)
5513                 flags |= NFSD_MAY_WRITE;         4235                 flags |= NFSD_MAY_WRITE;
5514         return flags;                            4236         return flags;
5515 }                                                4237 }
5516                                                  4238 
5517 static inline __be32                             4239 static inline __be32
5518 nfsd4_truncate(struct svc_rqst *rqstp, struct    4240 nfsd4_truncate(struct svc_rqst *rqstp, struct svc_fh *fh,
5519                 struct nfsd4_open *open)         4241                 struct nfsd4_open *open)
5520 {                                                4242 {
5521         struct iattr iattr = {                   4243         struct iattr iattr = {
5522                 .ia_valid = ATTR_SIZE,           4244                 .ia_valid = ATTR_SIZE,
5523                 .ia_size = 0,                    4245                 .ia_size = 0,
5524         };                                       4246         };
5525         struct nfsd_attrs attrs = {           << 
5526                 .na_iattr       = &iattr,     << 
5527         };                                    << 
5528         if (!open->op_truncate)                  4247         if (!open->op_truncate)
5529                 return 0;                        4248                 return 0;
5530         if (!(open->op_share_access & NFS4_SH    4249         if (!(open->op_share_access & NFS4_SHARE_ACCESS_WRITE))
5531                 return nfserr_inval;             4250                 return nfserr_inval;
5532         return nfsd_setattr(rqstp, fh, &attrs !! 4251         return nfsd_setattr(rqstp, fh, &iattr, 0, (time_t)0);
5533 }                                                4252 }
5534                                                  4253 
5535 static __be32 nfs4_get_vfs_file(struct svc_rq    4254 static __be32 nfs4_get_vfs_file(struct svc_rqst *rqstp, struct nfs4_file *fp,
5536                 struct svc_fh *cur_fh, struct    4255                 struct svc_fh *cur_fh, struct nfs4_ol_stateid *stp,
5537                 struct nfsd4_open *open, bool !! 4256                 struct nfsd4_open *open)
5538 {                                                4257 {
5539         struct nfsd_file *nf = NULL;          !! 4258         struct file *filp = NULL;
5540         __be32 status;                           4259         __be32 status;
5541         int oflag = nfs4_access_to_omode(open    4260         int oflag = nfs4_access_to_omode(open->op_share_access);
5542         int access = nfs4_access_to_access(op    4261         int access = nfs4_access_to_access(open->op_share_access);
5543         unsigned char old_access_bmap, old_de    4262         unsigned char old_access_bmap, old_deny_bmap;
5544                                                  4263 
5545         spin_lock(&fp->fi_lock);                 4264         spin_lock(&fp->fi_lock);
5546                                                  4265 
5547         /*                                       4266         /*
5548          * Are we trying to set a deny mode t    4267          * Are we trying to set a deny mode that would conflict with
5549          * current access?                       4268          * current access?
5550          */                                      4269          */
5551         status = nfs4_file_check_deny(fp, ope    4270         status = nfs4_file_check_deny(fp, open->op_share_deny);
5552         if (status != nfs_ok) {                  4271         if (status != nfs_ok) {
5553                 if (status != nfserr_share_de << 
5554                         spin_unlock(&fp->fi_l << 
5555                         goto out;             << 
5556                 }                             << 
5557                 if (nfs4_resolve_deny_conflic << 
5558                                 stp, open->op << 
5559                         status = nfserr_jukeb << 
5560                 spin_unlock(&fp->fi_lock);       4272                 spin_unlock(&fp->fi_lock);
5561                 goto out;                        4273                 goto out;
5562         }                                        4274         }
5563                                                  4275 
5564         /* set access to the file */             4276         /* set access to the file */
5565         status = nfs4_file_get_access(fp, ope    4277         status = nfs4_file_get_access(fp, open->op_share_access);
5566         if (status != nfs_ok) {                  4278         if (status != nfs_ok) {
5567                 if (status != nfserr_share_de << 
5568                         spin_unlock(&fp->fi_l << 
5569                         goto out;             << 
5570                 }                             << 
5571                 if (nfs4_resolve_deny_conflic << 
5572                                 stp, open->op << 
5573                         status = nfserr_jukeb << 
5574                 spin_unlock(&fp->fi_lock);       4279                 spin_unlock(&fp->fi_lock);
5575                 goto out;                        4280                 goto out;
5576         }                                        4281         }
5577                                                  4282 
5578         /* Set access bits in stateid */         4283         /* Set access bits in stateid */
5579         old_access_bmap = stp->st_access_bmap    4284         old_access_bmap = stp->st_access_bmap;
5580         set_access(open->op_share_access, stp    4285         set_access(open->op_share_access, stp);
5581                                                  4286 
5582         /* Set new deny mask */                  4287         /* Set new deny mask */
5583         old_deny_bmap = stp->st_deny_bmap;       4288         old_deny_bmap = stp->st_deny_bmap;
5584         set_deny(open->op_share_deny, stp);      4289         set_deny(open->op_share_deny, stp);
5585         fp->fi_share_deny |= (open->op_share_    4290         fp->fi_share_deny |= (open->op_share_deny & NFS4_SHARE_DENY_BOTH);
5586                                                  4291 
5587         if (!fp->fi_fds[oflag]) {                4292         if (!fp->fi_fds[oflag]) {
5588                 spin_unlock(&fp->fi_lock);       4293                 spin_unlock(&fp->fi_lock);
5589                                               !! 4294                 status = nfsd_open(rqstp, cur_fh, S_IFREG, access, &filp);
5590                 status = nfsd_file_acquire_op !! 4295                 if (status)
5591                                               << 
5592                 if (status != nfs_ok)         << 
5593                         goto out_put_access;     4296                         goto out_put_access;
5594                                               << 
5595                 spin_lock(&fp->fi_lock);         4297                 spin_lock(&fp->fi_lock);
5596                 if (!fp->fi_fds[oflag]) {        4298                 if (!fp->fi_fds[oflag]) {
5597                         fp->fi_fds[oflag] = n !! 4299                         fp->fi_fds[oflag] = filp;
5598                         nf = NULL;            !! 4300                         filp = NULL;
5599                 }                                4301                 }
5600         }                                        4302         }
5601         spin_unlock(&fp->fi_lock);               4303         spin_unlock(&fp->fi_lock);
5602         if (nf)                               !! 4304         if (filp)
5603                 nfsd_file_put(nf);            !! 4305                 fput(filp);
5604                                               << 
5605         status = nfserrno(nfsd_open_break_lea << 
5606                                               << 
5607         if (status)                           << 
5608                 goto out_put_access;          << 
5609                                                  4306 
5610         status = nfsd4_truncate(rqstp, cur_fh    4307         status = nfsd4_truncate(rqstp, cur_fh, open);
5611         if (status)                              4308         if (status)
5612                 goto out_put_access;             4309                 goto out_put_access;
5613 out:                                             4310 out:
5614         return status;                           4311         return status;
5615 out_put_access:                                  4312 out_put_access:
5616         stp->st_access_bmap = old_access_bmap    4313         stp->st_access_bmap = old_access_bmap;
5617         nfs4_file_put_access(fp, open->op_sha    4314         nfs4_file_put_access(fp, open->op_share_access);
5618         reset_union_bmap_deny(bmap_to_share_m    4315         reset_union_bmap_deny(bmap_to_share_mode(old_deny_bmap), stp);
5619         goto out;                                4316         goto out;
5620 }                                                4317 }
5621                                                  4318 
5622 static __be32                                    4319 static __be32
5623 nfs4_upgrade_open(struct svc_rqst *rqstp, str !! 4320 nfs4_upgrade_open(struct svc_rqst *rqstp, struct nfs4_file *fp, struct svc_fh *cur_fh, struct nfs4_ol_stateid *stp, struct nfsd4_open *open)
5624                 struct svc_fh *cur_fh, struct << 
5625                 struct nfsd4_open *open)      << 
5626 {                                                4321 {
5627         __be32 status;                           4322         __be32 status;
5628         unsigned char old_deny_bmap = stp->st    4323         unsigned char old_deny_bmap = stp->st_deny_bmap;
5629                                                  4324 
5630         if (!test_access(open->op_share_acces    4325         if (!test_access(open->op_share_access, stp))
5631                 return nfs4_get_vfs_file(rqst !! 4326                 return nfs4_get_vfs_file(rqstp, fp, cur_fh, stp, open);
5632                                                  4327 
5633         /* test and set deny mode */             4328         /* test and set deny mode */
5634         spin_lock(&fp->fi_lock);                 4329         spin_lock(&fp->fi_lock);
5635         status = nfs4_file_check_deny(fp, ope    4330         status = nfs4_file_check_deny(fp, open->op_share_deny);
5636         switch (status) {                     !! 4331         if (status == nfs_ok) {
5637         case nfs_ok:                          << 
5638                 set_deny(open->op_share_deny,    4332                 set_deny(open->op_share_deny, stp);
5639                 fp->fi_share_deny |=             4333                 fp->fi_share_deny |=
5640                         (open->op_share_deny  !! 4334                                 (open->op_share_deny & NFS4_SHARE_DENY_BOTH);
5641                 break;                        << 
5642         case nfserr_share_denied:             << 
5643                 if (nfs4_resolve_deny_conflic << 
5644                                 stp, open->op << 
5645                         status = nfserr_jukeb << 
5646                 break;                        << 
5647         }                                        4335         }
5648         spin_unlock(&fp->fi_lock);               4336         spin_unlock(&fp->fi_lock);
5649                                                  4337 
5650         if (status != nfs_ok)                    4338         if (status != nfs_ok)
5651                 return status;                   4339                 return status;
5652                                                  4340 
5653         status = nfsd4_truncate(rqstp, cur_fh    4341         status = nfsd4_truncate(rqstp, cur_fh, open);
5654         if (status != nfs_ok)                    4342         if (status != nfs_ok)
5655                 reset_union_bmap_deny(old_den    4343                 reset_union_bmap_deny(old_deny_bmap, stp);
5656         return status;                           4344         return status;
5657 }                                                4345 }
5658                                                  4346 
5659 /* Should we give out recallable state?: */      4347 /* Should we give out recallable state?: */
5660 static bool nfsd4_cb_channel_good(struct nfs4    4348 static bool nfsd4_cb_channel_good(struct nfs4_client *clp)
5661 {                                                4349 {
5662         if (clp->cl_cb_state == NFSD4_CB_UP)     4350         if (clp->cl_cb_state == NFSD4_CB_UP)
5663                 return true;                     4351                 return true;
5664         /*                                       4352         /*
5665          * In the sessions case, since we don    4353          * In the sessions case, since we don't have to establish a
5666          * separate connection for callbacks,    4354          * separate connection for callbacks, we assume it's OK
5667          * until we hear otherwise:              4355          * until we hear otherwise:
5668          */                                      4356          */
5669         return clp->cl_minorversion && clp->c    4357         return clp->cl_minorversion && clp->cl_cb_state == NFSD4_CB_UNKNOWN;
5670 }                                                4358 }
5671                                                  4359 
5672 static struct file_lease *nfs4_alloc_init_lea !! 4360 static struct file_lock *nfs4_alloc_init_lease(struct nfs4_delegation *dp,
5673                                                  4361                                                 int flag)
5674 {                                                4362 {
5675         struct file_lease *fl;                !! 4363         struct file_lock *fl;
5676                                                  4364 
5677         fl = locks_alloc_lease();             !! 4365         fl = locks_alloc_lock();
5678         if (!fl)                                 4366         if (!fl)
5679                 return NULL;                     4367                 return NULL;
5680         fl->fl_lmops = &nfsd_lease_mng_ops;      4368         fl->fl_lmops = &nfsd_lease_mng_ops;
5681         fl->c.flc_flags = FL_DELEG;           !! 4369         fl->fl_flags = FL_DELEG;
5682         fl->c.flc_type = flag == NFS4_OPEN_DE !! 4370         fl->fl_type = flag == NFS4_OPEN_DELEGATE_READ? F_RDLCK: F_WRLCK;
5683         fl->c.flc_owner = (fl_owner_t)dp;     !! 4371         fl->fl_end = OFFSET_MAX;
5684         fl->c.flc_pid = current->tgid;        !! 4372         fl->fl_owner = (fl_owner_t)dp;
5685         fl->c.flc_file = dp->dl_stid.sc_file- !! 4373         fl->fl_pid = current->tgid;
                                                   >> 4374         fl->fl_file = dp->dl_stid.sc_file->fi_deleg_file;
5686         return fl;                               4375         return fl;
5687 }                                                4376 }
5688                                                  4377 
5689 static int nfsd4_check_conflicting_opens(stru << 
5690                                          stru << 
5691 {                                             << 
5692         struct nfs4_ol_stateid *st;           << 
5693         struct file *f = fp->fi_deleg_file->n << 
5694         struct inode *ino = file_inode(f);    << 
5695         int writes;                           << 
5696                                               << 
5697         writes = atomic_read(&ino->i_writecou << 
5698         if (!writes)                          << 
5699                 return 0;                     << 
5700         /*                                    << 
5701          * There could be multiple filehandle << 
5702          * nfs4_files) referencing this file, << 
5703          * common; let's just give up in that << 
5704          * trying to go look up all the clien << 
5705          * nfs4_file as well:                 << 
5706          */                                   << 
5707         if (fp->fi_aliased)                   << 
5708                 return -EAGAIN;               << 
5709         /*                                    << 
5710          * If there's a close in progress, ma << 
5711          * clear any fi_fds[] entries before  << 
5712          * i_writecount:                      << 
5713          */                                   << 
5714         smp_mb__after_atomic();               << 
5715                                               << 
5716         if (fp->fi_fds[O_WRONLY])             << 
5717                 writes--;                     << 
5718         if (fp->fi_fds[O_RDWR])               << 
5719                 writes--;                     << 
5720         if (writes > 0)                       << 
5721                 return -EAGAIN; /* There may  << 
5722         /*                                    << 
5723          * It's possible there are non-NFSv4  << 
5724          * but if they haven't incremented i_ << 
5725          * also haven't called break lease ye << 
5726          * lease soon enough.  So, all that's << 
5727          * opens:                             << 
5728          */                                   << 
5729         spin_lock(&fp->fi_lock);              << 
5730         list_for_each_entry(st, &fp->fi_state << 
5731                 if (st->st_openstp == NULL /* << 
5732                     access_permit_write(st) & << 
5733                     st->st_stid.sc_client !=  << 
5734                         spin_unlock(&fp->fi_l << 
5735                         return -EAGAIN;       << 
5736                 }                             << 
5737         }                                     << 
5738         spin_unlock(&fp->fi_lock);            << 
5739         /*                                    << 
5740          * There's a small chance that we cou << 
5741          * NFSv4 open.  However, any open tha << 
5742          * the fi_stateids list also hasn't c << 
5743          * they'll break this lease soon enou << 
5744          */                                   << 
5745         return 0;                             << 
5746 }                                             << 
5747                                               << 
5748 /*                                            << 
5749  * It's possible that between opening the den << 
5750  * that it has been renamed or unlinked. Redo << 
5751  * hasn't happened.                           << 
5752  */                                           << 
5753 static int                                    << 
5754 nfsd4_verify_deleg_dentry(struct nfsd4_open * << 
5755                           struct svc_fh *pare << 
5756 {                                             << 
5757         struct svc_export *exp;               << 
5758         struct dentry *child;                 << 
5759         __be32 err;                           << 
5760                                               << 
5761         err = nfsd_lookup_dentry(open->op_rqs << 
5762                                  open->op_fna << 
5763                                  &exp, &child << 
5764                                               << 
5765         if (err)                              << 
5766                 return -EAGAIN;               << 
5767                                               << 
5768         exp_put(exp);                         << 
5769         dput(child);                          << 
5770         if (child != file_dentry(fp->fi_deleg << 
5771                 return -EAGAIN;               << 
5772                                               << 
5773         return 0;                             << 
5774 }                                             << 
5775                                               << 
5776 /*                                            << 
5777  * We avoid breaking delegations held by a cl << 
5778  * clearing setuid/setgid bits on a write is  << 
5779  * may not notice and continue using the old  << 
5780  * on setuid/setgid files when the client is  << 
5781  */                                           << 
5782 static int                                    << 
5783 nfsd4_verify_setuid_write(struct nfsd4_open * << 
5784 {                                             << 
5785         struct inode *inode = file_inode(nf-> << 
5786                                               << 
5787         if ((open->op_share_access & NFS4_SHA << 
5788             (inode->i_mode & (S_ISUID|S_ISGID << 
5789                 return -EAGAIN;               << 
5790         return 0;                             << 
5791 }                                             << 
5792                                               << 
5793 static struct nfs4_delegation *                  4378 static struct nfs4_delegation *
5794 nfs4_set_delegation(struct nfsd4_open *open,  !! 4379 nfs4_set_delegation(struct nfs4_client *clp, struct svc_fh *fh,
5795                     struct svc_fh *parent)    !! 4380                     struct nfs4_file *fp, struct nfs4_clnt_odstate *odstate)
5796 {                                                4381 {
5797         int status = 0;                          4382         int status = 0;
5798         struct nfs4_client *clp = stp->st_sti << 
5799         struct nfs4_file *fp = stp->st_stid.s << 
5800         struct nfs4_clnt_odstate *odstate = s << 
5801         struct nfs4_delegation *dp;              4383         struct nfs4_delegation *dp;
5802         struct nfsd_file *nf = NULL;          !! 4384         struct file *filp;
5803         struct file_lease *fl;                !! 4385         struct file_lock *fl;
5804         u32 dl_type;                          << 
5805                                                  4386 
5806         /*                                       4387         /*
5807          * The fi_had_conflict and nfs_get_ex    4388          * The fi_had_conflict and nfs_get_existing_delegation checks
5808          * here are just optimizations; we'll    4389          * here are just optimizations; we'll need to recheck them at
5809          * the end:                              4390          * the end:
5810          */                                      4391          */
5811         if (fp->fi_had_conflict)                 4392         if (fp->fi_had_conflict)
5812                 return ERR_PTR(-EAGAIN);         4393                 return ERR_PTR(-EAGAIN);
5813                                                  4394 
5814         /*                                    !! 4395         filp = find_readable_file(fp);
5815          * Try for a write delegation first.  !! 4396         if (!filp) {
5816          *                                    !! 4397                 /* We should always have a readable file here */
5817          *  "An OPEN_DELEGATE_WRITE delegatio !! 4398                 WARN_ON_ONCE(1);
5818          *   on its own, all opens."          !! 4399                 return ERR_PTR(-EBADF);
5819          *                                    << 
5820          * Furthermore the client can use a w << 
5821          * operations as well, so we require  << 
5822          *                                    << 
5823          * Offer a write delegation in the ca << 
5824          * we get the O_RDWR descriptor.      << 
5825          */                                   << 
5826         if ((open->op_share_access & NFS4_SHA << 
5827                 nf = find_rw_file(fp);        << 
5828                 dl_type = NFS4_OPEN_DELEGATE_ << 
5829         }                                     << 
5830                                               << 
5831         /*                                    << 
5832          * If the file is being opened O_RDON << 
5833          * file for some reason, then try for << 
5834          */                                   << 
5835         if (!nf && (open->op_share_access & N << 
5836                 nf = find_readable_file(fp);  << 
5837                 dl_type = NFS4_OPEN_DELEGATE_ << 
5838         }                                        4400         }
5839                                               << 
5840         if (!nf)                              << 
5841                 return ERR_PTR(-EAGAIN);      << 
5842                                               << 
5843         spin_lock(&state_lock);                  4401         spin_lock(&state_lock);
5844         spin_lock(&fp->fi_lock);                 4402         spin_lock(&fp->fi_lock);
5845         if (nfs4_delegation_exists(clp, fp))     4403         if (nfs4_delegation_exists(clp, fp))
5846                 status = -EAGAIN;                4404                 status = -EAGAIN;
5847         else if (nfsd4_verify_setuid_write(op << 
5848                 status = -EAGAIN;             << 
5849         else if (!fp->fi_deleg_file) {           4405         else if (!fp->fi_deleg_file) {
5850                 fp->fi_deleg_file = nf;       !! 4406                 fp->fi_deleg_file = filp;
5851                 /* increment early to prevent    4407                 /* increment early to prevent fi_deleg_file from being
5852                  * cleared */                    4408                  * cleared */
5853                 fp->fi_delegees = 1;             4409                 fp->fi_delegees = 1;
5854                 nf = NULL;                    !! 4410                 filp = NULL;
5855         } else                                   4411         } else
5856                 fp->fi_delegees++;               4412                 fp->fi_delegees++;
5857         spin_unlock(&fp->fi_lock);               4413         spin_unlock(&fp->fi_lock);
5858         spin_unlock(&state_lock);                4414         spin_unlock(&state_lock);
5859         if (nf)                               !! 4415         if (filp)
5860                 nfsd_file_put(nf);            !! 4416                 fput(filp);
5861         if (status)                              4417         if (status)
5862                 return ERR_PTR(status);          4418                 return ERR_PTR(status);
5863                                                  4419 
5864         status = -ENOMEM;                        4420         status = -ENOMEM;
5865         dp = alloc_init_deleg(clp, fp, odstat !! 4421         dp = alloc_init_deleg(clp, fp, fh, odstate);
5866         if (!dp)                                 4422         if (!dp)
5867                 goto out_delegees;               4423                 goto out_delegees;
5868                                                  4424 
5869         fl = nfs4_alloc_init_lease(dp, dl_typ !! 4425         fl = nfs4_alloc_init_lease(dp, NFS4_OPEN_DELEGATE_READ);
5870         if (!fl)                                 4426         if (!fl)
5871                 goto out_clnt_odstate;           4427                 goto out_clnt_odstate;
5872                                                  4428 
5873         status = kernel_setlease(fp->fi_deleg !! 4429         status = vfs_setlease(fp->fi_deleg_file, fl->fl_type, &fl, NULL);
5874                                       fl->c.f << 
5875         if (fl)                                  4430         if (fl)
5876                 locks_free_lease(fl);         !! 4431                 locks_free_lock(fl);
5877         if (status)                              4432         if (status)
5878                 goto out_clnt_odstate;           4433                 goto out_clnt_odstate;
5879                                                  4434 
5880         if (parent) {                         << 
5881                 status = nfsd4_verify_deleg_d << 
5882                 if (status)                   << 
5883                         goto out_unlock;      << 
5884         }                                     << 
5885                                               << 
5886         status = nfsd4_check_conflicting_open << 
5887         if (status)                           << 
5888                 goto out_unlock;              << 
5889                                               << 
5890         /*                                    << 
5891          * Now that the deleg is set, check a << 
5892          * raced in and changed the mode whil << 
5893          */                                   << 
5894         status = nfsd4_verify_setuid_write(op << 
5895         if (status)                           << 
5896                 goto out_unlock;              << 
5897                                               << 
5898         status = -EAGAIN;                     << 
5899         if (fp->fi_had_conflict)              << 
5900                 goto out_unlock;              << 
5901                                               << 
5902         spin_lock(&state_lock);                  4435         spin_lock(&state_lock);
5903         spin_lock(&clp->cl_lock);             << 
5904         spin_lock(&fp->fi_lock);                 4436         spin_lock(&fp->fi_lock);
5905         status = hash_delegation_locked(dp, f !! 4437         if (fp->fi_had_conflict)
                                                   >> 4438                 status = -EAGAIN;
                                                   >> 4439         else
                                                   >> 4440                 status = hash_delegation_locked(dp, fp);
5906         spin_unlock(&fp->fi_lock);               4441         spin_unlock(&fp->fi_lock);
5907         spin_unlock(&clp->cl_lock);           << 
5908         spin_unlock(&state_lock);                4442         spin_unlock(&state_lock);
5909                                                  4443 
5910         if (status)                              4444         if (status)
5911                 goto out_unlock;                 4445                 goto out_unlock;
5912                                                  4446 
5913         return dp;                               4447         return dp;
5914 out_unlock:                                      4448 out_unlock:
5915         kernel_setlease(fp->fi_deleg_file->nf !! 4449         vfs_setlease(fp->fi_deleg_file, F_UNLCK, NULL, (void **)&dp);
5916 out_clnt_odstate:                                4450 out_clnt_odstate:
5917         put_clnt_odstate(dp->dl_clnt_odstate)    4451         put_clnt_odstate(dp->dl_clnt_odstate);
5918         nfs4_put_stid(&dp->dl_stid);             4452         nfs4_put_stid(&dp->dl_stid);
5919 out_delegees:                                    4453 out_delegees:
5920         put_deleg_file(fp);                      4454         put_deleg_file(fp);
5921         return ERR_PTR(status);                  4455         return ERR_PTR(status);
5922 }                                                4456 }
5923                                                  4457 
5924 static void nfsd4_open_deleg_none_ext(struct     4458 static void nfsd4_open_deleg_none_ext(struct nfsd4_open *open, int status)
5925 {                                                4459 {
5926         open->op_delegate_type = NFS4_OPEN_DE    4460         open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT;
5927         if (status == -EAGAIN)                   4461         if (status == -EAGAIN)
5928                 open->op_why_no_deleg = WND4_    4462                 open->op_why_no_deleg = WND4_CONTENTION;
5929         else {                                   4463         else {
5930                 open->op_why_no_deleg = WND4_    4464                 open->op_why_no_deleg = WND4_RESOURCE;
5931                 switch (open->op_deleg_want)     4465                 switch (open->op_deleg_want) {
5932                 case NFS4_SHARE_WANT_READ_DEL    4466                 case NFS4_SHARE_WANT_READ_DELEG:
5933                 case NFS4_SHARE_WANT_WRITE_DE    4467                 case NFS4_SHARE_WANT_WRITE_DELEG:
5934                 case NFS4_SHARE_WANT_ANY_DELE    4468                 case NFS4_SHARE_WANT_ANY_DELEG:
5935                         break;                   4469                         break;
5936                 case NFS4_SHARE_WANT_CANCEL:     4470                 case NFS4_SHARE_WANT_CANCEL:
5937                         open->op_why_no_deleg    4471                         open->op_why_no_deleg = WND4_CANCELLED;
5938                         break;                   4472                         break;
5939                 case NFS4_SHARE_WANT_NO_DELEG    4473                 case NFS4_SHARE_WANT_NO_DELEG:
5940                         WARN_ON_ONCE(1);         4474                         WARN_ON_ONCE(1);
5941                 }                                4475                 }
5942         }                                        4476         }
5943 }                                                4477 }
5944                                                  4478 
5945 static bool                                   << 
5946 nfs4_delegation_stat(struct nfs4_delegation * << 
5947                      struct kstat *stat)      << 
5948 {                                             << 
5949         struct nfsd_file *nf = find_rw_file(d << 
5950         struct path path;                     << 
5951         int rc;                               << 
5952                                               << 
5953         if (!nf)                              << 
5954                 return false;                 << 
5955                                               << 
5956         path.mnt = currentfh->fh_export->ex_p << 
5957         path.dentry = file_dentry(nf->nf_file << 
5958                                               << 
5959         rc = vfs_getattr(&path, stat,         << 
5960                          (STATX_SIZE | STATX_ << 
5961                          AT_STATX_SYNC_AS_STA << 
5962                                               << 
5963         nfsd_file_put(nf);                    << 
5964         return rc == 0;                       << 
5965 }                                             << 
5966                                               << 
5967 /*                                               4479 /*
5968  * The Linux NFS server does not offer write  !! 4480  * Attempt to hand out a delegation.
5969  * clients in order to avoid conflicts betwee << 
5970  * GETATTRs requesting CHANGE or SIZE attribu << 
5971  *                                            << 
5972  * With NFSv4.1 and later minorversions, the  << 
5973  * begins each COMPOUND contains a client ID. << 
5974  * be avoided when the server recognizes the  << 
5975  * GETATTR also holds write delegation it con << 
5976  *                                               4481  *
5977  * However, the NFSv4.0 protocol does not ena !! 4482  * Note we don't support write delegations, and won't until the vfs has
5978  * determine that a GETATTR originated from t !! 4483  * proper support for them.
5979  * conflicting delegation versus coming from  << 
5980  * RFC 7530 Section 16.7.5, the server must r << 
5981  * CB_GETATTR even when the GETATTR originate << 
5982  * holds the conflicting delegation.          << 
5983  *                                            << 
5984  * An NFSv4.0 client can trigger a pathologic << 
5985  * always sends a DELEGRETURN preceded by a c << 
5986  * the same COMPOUND. COMPOUND execution will << 
5987  * GETATTR and the DELEGRETURN will never get << 
5988  * eventually revokes the delegation, which c << 
5989  * open or lock state.                        << 
5990  */                                              4484  */
5991 static void                                      4485 static void
5992 nfs4_open_delegation(struct nfsd4_open *open, !! 4486 nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open,
5993                      struct svc_fh *currentfh !! 4487                         struct nfs4_ol_stateid *stp)
5994 {                                                4488 {
5995         struct nfs4_delegation *dp;              4489         struct nfs4_delegation *dp;
5996         struct nfs4_openowner *oo = openowner    4490         struct nfs4_openowner *oo = openowner(stp->st_stateowner);
5997         struct nfs4_client *clp = stp->st_sti    4491         struct nfs4_client *clp = stp->st_stid.sc_client;
5998         struct svc_fh *parent = NULL;         << 
5999         int cb_up;                               4492         int cb_up;
6000         int status = 0;                          4493         int status = 0;
6001         struct kstat stat;                    << 
6002                                                  4494 
6003         cb_up = nfsd4_cb_channel_good(oo->oo_    4495         cb_up = nfsd4_cb_channel_good(oo->oo_owner.so_client);
6004         open->op_recall = false;              !! 4496         open->op_recall = 0;
6005         switch (open->op_claim_type) {           4497         switch (open->op_claim_type) {
6006                 case NFS4_OPEN_CLAIM_PREVIOUS    4498                 case NFS4_OPEN_CLAIM_PREVIOUS:
6007                         if (!cb_up)              4499                         if (!cb_up)
6008                                 open->op_reca !! 4500                                 open->op_recall = 1;
                                                   >> 4501                         if (open->op_delegate_type != NFS4_OPEN_DELEGATE_READ)
                                                   >> 4502                                 goto out_no_deleg;
6009                         break;                   4503                         break;
6010                 case NFS4_OPEN_CLAIM_NULL:       4504                 case NFS4_OPEN_CLAIM_NULL:
6011                         parent = currentfh;   << 
6012                         fallthrough;          << 
6013                 case NFS4_OPEN_CLAIM_FH:         4505                 case NFS4_OPEN_CLAIM_FH:
6014                         /*                       4506                         /*
6015                          * Let's not give out    4507                          * Let's not give out any delegations till everyone's
6016                          * had the chance to     4508                          * had the chance to reclaim theirs, *and* until
6017                          * NLM locks have all    4509                          * NLM locks have all been reclaimed:
6018                          */                      4510                          */
6019                         if (locks_in_grace(cl    4511                         if (locks_in_grace(clp->net))
6020                                 goto out_no_d    4512                                 goto out_no_deleg;
6021                         if (!cb_up || !(oo->o    4513                         if (!cb_up || !(oo->oo_flags & NFS4_OO_CONFIRMED))
6022                                 goto out_no_d    4514                                 goto out_no_deleg;
6023                         if (open->op_share_ac !! 4515                         /*
6024                                         !clp- !! 4516                          * Also, if the file was opened for write or
                                                   >> 4517                          * create, there's a good chance the client's
                                                   >> 4518                          * about to write to it, resulting in an
                                                   >> 4519                          * immediate recall (since we don't support
                                                   >> 4520                          * write delegations):
                                                   >> 4521                          */
                                                   >> 4522                         if (open->op_share_access & NFS4_SHARE_ACCESS_WRITE)
                                                   >> 4523                                 goto out_no_deleg;
                                                   >> 4524                         if (open->op_create == NFS4_OPEN_CREATE)
6025                                 goto out_no_d    4525                                 goto out_no_deleg;
6026                         break;                   4526                         break;
6027                 default:                         4527                 default:
6028                         goto out_no_deleg;       4528                         goto out_no_deleg;
6029         }                                        4529         }
6030         dp = nfs4_set_delegation(open, stp, p !! 4530         dp = nfs4_set_delegation(clp, fh, stp->st_stid.sc_file, stp->st_clnt_odstate);
6031         if (IS_ERR(dp))                          4531         if (IS_ERR(dp))
6032                 goto out_no_deleg;               4532                 goto out_no_deleg;
6033                                                  4533 
6034         memcpy(&open->op_delegate_stateid, &d    4534         memcpy(&open->op_delegate_stateid, &dp->dl_stid.sc_stateid, sizeof(dp->dl_stid.sc_stateid));
6035                                                  4535 
6036         if (open->op_share_access & NFS4_SHAR !! 4536         dprintk("NFSD: delegation stateid=" STATEID_FMT "\n",
6037                 if (!nfs4_delegation_stat(dp, !! 4537                 STATEID_VAL(&dp->dl_stid.sc_stateid));
6038                         nfs4_put_stid(&dp->dl !! 4538         open->op_delegate_type = NFS4_OPEN_DELEGATE_READ;
6039                         destroy_delegation(dp << 
6040                         goto out_no_deleg;    << 
6041                 }                             << 
6042                 open->op_delegate_type = NFS4 << 
6043                 dp->dl_cb_fattr.ncf_cur_fsize << 
6044                 dp->dl_cb_fattr.ncf_initial_c << 
6045                         nfsd4_change_attribut << 
6046                 trace_nfsd_deleg_write(&dp->d << 
6047         } else {                              << 
6048                 open->op_delegate_type = NFS4 << 
6049                 trace_nfsd_deleg_read(&dp->dl << 
6050         }                                     << 
6051         nfs4_put_stid(&dp->dl_stid);             4539         nfs4_put_stid(&dp->dl_stid);
6052         return;                                  4540         return;
6053 out_no_deleg:                                    4541 out_no_deleg:
6054         open->op_delegate_type = NFS4_OPEN_DE    4542         open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE;
6055         if (open->op_claim_type == NFS4_OPEN_    4543         if (open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS &&
6056             open->op_delegate_type != NFS4_OP    4544             open->op_delegate_type != NFS4_OPEN_DELEGATE_NONE) {
6057                 dprintk("NFSD: WARNING: refus    4545                 dprintk("NFSD: WARNING: refusing delegation reclaim\n");
6058                 open->op_recall = true;       !! 4546                 open->op_recall = 1;
6059         }                                        4547         }
6060                                                  4548 
6061         /* 4.1 client asking for a delegation    4549         /* 4.1 client asking for a delegation? */
6062         if (open->op_deleg_want)                 4550         if (open->op_deleg_want)
6063                 nfsd4_open_deleg_none_ext(ope    4551                 nfsd4_open_deleg_none_ext(open, status);
6064         return;                                  4552         return;
6065 }                                                4553 }
6066                                                  4554 
6067 static void nfsd4_deleg_xgrade_none_ext(struc    4555 static void nfsd4_deleg_xgrade_none_ext(struct nfsd4_open *open,
6068                                         struc    4556                                         struct nfs4_delegation *dp)
6069 {                                                4557 {
6070         if (open->op_deleg_want == NFS4_SHARE    4558         if (open->op_deleg_want == NFS4_SHARE_WANT_READ_DELEG &&
6071             dp->dl_type == NFS4_OPEN_DELEGATE    4559             dp->dl_type == NFS4_OPEN_DELEGATE_WRITE) {
6072                 open->op_delegate_type = NFS4    4560                 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT;
6073                 open->op_why_no_deleg = WND4_    4561                 open->op_why_no_deleg = WND4_NOT_SUPP_DOWNGRADE;
6074         } else if (open->op_deleg_want == NFS    4562         } else if (open->op_deleg_want == NFS4_SHARE_WANT_WRITE_DELEG &&
6075                    dp->dl_type == NFS4_OPEN_D    4563                    dp->dl_type == NFS4_OPEN_DELEGATE_WRITE) {
6076                 open->op_delegate_type = NFS4    4564                 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT;
6077                 open->op_why_no_deleg = WND4_    4565                 open->op_why_no_deleg = WND4_NOT_SUPP_UPGRADE;
6078         }                                        4566         }
6079         /* Otherwise the client must be confu    4567         /* Otherwise the client must be confused wanting a delegation
6080          * it already has, therefore we don't    4568          * it already has, therefore we don't return
6081          * NFS4_OPEN_DELEGATE_NONE_EXT and re    4569          * NFS4_OPEN_DELEGATE_NONE_EXT and reason.
6082          */                                      4570          */
6083 }                                                4571 }
6084                                                  4572 
6085 /**                                           << 
6086  * nfsd4_process_open2 - finish open processi << 
6087  * @rqstp: the RPC transaction being executed << 
6088  * @current_fh: NFSv4 COMPOUND's current file << 
6089  * @open: OPEN arguments                      << 
6090  *                                            << 
6091  * If successful, (1) truncate the file if op << 
6092  * set, (2) set open->op_stateid, (3) set ope << 
6093  *                                            << 
6094  * Returns %nfs_ok on success; otherwise an n << 
6095  * network byte order is returned.            << 
6096  */                                           << 
6097 __be32                                           4573 __be32
6098 nfsd4_process_open2(struct svc_rqst *rqstp, s    4574 nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open)
6099 {                                                4575 {
6100         struct nfsd4_compoundres *resp = rqst    4576         struct nfsd4_compoundres *resp = rqstp->rq_resp;
6101         struct nfs4_client *cl = open->op_ope    4577         struct nfs4_client *cl = open->op_openowner->oo_owner.so_client;
6102         struct nfs4_file *fp = NULL;             4578         struct nfs4_file *fp = NULL;
6103         struct nfs4_ol_stateid *stp = NULL;      4579         struct nfs4_ol_stateid *stp = NULL;
6104         struct nfs4_delegation *dp = NULL;       4580         struct nfs4_delegation *dp = NULL;
6105         __be32 status;                           4581         __be32 status;
6106         bool new_stp = false;                    4582         bool new_stp = false;
6107                                                  4583 
6108         /*                                       4584         /*
6109          * Lookup file; if found, lookup stat    4585          * Lookup file; if found, lookup stateid and check open request,
6110          * and check for delegations in the p    4586          * and check for delegations in the process of being recalled.
6111          * If not found, create the nfs4_file    4587          * If not found, create the nfs4_file struct
6112          */                                      4588          */
6113         fp = nfsd4_file_hash_insert(open->op_ !! 4589         fp = find_or_add_file(open->op_file, &current_fh->fh_handle);
6114         if (unlikely(!fp))                    << 
6115                 return nfserr_jukebox;        << 
6116         if (fp != open->op_file) {               4590         if (fp != open->op_file) {
6117                 status = nfs4_check_deleg(cl,    4591                 status = nfs4_check_deleg(cl, open, &dp);
6118                 if (status)                      4592                 if (status)
6119                         goto out;                4593                         goto out;
6120                 stp = nfsd4_find_and_lock_exi    4594                 stp = nfsd4_find_and_lock_existing_open(fp, open);
6121         } else {                                 4595         } else {
6122                 open->op_file = NULL;            4596                 open->op_file = NULL;
6123                 status = nfserr_bad_stateid;     4597                 status = nfserr_bad_stateid;
6124                 if (nfsd4_is_deleg_cur(open))    4598                 if (nfsd4_is_deleg_cur(open))
6125                         goto out;                4599                         goto out;
6126         }                                        4600         }
6127                                                  4601 
6128         if (!stp) {                              4602         if (!stp) {
6129                 stp = init_open_stateid(fp, o    4603                 stp = init_open_stateid(fp, open);
6130                 if (!open->op_stp)               4604                 if (!open->op_stp)
6131                         new_stp = true;          4605                         new_stp = true;
6132         }                                        4606         }
6133                                                  4607 
6134         /*                                       4608         /*
6135          * OPEN the file, or upgrade an exist    4609          * OPEN the file, or upgrade an existing OPEN.
6136          * If truncate fails, the OPEN fails.    4610          * If truncate fails, the OPEN fails.
6137          *                                       4611          *
6138          * stp is already locked.                4612          * stp is already locked.
6139          */                                      4613          */
6140         if (!new_stp) {                          4614         if (!new_stp) {
6141                 /* Stateid was found, this is    4615                 /* Stateid was found, this is an OPEN upgrade */
6142                 status = nfs4_upgrade_open(rq    4616                 status = nfs4_upgrade_open(rqstp, fp, current_fh, stp, open);
6143                 if (status) {                    4617                 if (status) {
6144                         mutex_unlock(&stp->st    4618                         mutex_unlock(&stp->st_mutex);
6145                         goto out;                4619                         goto out;
6146                 }                                4620                 }
6147         } else {                                 4621         } else {
6148                 status = nfs4_get_vfs_file(rq !! 4622                 status = nfs4_get_vfs_file(rqstp, fp, current_fh, stp, open);
6149                 if (status) {                    4623                 if (status) {
                                                   >> 4624                         stp->st_stid.sc_type = NFS4_CLOSED_STID;
6150                         release_open_stateid(    4625                         release_open_stateid(stp);
6151                         mutex_unlock(&stp->st    4626                         mutex_unlock(&stp->st_mutex);
6152                         goto out;                4627                         goto out;
6153                 }                                4628                 }
6154                                                  4629 
6155                 stp->st_clnt_odstate = find_o    4630                 stp->st_clnt_odstate = find_or_hash_clnt_odstate(fp,
6156                                                  4631                                                         open->op_odstate);
6157                 if (stp->st_clnt_odstate == o    4632                 if (stp->st_clnt_odstate == open->op_odstate)
6158                         open->op_odstate = NU    4633                         open->op_odstate = NULL;
6159         }                                        4634         }
6160                                                  4635 
6161         nfs4_inc_and_copy_stateid(&open->op_s    4636         nfs4_inc_and_copy_stateid(&open->op_stateid, &stp->st_stid);
6162         mutex_unlock(&stp->st_mutex);            4637         mutex_unlock(&stp->st_mutex);
6163                                                  4638 
6164         if (nfsd4_has_session(&resp->cstate))    4639         if (nfsd4_has_session(&resp->cstate)) {
6165                 if (open->op_deleg_want & NFS    4640                 if (open->op_deleg_want & NFS4_SHARE_WANT_NO_DELEG) {
6166                         open->op_delegate_typ    4641                         open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT;
6167                         open->op_why_no_deleg    4642                         open->op_why_no_deleg = WND4_NOT_WANTED;
6168                         goto nodeleg;            4643                         goto nodeleg;
6169                 }                                4644                 }
6170         }                                        4645         }
6171                                                  4646 
6172         /*                                       4647         /*
6173         * Attempt to hand out a delegation. N    4648         * Attempt to hand out a delegation. No error return, because the
6174         * OPEN succeeds even if we fail.         4649         * OPEN succeeds even if we fail.
6175         */                                       4650         */
6176         nfs4_open_delegation(open, stp, &resp !! 4651         nfs4_open_delegation(current_fh, open, stp);
6177 nodeleg:                                         4652 nodeleg:
6178         status = nfs_ok;                         4653         status = nfs_ok;
6179         trace_nfsd_open(&stp->st_stid.sc_stat !! 4654 
                                                   >> 4655         dprintk("%s: stateid=" STATEID_FMT "\n", __func__,
                                                   >> 4656                 STATEID_VAL(&stp->st_stid.sc_stateid));
6180 out:                                             4657 out:
6181         /* 4.1 client trying to upgrade/downg    4658         /* 4.1 client trying to upgrade/downgrade delegation? */
6182         if (open->op_delegate_type == NFS4_OP    4659         if (open->op_delegate_type == NFS4_OPEN_DELEGATE_NONE && dp &&
6183             open->op_deleg_want)                 4660             open->op_deleg_want)
6184                 nfsd4_deleg_xgrade_none_ext(o    4661                 nfsd4_deleg_xgrade_none_ext(open, dp);
6185                                                  4662 
6186         if (fp)                                  4663         if (fp)
6187                 put_nfs4_file(fp);               4664                 put_nfs4_file(fp);
6188         if (status == 0 && open->op_claim_typ    4665         if (status == 0 && open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS)
6189                 open->op_openowner->oo_flags     4666                 open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED;
6190         /*                                       4667         /*
6191         * To finish the open response, we jus    4668         * To finish the open response, we just need to set the rflags.
6192         */                                       4669         */
6193         open->op_rflags = NFS4_OPEN_RESULT_LO    4670         open->op_rflags = NFS4_OPEN_RESULT_LOCKTYPE_POSIX;
6194         if (nfsd4_has_session(&resp->cstate))    4671         if (nfsd4_has_session(&resp->cstate))
6195                 open->op_rflags |= NFS4_OPEN_    4672                 open->op_rflags |= NFS4_OPEN_RESULT_MAY_NOTIFY_LOCK;
6196         else if (!(open->op_openowner->oo_fla    4673         else if (!(open->op_openowner->oo_flags & NFS4_OO_CONFIRMED))
6197                 open->op_rflags |= NFS4_OPEN_    4674                 open->op_rflags |= NFS4_OPEN_RESULT_CONFIRM;
6198                                                  4675 
6199         if (dp)                                  4676         if (dp)
6200                 nfs4_put_stid(&dp->dl_stid);     4677                 nfs4_put_stid(&dp->dl_stid);
6201         if (stp)                                 4678         if (stp)
6202                 nfs4_put_stid(&stp->st_stid);    4679                 nfs4_put_stid(&stp->st_stid);
6203                                                  4680 
6204         return status;                           4681         return status;
6205 }                                                4682 }
6206                                                  4683 
6207 void nfsd4_cleanup_open_state(struct nfsd4_co    4684 void nfsd4_cleanup_open_state(struct nfsd4_compound_state *cstate,
6208                               struct nfsd4_op    4685                               struct nfsd4_open *open)
6209 {                                                4686 {
6210         if (open->op_openowner)               !! 4687         if (open->op_openowner) {
6211                 nfs4_put_stateowner(&open->op !! 4688                 struct nfs4_stateowner *so = &open->op_openowner->oo_owner;
                                                   >> 4689 
                                                   >> 4690                 nfsd4_cstate_assign_replay(cstate, so);
                                                   >> 4691                 nfs4_put_stateowner(so);
                                                   >> 4692         }
6212         if (open->op_file)                       4693         if (open->op_file)
6213                 kmem_cache_free(file_slab, op    4694                 kmem_cache_free(file_slab, open->op_file);
6214         if (open->op_stp)                        4695         if (open->op_stp)
6215                 nfs4_put_stid(&open->op_stp->    4696                 nfs4_put_stid(&open->op_stp->st_stid);
6216         if (open->op_odstate)                    4697         if (open->op_odstate)
6217                 kmem_cache_free(odstate_slab,    4698                 kmem_cache_free(odstate_slab, open->op_odstate);
6218 }                                                4699 }
6219                                                  4700 
6220 __be32                                           4701 __be32
6221 nfsd4_renew(struct svc_rqst *rqstp, struct nf    4702 nfsd4_renew(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
6222             union nfsd4_op_u *u)                 4703             union nfsd4_op_u *u)
6223 {                                                4704 {
6224         clientid_t *clid = &u->renew;            4705         clientid_t *clid = &u->renew;
6225         struct nfs4_client *clp;                 4706         struct nfs4_client *clp;
6226         __be32 status;                           4707         __be32 status;
6227         struct nfsd_net *nn = net_generic(SVC    4708         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
6228                                                  4709 
6229         trace_nfsd_clid_renew(clid);          !! 4710         dprintk("process_renew(%08x/%08x): starting\n", 
6230         status = set_client(clid, cstate, nn) !! 4711                         clid->cl_boot, clid->cl_id);
                                                   >> 4712         status = lookup_clientid(clid, cstate, nn);
6231         if (status)                              4713         if (status)
6232                 return status;                !! 4714                 goto out;
6233         clp = cstate->clp;                       4715         clp = cstate->clp;
                                                   >> 4716         status = nfserr_cb_path_down;
6234         if (!list_empty(&clp->cl_delegations)    4717         if (!list_empty(&clp->cl_delegations)
6235                         && clp->cl_cb_state !    4718                         && clp->cl_cb_state != NFSD4_CB_UP)
6236                 return nfserr_cb_path_down;   !! 4719                 goto out;
6237         return nfs_ok;                        !! 4720         status = nfs_ok;
                                                   >> 4721 out:
                                                   >> 4722         return status;
6238 }                                                4723 }
6239                                                  4724 
6240 void                                             4725 void
6241 nfsd4_end_grace(struct nfsd_net *nn)             4726 nfsd4_end_grace(struct nfsd_net *nn)
6242 {                                                4727 {
6243         /* do nothing if grace period already    4728         /* do nothing if grace period already ended */
6244         if (nn->grace_ended)                     4729         if (nn->grace_ended)
6245                 return;                          4730                 return;
6246                                                  4731 
6247         trace_nfsd_grace_complete(nn);        << 
6248         nn->grace_ended = true;                  4732         nn->grace_ended = true;
6249         /*                                       4733         /*
6250          * If the server goes down again righ    4734          * If the server goes down again right now, an NFSv4
6251          * client will still be allowed to re    4735          * client will still be allowed to reclaim after it comes back up,
6252          * even if it hasn't yet had a chance    4736          * even if it hasn't yet had a chance to reclaim state this time.
6253          *                                       4737          *
6254          */                                      4738          */
6255         nfsd4_record_grace_done(nn);             4739         nfsd4_record_grace_done(nn);
6256         /*                                       4740         /*
6257          * At this point, NFSv4 clients can s    4741          * At this point, NFSv4 clients can still reclaim.  But if the
6258          * server crashes, any that have not     4742          * server crashes, any that have not yet reclaimed will be out
6259          * of luck on the next boot.             4743          * of luck on the next boot.
6260          *                                       4744          *
6261          * (NFSv4.1+ clients are considered t    4745          * (NFSv4.1+ clients are considered to have reclaimed once they
6262          * call RECLAIM_COMPLETE.  NFSv4.0 cl    4746          * call RECLAIM_COMPLETE.  NFSv4.0 clients are considered to
6263          * have reclaimed after their first O    4747          * have reclaimed after their first OPEN.)
6264          */                                      4748          */
6265         locks_end_grace(&nn->nfsd4_manager);     4749         locks_end_grace(&nn->nfsd4_manager);
6266         /*                                       4750         /*
6267          * At this point, and once lockd and/    4751          * At this point, and once lockd and/or any other containers
6268          * exit their grace period, further r    4752          * exit their grace period, further reclaims will fail and
6269          * regular locking can resume.           4753          * regular locking can resume.
6270          */                                      4754          */
6271 }                                                4755 }
6272                                                  4756 
6273 /*                                               4757 /*
6274  * If we've waited a lease period but there a    4758  * If we've waited a lease period but there are still clients trying to
6275  * reclaim, wait a little longer to give them    4759  * reclaim, wait a little longer to give them a chance to finish.
6276  */                                              4760  */
6277 static bool clients_still_reclaiming(struct n    4761 static bool clients_still_reclaiming(struct nfsd_net *nn)
6278 {                                                4762 {
6279         time64_t double_grace_period_end = nn !! 4763         unsigned long now = get_seconds();
6280                                            2  !! 4764         unsigned long double_grace_period_end = nn->boot_time +
                                                   >> 4765                                                 2 * nn->nfsd4_lease;
6281                                                  4766 
6282         if (nn->track_reclaim_completes &&       4767         if (nn->track_reclaim_completes &&
6283                         atomic_read(&nn->nr_r    4768                         atomic_read(&nn->nr_reclaim_complete) ==
6284                         nn->reclaim_str_hasht    4769                         nn->reclaim_str_hashtbl_size)
6285                 return false;                    4770                 return false;
6286         if (!nn->somebody_reclaimed)             4771         if (!nn->somebody_reclaimed)
6287                 return false;                    4772                 return false;
6288         nn->somebody_reclaimed = false;          4773         nn->somebody_reclaimed = false;
6289         /*                                       4774         /*
6290          * If we've given them *two* lease ti    4775          * If we've given them *two* lease times to reclaim, and they're
6291          * still not done, give up:              4776          * still not done, give up:
6292          */                                      4777          */
6293         if (ktime_get_boottime_seconds() > do !! 4778         if (time_after(now, double_grace_period_end))
6294                 return false;                    4779                 return false;
6295         return true;                             4780         return true;
6296 }                                                4781 }
6297                                                  4782 
6298 struct laundry_time {                         !! 4783 static time_t
6299         time64_t cutoff;                      !! 4784 nfs4_laundromat(struct nfsd_net *nn)
6300         time64_t new_timeo;                   << 
6301 };                                            << 
6302                                               << 
6303 static bool state_expired(struct laundry_time << 
6304 {                                             << 
6305         time64_t time_remaining;              << 
6306                                               << 
6307         if (last_refresh < lt->cutoff)        << 
6308                 return true;                  << 
6309         time_remaining = last_refresh - lt->c << 
6310         lt->new_timeo = min(lt->new_timeo, ti << 
6311         return false;                         << 
6312 }                                             << 
6313                                               << 
6314 #ifdef CONFIG_NFSD_V4_2_INTER_SSC             << 
6315 void nfsd4_ssc_init_umount_work(struct nfsd_n << 
6316 {                                             << 
6317         spin_lock_init(&nn->nfsd_ssc_lock);   << 
6318         INIT_LIST_HEAD(&nn->nfsd_ssc_mount_li << 
6319         init_waitqueue_head(&nn->nfsd_ssc_wai << 
6320 }                                             << 
6321                                               << 
6322 /*                                            << 
6323  * This is called when nfsd is being shutdown << 
6324  * cleanup were done, to destroy the ssc dela << 
6325  */                                           << 
6326 static void nfsd4_ssc_shutdown_umount(struct  << 
6327 {                                             << 
6328         struct nfsd4_ssc_umount_item *ni = NU << 
6329         struct nfsd4_ssc_umount_item *tmp;    << 
6330                                               << 
6331         spin_lock(&nn->nfsd_ssc_lock);        << 
6332         list_for_each_entry_safe(ni, tmp, &nn << 
6333                 list_del(&ni->nsui_list);     << 
6334                 spin_unlock(&nn->nfsd_ssc_loc << 
6335                 mntput(ni->nsui_vfsmount);    << 
6336                 kfree(ni);                    << 
6337                 spin_lock(&nn->nfsd_ssc_lock) << 
6338         }                                     << 
6339         spin_unlock(&nn->nfsd_ssc_lock);      << 
6340 }                                             << 
6341                                               << 
6342 static void nfsd4_ssc_expire_umount(struct nf << 
6343 {                                             << 
6344         bool do_wakeup = false;               << 
6345         struct nfsd4_ssc_umount_item *ni = NU << 
6346         struct nfsd4_ssc_umount_item *tmp;    << 
6347                                               << 
6348         spin_lock(&nn->nfsd_ssc_lock);        << 
6349         list_for_each_entry_safe(ni, tmp, &nn << 
6350                 if (time_after(jiffies, ni->n << 
6351                         if (refcount_read(&ni << 
6352                                 continue;     << 
6353                                               << 
6354                         /* mark being unmount << 
6355                         ni->nsui_busy = true; << 
6356                         spin_unlock(&nn->nfsd << 
6357                         mntput(ni->nsui_vfsmo << 
6358                         spin_lock(&nn->nfsd_s << 
6359                                               << 
6360                         /* waiters need to st << 
6361                         list_del(&ni->nsui_li << 
6362                         kfree(ni);            << 
6363                                               << 
6364                         /* wakeup ssc_connect << 
6365                         do_wakeup = true;     << 
6366                         continue;             << 
6367                 }                             << 
6368                 break;                        << 
6369         }                                     << 
6370         if (do_wakeup)                        << 
6371                 wake_up_all(&nn->nfsd_ssc_wai << 
6372         spin_unlock(&nn->nfsd_ssc_lock);      << 
6373 }                                             << 
6374 #endif                                        << 
6375                                               << 
6376 /* Check if any lock belonging to this lockow << 
6377 static bool                                   << 
6378 nfs4_lockowner_has_blockers(struct nfs4_locko << 
6379 {                                                4785 {
6380         struct file_lock_context *ctx;        !! 4786         struct nfs4_client *clp;
                                                   >> 4787         struct nfs4_openowner *oo;
                                                   >> 4788         struct nfs4_delegation *dp;
6381         struct nfs4_ol_stateid *stp;             4789         struct nfs4_ol_stateid *stp;
6382         struct nfs4_file *nf;                 !! 4790         struct nfsd4_blocked_lock *nbl;
6383                                               !! 4791         struct list_head *pos, *next, reaplist;
6384         list_for_each_entry(stp, &lo->lo_owne !! 4792         time_t cutoff = get_seconds() - nn->nfsd4_lease;
6385                 nf = stp->st_stid.sc_file;    !! 4793         time_t t, new_timeo = nn->nfsd4_lease;
6386                 ctx = locks_inode_context(nf- << 
6387                 if (!ctx)                     << 
6388                         continue;             << 
6389                 if (locks_owner_has_blockers( << 
6390                         return true;          << 
6391         }                                     << 
6392         return false;                         << 
6393 }                                             << 
6394                                                  4794 
6395 static bool                                   !! 4795         dprintk("NFSD: laundromat service - starting\n");
6396 nfs4_anylock_blockers(struct nfs4_client *clp << 
6397 {                                             << 
6398         int i;                                << 
6399         struct nfs4_stateowner *so;           << 
6400         struct nfs4_lockowner *lo;            << 
6401                                                  4796 
6402         if (atomic_read(&clp->cl_delegs_in_re !! 4797         if (clients_still_reclaiming(nn)) {
6403                 return true;                  !! 4798                 new_timeo = 0;
6404         spin_lock(&clp->cl_lock);             !! 4799                 goto out;
6405         for (i = 0; i < OWNER_HASH_SIZE; i++) << 
6406                 list_for_each_entry(so, &clp- << 
6407                                 so_strhash) { << 
6408                         if (so->so_is_open_ow << 
6409                                 continue;     << 
6410                         lo = lockowner(so);   << 
6411                         if (nfs4_lockowner_ha << 
6412                                 spin_unlock(& << 
6413                                 return true;  << 
6414                         }                     << 
6415                 }                             << 
6416         }                                        4800         }
6417         spin_unlock(&clp->cl_lock);           !! 4801         dprintk("NFSD: end of grace period\n");
6418         return false;                         !! 4802         nfsd4_end_grace(nn);
6419 }                                             !! 4803         INIT_LIST_HEAD(&reaplist);
6420                                               << 
6421 static void                                   << 
6422 nfs4_get_client_reaplist(struct nfsd_net *nn, << 
6423                                 struct laundr << 
6424 {                                             << 
6425         unsigned int maxreap, reapcnt = 0;    << 
6426         struct list_head *pos, *next;         << 
6427         struct nfs4_client *clp;              << 
6428                                               << 
6429         maxreap = (atomic_read(&nn->nfs4_clie << 
6430                         NFSD_CLIENT_MAX_TRIM_ << 
6431         INIT_LIST_HEAD(reaplist);             << 
6432         spin_lock(&nn->client_lock);             4804         spin_lock(&nn->client_lock);
6433         list_for_each_safe(pos, next, &nn->cl    4805         list_for_each_safe(pos, next, &nn->client_lru) {
6434                 clp = list_entry(pos, struct     4806                 clp = list_entry(pos, struct nfs4_client, cl_lru);
6435                 if (clp->cl_state == NFSD4_EX !! 4807                 if (time_after((unsigned long)clp->cl_time, (unsigned long)cutoff)) {
6436                         goto exp_client;      !! 4808                         t = clp->cl_time - cutoff;
6437                 if (!state_expired(lt, clp->c !! 4809                         new_timeo = min(new_timeo, t);
6438                         break;                   4810                         break;
6439                 if (!atomic_read(&clp->cl_rpc << 
6440                         if (clp->cl_state ==  << 
6441                                 atomic_inc(&n << 
6442                         clp->cl_state = NFSD4 << 
6443                 }                             << 
6444                 if (!client_has_state(clp))   << 
6445                         goto exp_client;      << 
6446                 if (!nfs4_anylock_blockers(cl << 
6447                         if (reapcnt >= maxrea << 
6448                                 continue;     << 
6449 exp_client:                                   << 
6450                 if (!mark_client_expired_lock << 
6451                         list_add(&clp->cl_lru << 
6452                         reapcnt++;            << 
6453                 }                                4811                 }
6454         }                                     !! 4812                 if (mark_client_expired_locked(clp)) {
6455         spin_unlock(&nn->client_lock);        !! 4813                         dprintk("NFSD: client in use (clientid %08x)\n",
6456 }                                             !! 4814                                 clp->cl_clientid.cl_id);
6457                                               !! 4815                         continue;
6458 static void                                   << 
6459 nfs4_get_courtesy_client_reaplist(struct nfsd << 
6460                                 struct list_h << 
6461 {                                             << 
6462         unsigned int maxreap = 0, reapcnt = 0 << 
6463         struct list_head *pos, *next;         << 
6464         struct nfs4_client *clp;              << 
6465                                               << 
6466         maxreap = NFSD_CLIENT_MAX_TRIM_PER_RU << 
6467         INIT_LIST_HEAD(reaplist);             << 
6468                                               << 
6469         spin_lock(&nn->client_lock);          << 
6470         list_for_each_safe(pos, next, &nn->cl << 
6471                 clp = list_entry(pos, struct  << 
6472                 if (clp->cl_state == NFSD4_AC << 
6473                         break;                << 
6474                 if (reapcnt >= maxreap)       << 
6475                         break;                << 
6476                 if (!mark_client_expired_lock << 
6477                         list_add(&clp->cl_lru << 
6478                         reapcnt++;            << 
6479                 }                                4816                 }
                                                   >> 4817                 list_add(&clp->cl_lru, &reaplist);
6480         }                                        4818         }
6481         spin_unlock(&nn->client_lock);           4819         spin_unlock(&nn->client_lock);
6482 }                                             !! 4820         list_for_each_safe(pos, next, &reaplist) {
6483                                               << 
6484 static void                                   << 
6485 nfs4_process_client_reaplist(struct list_head << 
6486 {                                             << 
6487         struct list_head *pos, *next;         << 
6488         struct nfs4_client *clp;              << 
6489                                               << 
6490         list_for_each_safe(pos, next, reaplis << 
6491                 clp = list_entry(pos, struct     4821                 clp = list_entry(pos, struct nfs4_client, cl_lru);
6492                 trace_nfsd_clid_purged(&clp-> !! 4822                 dprintk("NFSD: purging unused client (clientid %08x)\n",
                                                   >> 4823                         clp->cl_clientid.cl_id);
6493                 list_del_init(&clp->cl_lru);     4824                 list_del_init(&clp->cl_lru);
6494                 expire_client(clp);              4825                 expire_client(clp);
6495         }                                        4826         }
6496 }                                             << 
6497                                               << 
6498 static void nfs40_clean_admin_revoked(struct  << 
6499                                       struct  << 
6500 {                                             << 
6501         struct nfs4_client *clp;              << 
6502                                               << 
6503         spin_lock(&nn->client_lock);          << 
6504         if (nn->nfs40_last_revoke == 0 ||     << 
6505             nn->nfs40_last_revoke > lt->cutof << 
6506                 spin_unlock(&nn->client_lock) << 
6507                 return;                       << 
6508         }                                     << 
6509         nn->nfs40_last_revoke = 0;            << 
6510                                               << 
6511 retry:                                        << 
6512         list_for_each_entry(clp, &nn->client_ << 
6513                 unsigned long id, tmp;        << 
6514                 struct nfs4_stid *stid;       << 
6515                                               << 
6516                 if (atomic_read(&clp->cl_admi << 
6517                         continue;             << 
6518                                               << 
6519                 spin_lock(&clp->cl_lock);     << 
6520                 idr_for_each_entry_ul(&clp->c << 
6521                         if (stid->sc_status & << 
6522                                 refcount_inc( << 
6523                                 spin_unlock(& << 
6524                                 /* this funct << 
6525                                 nfsd4_drop_re << 
6526                                 nfs4_put_stid << 
6527                                 spin_lock(&nn << 
6528                                 goto retry;   << 
6529                         }                     << 
6530                 spin_unlock(&clp->cl_lock);   << 
6531         }                                     << 
6532         spin_unlock(&nn->client_lock);        << 
6533 }                                             << 
6534                                               << 
6535 static time64_t                               << 
6536 nfs4_laundromat(struct nfsd_net *nn)          << 
6537 {                                             << 
6538         struct nfs4_openowner *oo;            << 
6539         struct nfs4_delegation *dp;           << 
6540         struct nfs4_ol_stateid *stp;          << 
6541         struct nfsd4_blocked_lock *nbl;       << 
6542         struct list_head *pos, *next, reaplis << 
6543         struct laundry_time lt = {            << 
6544                 .cutoff = ktime_get_boottime_ << 
6545                 .new_timeo = nn->nfsd4_lease  << 
6546         };                                    << 
6547         struct nfs4_cpntf_state *cps;         << 
6548         copy_stateid_t *cps_t;                << 
6549         int i;                                << 
6550                                               << 
6551         if (clients_still_reclaiming(nn)) {   << 
6552                 lt.new_timeo = 0;             << 
6553                 goto out;                     << 
6554         }                                     << 
6555         nfsd4_end_grace(nn);                  << 
6556                                               << 
6557         spin_lock(&nn->s2s_cp_lock);          << 
6558         idr_for_each_entry(&nn->s2s_cp_statei << 
6559                 cps = container_of(cps_t, str << 
6560                 if (cps->cp_stateid.cs_type = << 
6561                                 state_expired << 
6562                         _free_cpntf_state_loc << 
6563         }                                     << 
6564         spin_unlock(&nn->s2s_cp_lock);        << 
6565         nfs4_get_client_reaplist(nn, &reaplis << 
6566         nfs4_process_client_reaplist(&reaplis << 
6567                                               << 
6568         nfs40_clean_admin_revoked(nn, &lt);   << 
6569                                               << 
6570         spin_lock(&state_lock);                  4827         spin_lock(&state_lock);
6571         list_for_each_safe(pos, next, &nn->de    4828         list_for_each_safe(pos, next, &nn->del_recall_lru) {
6572                 dp = list_entry (pos, struct     4829                 dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru);
6573                 if (!state_expired(&lt, dp->d !! 4830                 if (time_after((unsigned long)dp->dl_time, (unsigned long)cutoff)) {
                                                   >> 4831                         t = dp->dl_time - cutoff;
                                                   >> 4832                         new_timeo = min(new_timeo, t);
6574                         break;                   4833                         break;
6575                 refcount_inc(&dp->dl_stid.sc_ !! 4834                 }
6576                 unhash_delegation_locked(dp,  !! 4835                 WARN_ON(!unhash_delegation_locked(dp));
6577                 list_add(&dp->dl_recall_lru,     4836                 list_add(&dp->dl_recall_lru, &reaplist);
6578         }                                        4837         }
6579         spin_unlock(&state_lock);                4838         spin_unlock(&state_lock);
6580         while (!list_empty(&reaplist)) {         4839         while (!list_empty(&reaplist)) {
6581                 dp = list_first_entry(&reapli    4840                 dp = list_first_entry(&reaplist, struct nfs4_delegation,
6582                                         dl_re    4841                                         dl_recall_lru);
6583                 list_del_init(&dp->dl_recall_    4842                 list_del_init(&dp->dl_recall_lru);
6584                 revoke_delegation(dp);           4843                 revoke_delegation(dp);
6585         }                                        4844         }
6586                                                  4845 
6587         spin_lock(&nn->client_lock);             4846         spin_lock(&nn->client_lock);
6588         while (!list_empty(&nn->close_lru)) {    4847         while (!list_empty(&nn->close_lru)) {
6589                 oo = list_first_entry(&nn->cl    4848                 oo = list_first_entry(&nn->close_lru, struct nfs4_openowner,
6590                                         oo_cl    4849                                         oo_close_lru);
6591                 if (!state_expired(&lt, oo->o !! 4850                 if (time_after((unsigned long)oo->oo_time,
                                                   >> 4851                                (unsigned long)cutoff)) {
                                                   >> 4852                         t = oo->oo_time - cutoff;
                                                   >> 4853                         new_timeo = min(new_timeo, t);
6592                         break;                   4854                         break;
                                                   >> 4855                 }
6593                 list_del_init(&oo->oo_close_l    4856                 list_del_init(&oo->oo_close_lru);
6594                 stp = oo->oo_last_closed_stid    4857                 stp = oo->oo_last_closed_stid;
6595                 oo->oo_last_closed_stid = NUL    4858                 oo->oo_last_closed_stid = NULL;
6596                 spin_unlock(&nn->client_lock)    4859                 spin_unlock(&nn->client_lock);
6597                 nfs4_put_stid(&stp->st_stid);    4860                 nfs4_put_stid(&stp->st_stid);
6598                 spin_lock(&nn->client_lock);     4861                 spin_lock(&nn->client_lock);
6599         }                                        4862         }
6600         spin_unlock(&nn->client_lock);           4863         spin_unlock(&nn->client_lock);
6601                                                  4864 
6602         /*                                       4865         /*
6603          * It's possible for a client to try     4866          * It's possible for a client to try and acquire an already held lock
6604          * that is being held for a long time    4867          * that is being held for a long time, and then lose interest in it.
6605          * So, we clean out any un-revisited     4868          * So, we clean out any un-revisited request after a lease period
6606          * under the assumption that the clie    4869          * under the assumption that the client is no longer interested.
6607          *                                       4870          *
6608          * RFC5661, sec. 9.6 states that the     4871          * RFC5661, sec. 9.6 states that the client must not rely on getting
6609          * notifications and must continue to    4872          * notifications and must continue to poll for locks, even when the
6610          * server supports them. Thus this sh    4873          * server supports them. Thus this shouldn't lead to clients blocking
6611          * indefinitely once the lock does be    4874          * indefinitely once the lock does become free.
6612          */                                      4875          */
6613         BUG_ON(!list_empty(&reaplist));          4876         BUG_ON(!list_empty(&reaplist));
6614         spin_lock(&nn->blocked_locks_lock);      4877         spin_lock(&nn->blocked_locks_lock);
6615         while (!list_empty(&nn->blocked_locks    4878         while (!list_empty(&nn->blocked_locks_lru)) {
6616                 nbl = list_first_entry(&nn->b    4879                 nbl = list_first_entry(&nn->blocked_locks_lru,
6617                                         struc    4880                                         struct nfsd4_blocked_lock, nbl_lru);
6618                 if (!state_expired(&lt, nbl-> !! 4881                 if (time_after((unsigned long)nbl->nbl_time,
                                                   >> 4882                                (unsigned long)cutoff)) {
                                                   >> 4883                         t = nbl->nbl_time - cutoff;
                                                   >> 4884                         new_timeo = min(new_timeo, t);
6619                         break;                   4885                         break;
                                                   >> 4886                 }
6620                 list_move(&nbl->nbl_lru, &rea    4887                 list_move(&nbl->nbl_lru, &reaplist);
6621                 list_del_init(&nbl->nbl_list)    4888                 list_del_init(&nbl->nbl_list);
6622         }                                        4889         }
6623         spin_unlock(&nn->blocked_locks_lock);    4890         spin_unlock(&nn->blocked_locks_lock);
6624                                                  4891 
6625         while (!list_empty(&reaplist)) {         4892         while (!list_empty(&reaplist)) {
6626                 nbl = list_first_entry(&reapl    4893                 nbl = list_first_entry(&reaplist,
6627                                         struc    4894                                         struct nfsd4_blocked_lock, nbl_lru);
6628                 list_del_init(&nbl->nbl_lru);    4895                 list_del_init(&nbl->nbl_lru);
6629                 free_blocked_lock(nbl);          4896                 free_blocked_lock(nbl);
6630         }                                        4897         }
6631 #ifdef CONFIG_NFSD_V4_2_INTER_SSC             << 
6632         /* service the server-to-server copy  << 
6633         nfsd4_ssc_expire_umount(nn);          << 
6634 #endif                                        << 
6635         if (atomic_long_read(&num_delegations << 
6636                 deleg_reaper(nn);             << 
6637 out:                                             4898 out:
6638         return max_t(time64_t, lt.new_timeo,  !! 4899         new_timeo = max_t(time_t, new_timeo, NFSD_LAUNDROMAT_MINTIMEOUT);
                                                   >> 4900         return new_timeo;
6639 }                                                4901 }
6640                                                  4902 
                                                   >> 4903 static struct workqueue_struct *laundry_wq;
6641 static void laundromat_main(struct work_struc    4904 static void laundromat_main(struct work_struct *);
6642                                                  4905 
6643 static void                                      4906 static void
6644 laundromat_main(struct work_struct *laundry)     4907 laundromat_main(struct work_struct *laundry)
6645 {                                                4908 {
6646         time64_t t;                           !! 4909         time_t t;
6647         struct delayed_work *dwork = to_delay    4910         struct delayed_work *dwork = to_delayed_work(laundry);
6648         struct nfsd_net *nn = container_of(dw    4911         struct nfsd_net *nn = container_of(dwork, struct nfsd_net,
6649                                            la    4912                                            laundromat_work);
6650                                                  4913 
6651         t = nfs4_laundromat(nn);                 4914         t = nfs4_laundromat(nn);
                                                   >> 4915         dprintk("NFSD: laundromat_main - sleeping for %ld seconds\n", t);
6652         queue_delayed_work(laundry_wq, &nn->l    4916         queue_delayed_work(laundry_wq, &nn->laundromat_work, t*HZ);
6653 }                                                4917 }
6654                                                  4918 
6655 static void                                   !! 4919 static inline __be32 nfs4_check_fh(struct svc_fh *fhp, struct nfs4_stid *stp)
6656 courtesy_client_reaper(struct nfsd_net *nn)   << 
6657 {                                             << 
6658         struct list_head reaplist;            << 
6659                                               << 
6660         nfs4_get_courtesy_client_reaplist(nn, << 
6661         nfs4_process_client_reaplist(&reaplis << 
6662 }                                             << 
6663                                               << 
6664 static void                                   << 
6665 deleg_reaper(struct nfsd_net *nn)             << 
6666 {                                                4920 {
6667         struct list_head *pos, *next;         !! 4921         if (!fh_match(&fhp->fh_handle, &stp->sc_file->fi_fhandle))
6668         struct nfs4_client *clp;              !! 4922                 return nfserr_bad_stateid;
6669         LIST_HEAD(cblist);                    !! 4923         return nfs_ok;
6670                                               << 
6671         spin_lock(&nn->client_lock);          << 
6672         list_for_each_safe(pos, next, &nn->cl << 
6673                 clp = list_entry(pos, struct  << 
6674                 if (clp->cl_state != NFSD4_AC << 
6675                         list_empty(&clp->cl_d << 
6676                         atomic_read(&clp->cl_ << 
6677                         test_bit(NFSD4_CLIENT << 
6678                         (ktime_get_boottime_s << 
6679                                 clp->cl_ra_ti << 
6680                         continue;             << 
6681                 }                             << 
6682                 list_add(&clp->cl_ra_cblist,  << 
6683                                               << 
6684                 /* release in nfsd4_cb_recall << 
6685                 kref_get(&clp->cl_nfsdfs.cl_r << 
6686                 set_bit(NFSD4_CLIENT_CB_RECAL << 
6687                 clp->cl_ra_time = ktime_get_b << 
6688         }                                     << 
6689         spin_unlock(&nn->client_lock);        << 
6690                                               << 
6691         while (!list_empty(&cblist)) {        << 
6692                 clp = list_first_entry(&cblis << 
6693                                         cl_ra << 
6694                 list_del_init(&clp->cl_ra_cbl << 
6695                 clp->cl_ra->ra_keep = 0;      << 
6696                 clp->cl_ra->ra_bmval[0] = BIT << 
6697                                               << 
6698                 trace_nfsd_cb_recall_any(clp- << 
6699                 nfsd4_run_cb(&clp->cl_ra->ra_ << 
6700         }                                     << 
6701 }                                                4924 }
6702                                                  4925 
6703 static void                                   !! 4926 static inline int
6704 nfsd4_state_shrinker_worker(struct work_struc !! 4927 access_permit_read(struct nfs4_ol_stateid *stp)
6705 {                                                4928 {
6706         struct nfsd_net *nn = container_of(wo !! 4929         return test_access(NFS4_SHARE_ACCESS_READ, stp) ||
6707                                 nfsd_shrinker !! 4930                 test_access(NFS4_SHARE_ACCESS_BOTH, stp) ||
6708                                               !! 4931                 test_access(NFS4_SHARE_ACCESS_WRITE, stp);
6709         courtesy_client_reaper(nn);           << 
6710         deleg_reaper(nn);                     << 
6711 }                                                4932 }
6712                                                  4933 
6713 static inline __be32 nfs4_check_fh(struct svc !! 4934 static inline int
                                                   >> 4935 access_permit_write(struct nfs4_ol_stateid *stp)
6714 {                                                4936 {
6715         if (!fh_match(&fhp->fh_handle, &stp-> !! 4937         return test_access(NFS4_SHARE_ACCESS_WRITE, stp) ||
6716                 return nfserr_bad_stateid;    !! 4938                 test_access(NFS4_SHARE_ACCESS_BOTH, stp);
6717         return nfs_ok;                        << 
6718 }                                                4939 }
6719                                                  4940 
6720 static                                           4941 static
6721 __be32 nfs4_check_openmode(struct nfs4_ol_sta    4942 __be32 nfs4_check_openmode(struct nfs4_ol_stateid *stp, int flags)
6722 {                                                4943 {
6723         __be32 status = nfserr_openmode;         4944         __be32 status = nfserr_openmode;
6724                                                  4945 
6725         /* For lock stateid's, we test the pa    4946         /* For lock stateid's, we test the parent open, not the lock: */
6726         if (stp->st_openstp)                     4947         if (stp->st_openstp)
6727                 stp = stp->st_openstp;           4948                 stp = stp->st_openstp;
6728         if ((flags & WR_STATE) && !access_per    4949         if ((flags & WR_STATE) && !access_permit_write(stp))
6729                 goto out;                        4950                 goto out;
6730         if ((flags & RD_STATE) && !access_per    4951         if ((flags & RD_STATE) && !access_permit_read(stp))
6731                 goto out;                        4952                 goto out;
6732         status = nfs_ok;                         4953         status = nfs_ok;
6733 out:                                             4954 out:
6734         return status;                           4955         return status;
6735 }                                                4956 }
6736                                                  4957 
6737 static inline __be32                             4958 static inline __be32
6738 check_special_stateids(struct net *net, svc_f    4959 check_special_stateids(struct net *net, svc_fh *current_fh, stateid_t *stateid, int flags)
6739 {                                                4960 {
6740         if (ONE_STATEID(stateid) && (flags &     4961         if (ONE_STATEID(stateid) && (flags & RD_STATE))
6741                 return nfs_ok;                   4962                 return nfs_ok;
6742         else if (opens_in_grace(net)) {          4963         else if (opens_in_grace(net)) {
6743                 /* Answer in remaining cases     4964                 /* Answer in remaining cases depends on existence of
6744                  * conflicting state; so we m    4965                  * conflicting state; so we must wait out the grace period. */
6745                 return nfserr_grace;             4966                 return nfserr_grace;
6746         } else if (flags & WR_STATE)             4967         } else if (flags & WR_STATE)
6747                 return nfs4_share_conflict(cu    4968                 return nfs4_share_conflict(current_fh,
6748                                 NFS4_SHARE_DE    4969                                 NFS4_SHARE_DENY_WRITE);
6749         else /* (flags & RD_STATE) && ZERO_ST    4970         else /* (flags & RD_STATE) && ZERO_STATEID(stateid) */
6750                 return nfs4_share_conflict(cu    4971                 return nfs4_share_conflict(current_fh,
6751                                 NFS4_SHARE_DE    4972                                 NFS4_SHARE_DENY_READ);
6752 }                                                4973 }
6753                                                  4974 
                                                   >> 4975 /*
                                                   >> 4976  * Allow READ/WRITE during grace period on recovered state only for files
                                                   >> 4977  * that are not able to provide mandatory locking.
                                                   >> 4978  */
                                                   >> 4979 static inline int
                                                   >> 4980 grace_disallows_io(struct net *net, struct inode *inode)
                                                   >> 4981 {
                                                   >> 4982         return opens_in_grace(net) && mandatory_lock(inode);
                                                   >> 4983 }
                                                   >> 4984 
6754 static __be32 check_stateid_generation(statei    4985 static __be32 check_stateid_generation(stateid_t *in, stateid_t *ref, bool has_session)
6755 {                                                4986 {
6756         /*                                       4987         /*
6757          * When sessions are used the stateid    4988          * When sessions are used the stateid generation number is ignored
6758          * when it is zero.                      4989          * when it is zero.
6759          */                                      4990          */
6760         if (has_session && in->si_generation     4991         if (has_session && in->si_generation == 0)
6761                 return nfs_ok;                   4992                 return nfs_ok;
6762                                                  4993 
6763         if (in->si_generation == ref->si_gene    4994         if (in->si_generation == ref->si_generation)
6764                 return nfs_ok;                   4995                 return nfs_ok;
6765                                                  4996 
6766         /* If the client sends us a stateid f    4997         /* If the client sends us a stateid from the future, it's buggy: */
6767         if (nfsd4_stateid_generation_after(in    4998         if (nfsd4_stateid_generation_after(in, ref))
6768                 return nfserr_bad_stateid;       4999                 return nfserr_bad_stateid;
6769         /*                                       5000         /*
6770          * However, we could see a stateid fr    5001          * However, we could see a stateid from the past, even from a
6771          * non-buggy client.  For example, if    5002          * non-buggy client.  For example, if the client sends a lock
6772          * while some IO is outstanding, the     5003          * while some IO is outstanding, the lock may bump si_generation
6773          * while the IO is still in flight.      5004          * while the IO is still in flight.  The client could avoid that
6774          * situation by waiting for responses    5005          * situation by waiting for responses on all the IO requests,
6775          * but better performance may result     5006          * but better performance may result in retrying IO that
6776          * receives an old_stateid error if r    5007          * receives an old_stateid error if requests are rarely
6777          * reordered in flight:                  5008          * reordered in flight:
6778          */                                      5009          */
6779         return nfserr_old_stateid;               5010         return nfserr_old_stateid;
6780 }                                                5011 }
6781                                                  5012 
6782 static __be32 nfsd4_stid_check_stateid_genera    5013 static __be32 nfsd4_stid_check_stateid_generation(stateid_t *in, struct nfs4_stid *s, bool has_session)
6783 {                                                5014 {
6784         __be32 ret;                              5015         __be32 ret;
6785                                                  5016 
6786         spin_lock(&s->sc_lock);                  5017         spin_lock(&s->sc_lock);
6787         ret = nfsd4_verify_open_stid(s);         5018         ret = nfsd4_verify_open_stid(s);
6788         if (ret == nfs_ok)                       5019         if (ret == nfs_ok)
6789                 ret = check_stateid_generatio    5020                 ret = check_stateid_generation(in, &s->sc_stateid, has_session);
6790         spin_unlock(&s->sc_lock);                5021         spin_unlock(&s->sc_lock);
6791         if (ret == nfserr_admin_revoked)      << 
6792                 nfsd40_drop_revoked_stid(s->s << 
6793                                         &s->s << 
6794         return ret;                              5022         return ret;
6795 }                                                5023 }
6796                                                  5024 
6797 static __be32 nfsd4_check_openowner_confirmed    5025 static __be32 nfsd4_check_openowner_confirmed(struct nfs4_ol_stateid *ols)
6798 {                                                5026 {
6799         if (ols->st_stateowner->so_is_open_ow    5027         if (ols->st_stateowner->so_is_open_owner &&
6800             !(openowner(ols->st_stateowner)->    5028             !(openowner(ols->st_stateowner)->oo_flags & NFS4_OO_CONFIRMED))
6801                 return nfserr_bad_stateid;       5029                 return nfserr_bad_stateid;
6802         return nfs_ok;                           5030         return nfs_ok;
6803 }                                                5031 }
6804                                                  5032 
6805 static __be32 nfsd4_validate_stateid(struct n    5033 static __be32 nfsd4_validate_stateid(struct nfs4_client *cl, stateid_t *stateid)
6806 {                                                5034 {
6807         struct nfs4_stid *s;                     5035         struct nfs4_stid *s;
6808         __be32 status = nfserr_bad_stateid;      5036         __be32 status = nfserr_bad_stateid;
6809                                                  5037 
6810         if (ZERO_STATEID(stateid) || ONE_STAT    5038         if (ZERO_STATEID(stateid) || ONE_STATEID(stateid) ||
6811                 CLOSE_STATEID(stateid))          5039                 CLOSE_STATEID(stateid))
6812                 return status;                   5040                 return status;
                                                   >> 5041         /* Client debugging aid. */
                                                   >> 5042         if (!same_clid(&stateid->si_opaque.so_clid, &cl->cl_clientid)) {
                                                   >> 5043                 char addr_str[INET6_ADDRSTRLEN];
                                                   >> 5044                 rpc_ntop((struct sockaddr *)&cl->cl_addr, addr_str,
                                                   >> 5045                                  sizeof(addr_str));
                                                   >> 5046                 pr_warn_ratelimited("NFSD: client %s testing state ID "
                                                   >> 5047                                         "with incorrect client ID\n", addr_str);
                                                   >> 5048                 return status;
                                                   >> 5049         }
6813         spin_lock(&cl->cl_lock);                 5050         spin_lock(&cl->cl_lock);
6814         s = find_stateid_locked(cl, stateid);    5051         s = find_stateid_locked(cl, stateid);
6815         if (!s)                                  5052         if (!s)
6816                 goto out_unlock;                 5053                 goto out_unlock;
6817         status = nfsd4_stid_check_stateid_gen    5054         status = nfsd4_stid_check_stateid_generation(stateid, s, 1);
6818         if (status)                              5055         if (status)
6819                 goto out_unlock;                 5056                 goto out_unlock;
6820         status = nfsd4_verify_open_stid(s);   << 
6821         if (status)                           << 
6822                 goto out_unlock;              << 
6823                                               << 
6824         switch (s->sc_type) {                    5057         switch (s->sc_type) {
6825         case SC_TYPE_DELEG:                   !! 5058         case NFS4_DELEG_STID:
6826                 status = nfs_ok;                 5059                 status = nfs_ok;
6827                 break;                           5060                 break;
6828         case SC_TYPE_OPEN:                    !! 5061         case NFS4_REVOKED_DELEG_STID:
6829         case SC_TYPE_LOCK:                    !! 5062                 status = nfserr_deleg_revoked;
                                                   >> 5063                 break;
                                                   >> 5064         case NFS4_OPEN_STID:
                                                   >> 5065         case NFS4_LOCK_STID:
6830                 status = nfsd4_check_openowne    5066                 status = nfsd4_check_openowner_confirmed(openlockstateid(s));
6831                 break;                           5067                 break;
6832         default:                                 5068         default:
6833                 printk("unknown stateid type     5069                 printk("unknown stateid type %x\n", s->sc_type);
                                                   >> 5070                 /* Fallthrough */
                                                   >> 5071         case NFS4_CLOSED_STID:
                                                   >> 5072         case NFS4_CLOSED_DELEG_STID:
6834                 status = nfserr_bad_stateid;     5073                 status = nfserr_bad_stateid;
6835         }                                        5074         }
6836 out_unlock:                                      5075 out_unlock:
6837         spin_unlock(&cl->cl_lock);               5076         spin_unlock(&cl->cl_lock);
6838         if (status == nfserr_admin_revoked)   << 
6839                 nfsd40_drop_revoked_stid(cl,  << 
6840         return status;                           5077         return status;
6841 }                                                5078 }
6842                                                  5079 
6843 __be32                                           5080 __be32
6844 nfsd4_lookup_stateid(struct nfsd4_compound_st    5081 nfsd4_lookup_stateid(struct nfsd4_compound_state *cstate,
6845                      stateid_t *stateid,      !! 5082                      stateid_t *stateid, unsigned char typemask,
6846                      unsigned short typemask, << 
6847                      struct nfs4_stid **s, st    5083                      struct nfs4_stid **s, struct nfsd_net *nn)
6848 {                                                5084 {
6849         __be32 status;                           5085         __be32 status;
6850         struct nfs4_stid *stid;               << 
6851         bool return_revoked = false;             5086         bool return_revoked = false;
6852                                                  5087 
6853         /*                                       5088         /*
6854          *  only return revoked delegations i    5089          *  only return revoked delegations if explicitly asked.
6855          *  otherwise we report revoked or ba    5090          *  otherwise we report revoked or bad_stateid status.
6856          */                                      5091          */
6857         if (statusmask & SC_STATUS_REVOKED)   !! 5092         if (typemask & NFS4_REVOKED_DELEG_STID)
6858                 return_revoked = true;           5093                 return_revoked = true;
6859         if (typemask & SC_TYPE_DELEG)         !! 5094         else if (typemask & NFS4_DELEG_STID)
6860                 /* Always allow REVOKED for D !! 5095                 typemask |= NFS4_REVOKED_DELEG_STID;
6861                  * retturn the appropriate er << 
6862                  */                           << 
6863                 statusmask |= SC_STATUS_REVOK << 
6864                                               << 
6865         statusmask |= SC_STATUS_ADMIN_REVOKED << 
6866                                                  5096 
6867         if (ZERO_STATEID(stateid) || ONE_STAT    5097         if (ZERO_STATEID(stateid) || ONE_STATEID(stateid) ||
6868                 CLOSE_STATEID(stateid))          5098                 CLOSE_STATEID(stateid))
6869                 return nfserr_bad_stateid;       5099                 return nfserr_bad_stateid;
6870         status = set_client(&stateid->si_opaq !! 5100         status = lookup_clientid(&stateid->si_opaque.so_clid, cstate, nn);
6871         if (status == nfserr_stale_clientid)     5101         if (status == nfserr_stale_clientid) {
6872                 if (cstate->session)             5102                 if (cstate->session)
6873                         return nfserr_bad_sta    5103                         return nfserr_bad_stateid;
6874                 return nfserr_stale_stateid;     5104                 return nfserr_stale_stateid;
6875         }                                        5105         }
6876         if (status)                              5106         if (status)
6877                 return status;                   5107                 return status;
6878         stid = find_stateid_by_type(cstate->c !! 5108         *s = find_stateid_by_type(cstate->clp, stateid, typemask);
6879         if (!stid)                            !! 5109         if (!*s)
                                                   >> 5110                 return nfserr_bad_stateid;
                                                   >> 5111         if (((*s)->sc_type == NFS4_REVOKED_DELEG_STID) && !return_revoked) {
                                                   >> 5112                 nfs4_put_stid(*s);
                                                   >> 5113                 if (cstate->minorversion)
                                                   >> 5114                         return nfserr_deleg_revoked;
6880                 return nfserr_bad_stateid;       5115                 return nfserr_bad_stateid;
6881         if ((stid->sc_status & SC_STATUS_REVO << 
6882                 nfs4_put_stid(stid);          << 
6883                 return nfserr_deleg_revoked;  << 
6884         }                                     << 
6885         if (stid->sc_status & SC_STATUS_ADMIN << 
6886                 nfsd40_drop_revoked_stid(csta << 
6887                 nfs4_put_stid(stid);          << 
6888                 return nfserr_admin_revoked;  << 
6889         }                                        5116         }
6890         *s = stid;                            << 
6891         return nfs_ok;                           5117         return nfs_ok;
6892 }                                                5118 }
6893                                                  5119 
6894 static struct nfsd_file *                     !! 5120 static struct file *
6895 nfs4_find_file(struct nfs4_stid *s, int flags    5121 nfs4_find_file(struct nfs4_stid *s, int flags)
6896 {                                                5122 {
6897         struct nfsd_file *ret = NULL;         !! 5123         if (!s)
6898                                               << 
6899         if (!s || s->sc_status)               << 
6900                 return NULL;                     5124                 return NULL;
6901                                                  5125 
6902         switch (s->sc_type) {                    5126         switch (s->sc_type) {
6903         case SC_TYPE_DELEG:                   !! 5127         case NFS4_DELEG_STID:
6904                 spin_lock(&s->sc_file->fi_loc !! 5128                 if (WARN_ON_ONCE(!s->sc_file->fi_deleg_file))
6905                 ret = nfsd_file_get(s->sc_fil !! 5129                         return NULL;
6906                 spin_unlock(&s->sc_file->fi_l !! 5130                 return get_file(s->sc_file->fi_deleg_file);
6907                 break;                        !! 5131         case NFS4_OPEN_STID:
6908         case SC_TYPE_OPEN:                    !! 5132         case NFS4_LOCK_STID:
6909         case SC_TYPE_LOCK:                    << 
6910                 if (flags & RD_STATE)            5133                 if (flags & RD_STATE)
6911                         ret = find_readable_f !! 5134                         return find_readable_file(s->sc_file);
6912                 else                             5135                 else
6913                         ret = find_writeable_ !! 5136                         return find_writeable_file(s->sc_file);
                                                   >> 5137                 break;
6914         }                                        5138         }
6915                                                  5139 
6916         return ret;                           !! 5140         return NULL;
6917 }                                                5141 }
6918                                                  5142 
6919 static __be32                                    5143 static __be32
6920 nfs4_check_olstateid(struct nfs4_ol_stateid *    5144 nfs4_check_olstateid(struct nfs4_ol_stateid *ols, int flags)
6921 {                                                5145 {
6922         __be32 status;                           5146         __be32 status;
6923                                                  5147 
6924         status = nfsd4_check_openowner_confir    5148         status = nfsd4_check_openowner_confirmed(ols);
6925         if (status)                              5149         if (status)
6926                 return status;                   5150                 return status;
6927         return nfs4_check_openmode(ols, flags    5151         return nfs4_check_openmode(ols, flags);
6928 }                                                5152 }
6929                                                  5153 
6930 static __be32                                    5154 static __be32
6931 nfs4_check_file(struct svc_rqst *rqstp, struc    5155 nfs4_check_file(struct svc_rqst *rqstp, struct svc_fh *fhp, struct nfs4_stid *s,
6932                 struct nfsd_file **nfp, int f !! 5156                 struct file **filpp, bool *tmp_file, int flags)
6933 {                                                5157 {
6934         int acc = (flags & RD_STATE) ? NFSD_M    5158         int acc = (flags & RD_STATE) ? NFSD_MAY_READ : NFSD_MAY_WRITE;
6935         struct nfsd_file *nf;                 !! 5159         struct file *file;
6936         __be32 status;                           5160         __be32 status;
6937                                                  5161 
6938         nf = nfs4_find_file(s, flags);        !! 5162         file = nfs4_find_file(s, flags);
6939         if (nf) {                             !! 5163         if (file) {
6940                 status = nfsd_permission(&rqs !! 5164                 status = nfsd_permission(rqstp, fhp->fh_export, fhp->fh_dentry,
6941                                          fhp- << 
6942                                 acc | NFSD_MA    5165                                 acc | NFSD_MAY_OWNER_OVERRIDE);
6943                 if (status) {                    5166                 if (status) {
6944                         nfsd_file_put(nf);    !! 5167                         fput(file);
6945                         goto out;             !! 5168                         return status;
6946                 }                                5169                 }
                                                   >> 5170 
                                                   >> 5171                 *filpp = file;
6947         } else {                                 5172         } else {
6948                 status = nfsd_file_acquire(rq !! 5173                 status = nfsd_open(rqstp, fhp, S_IFREG, acc, filpp);
6949                 if (status)                      5174                 if (status)
6950                         return status;           5175                         return status;
6951         }                                     << 
6952         *nfp = nf;                            << 
6953 out:                                          << 
6954         return status;                        << 
6955 }                                             << 
6956 static void                                   << 
6957 _free_cpntf_state_locked(struct nfsd_net *nn, << 
6958 {                                             << 
6959         WARN_ON_ONCE(cps->cp_stateid.cs_type  << 
6960         if (!refcount_dec_and_test(&cps->cp_s << 
6961                 return;                       << 
6962         list_del(&cps->cp_list);              << 
6963         idr_remove(&nn->s2s_cp_stateids,      << 
6964                    cps->cp_stateid.cs_stid.si << 
6965         kfree(cps);                           << 
6966 }                                             << 
6967 /*                                            << 
6968  * A READ from an inter server to server COPY << 
6969  * copy stateid. Look up the copy notify stat << 
6970  * idr structure and take a reference on it.  << 
6971  */                                           << 
6972 __be32 manage_cpntf_state(struct nfsd_net *nn << 
6973                           struct nfs4_client  << 
6974                           struct nfs4_cpntf_s << 
6975 {                                             << 
6976         copy_stateid_t *cps_t;                << 
6977         struct nfs4_cpntf_state *state = NULL << 
6978                                                  5176 
6979         if (st->si_opaque.so_clid.cl_id != nn !! 5177                 if (tmp_file)
6980                 return nfserr_bad_stateid;    !! 5178                         *tmp_file = true;
6981         spin_lock(&nn->s2s_cp_lock);          << 
6982         cps_t = idr_find(&nn->s2s_cp_stateids << 
6983         if (cps_t) {                          << 
6984                 state = container_of(cps_t, s << 
6985                                      cp_state << 
6986                 if (state->cp_stateid.cs_type << 
6987                         state = NULL;         << 
6988                         goto unlock;          << 
6989                 }                             << 
6990                 if (!clp)                     << 
6991                         refcount_inc(&state-> << 
6992                 else                          << 
6993                         _free_cpntf_state_loc << 
6994         }                                        5179         }
6995 unlock:                                       << 
6996         spin_unlock(&nn->s2s_cp_lock);        << 
6997         if (!state)                           << 
6998                 return nfserr_bad_stateid;    << 
6999         if (!clp)                             << 
7000                 *cps = state;                 << 
7001         return 0;                             << 
7002 }                                             << 
7003                                               << 
7004 static __be32 find_cpntf_state(struct nfsd_ne << 
7005                                struct nfs4_st << 
7006 {                                             << 
7007         __be32 status;                        << 
7008         struct nfs4_cpntf_state *cps = NULL;  << 
7009         struct nfs4_client *found;            << 
7010                                               << 
7011         status = manage_cpntf_state(nn, st, N << 
7012         if (status)                           << 
7013                 return status;                << 
7014                                                  5180 
7015         cps->cpntf_time = ktime_get_boottime_ !! 5181         return 0;
7016                                               << 
7017         status = nfserr_expired;              << 
7018         found = lookup_clientid(&cps->cp_p_cl << 
7019         if (!found)                           << 
7020                 goto out;                     << 
7021                                               << 
7022         *stid = find_stateid_by_type(found, & << 
7023                                      SC_TYPE_ << 
7024                                      0);      << 
7025         if (*stid)                            << 
7026                 status = nfs_ok;              << 
7027         else                                  << 
7028                 status = nfserr_bad_stateid;  << 
7029                                               << 
7030         put_client_renew(found);              << 
7031 out:                                          << 
7032         nfs4_put_cpntf_state(nn, cps);        << 
7033         return status;                        << 
7034 }                                             << 
7035                                               << 
7036 void nfs4_put_cpntf_state(struct nfsd_net *nn << 
7037 {                                             << 
7038         spin_lock(&nn->s2s_cp_lock);          << 
7039         _free_cpntf_state_locked(nn, cps);    << 
7040         spin_unlock(&nn->s2s_cp_lock);        << 
7041 }                                                5182 }
7042                                                  5183 
7043 /**                                           !! 5184 /*
7044  * nfs4_preprocess_stateid_op - find and prep !! 5185  * Checks for stateid operations
7045  * @rqstp: incoming request from client       << 
7046  * @cstate: current compound state            << 
7047  * @fhp: filehandle associated with requested << 
7048  * @stateid: stateid (provided by client)     << 
7049  * @flags: flags describing type of operation << 
7050  * @nfp: optional nfsd_file return pointer (m << 
7051  * @cstid: optional returned nfs4_stid pointe << 
7052  *                                            << 
7053  * Given info from the client, look up a nfs4 << 
7054  * success, it returns a reference to the nfs << 
7055  * associated with it.                        << 
7056  */                                              5186  */
7057 __be32                                           5187 __be32
7058 nfs4_preprocess_stateid_op(struct svc_rqst *r    5188 nfs4_preprocess_stateid_op(struct svc_rqst *rqstp,
7059                 struct nfsd4_compound_state *    5189                 struct nfsd4_compound_state *cstate, struct svc_fh *fhp,
7060                 stateid_t *stateid, int flags !! 5190                 stateid_t *stateid, int flags, struct file **filpp, bool *tmp_file)
7061                 struct nfs4_stid **cstid)     << 
7062 {                                                5191 {
                                                   >> 5192         struct inode *ino = d_inode(fhp->fh_dentry);
7063         struct net *net = SVC_NET(rqstp);        5193         struct net *net = SVC_NET(rqstp);
7064         struct nfsd_net *nn = net_generic(net    5194         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
7065         struct nfs4_stid *s = NULL;              5195         struct nfs4_stid *s = NULL;
7066         __be32 status;                           5196         __be32 status;
7067                                                  5197 
7068         if (nfp)                              !! 5198         if (filpp)
7069                 *nfp = NULL;                  !! 5199                 *filpp = NULL;
                                                   >> 5200         if (tmp_file)
                                                   >> 5201                 *tmp_file = false;
                                                   >> 5202 
                                                   >> 5203         if (grace_disallows_io(net, ino))
                                                   >> 5204                 return nfserr_grace;
7070                                                  5205 
7071         if (ZERO_STATEID(stateid) || ONE_STAT    5206         if (ZERO_STATEID(stateid) || ONE_STATEID(stateid)) {
7072                 status = check_special_statei    5207                 status = check_special_stateids(net, fhp, stateid, flags);
7073                 goto done;                       5208                 goto done;
7074         }                                        5209         }
7075                                                  5210 
7076         status = nfsd4_lookup_stateid(cstate,    5211         status = nfsd4_lookup_stateid(cstate, stateid,
7077                                 SC_TYPE_DELEG !! 5212                                 NFS4_DELEG_STID|NFS4_OPEN_STID|NFS4_LOCK_STID,
7078                                 0, &s, nn);   !! 5213                                 &s, nn);
7079         if (status == nfserr_bad_stateid)     << 
7080                 status = find_cpntf_state(nn, << 
7081         if (status)                              5214         if (status)
7082                 return status;                   5215                 return status;
7083         status = nfsd4_stid_check_stateid_gen    5216         status = nfsd4_stid_check_stateid_generation(stateid, s,
7084                         nfsd4_has_session(cst    5217                         nfsd4_has_session(cstate));
7085         if (status)                              5218         if (status)
7086                 goto out;                        5219                 goto out;
7087                                                  5220 
7088         switch (s->sc_type) {                    5221         switch (s->sc_type) {
7089         case SC_TYPE_DELEG:                   !! 5222         case NFS4_DELEG_STID:
7090                 status = nfs4_check_delegmode    5223                 status = nfs4_check_delegmode(delegstateid(s), flags);
7091                 break;                           5224                 break;
7092         case SC_TYPE_OPEN:                    !! 5225         case NFS4_OPEN_STID:
7093         case SC_TYPE_LOCK:                    !! 5226         case NFS4_LOCK_STID:
7094                 status = nfs4_check_olstateid    5227                 status = nfs4_check_olstateid(openlockstateid(s), flags);
7095                 break;                           5228                 break;
                                                   >> 5229         default:
                                                   >> 5230                 status = nfserr_bad_stateid;
                                                   >> 5231                 break;
7096         }                                        5232         }
7097         if (status)                              5233         if (status)
7098                 goto out;                        5234                 goto out;
7099         status = nfs4_check_fh(fhp, s);          5235         status = nfs4_check_fh(fhp, s);
7100                                                  5236 
7101 done:                                            5237 done:
7102         if (status == nfs_ok && nfp)          !! 5238         if (!status && filpp)
7103                 status = nfs4_check_file(rqst !! 5239                 status = nfs4_check_file(rqstp, fhp, s, filpp, tmp_file, flags);
7104 out:                                             5240 out:
7105         if (s) {                              !! 5241         if (s)
7106                 if (!status && cstid)         !! 5242                 nfs4_put_stid(s);
7107                         *cstid = s;           << 
7108                 else                          << 
7109                         nfs4_put_stid(s);     << 
7110         }                                     << 
7111         return status;                           5243         return status;
7112 }                                                5244 }
7113                                                  5245 
7114 /*                                               5246 /*
7115  * Test if the stateid is valid                  5247  * Test if the stateid is valid
7116  */                                              5248  */
7117 __be32                                           5249 __be32
7118 nfsd4_test_stateid(struct svc_rqst *rqstp, st    5250 nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
7119                    union nfsd4_op_u *u)          5251                    union nfsd4_op_u *u)
7120 {                                                5252 {
7121         struct nfsd4_test_stateid *test_state    5253         struct nfsd4_test_stateid *test_stateid = &u->test_stateid;
7122         struct nfsd4_test_stateid_id *stateid    5254         struct nfsd4_test_stateid_id *stateid;
7123         struct nfs4_client *cl = cstate->clp; !! 5255         struct nfs4_client *cl = cstate->session->se_client;
7124                                                  5256 
7125         list_for_each_entry(stateid, &test_st    5257         list_for_each_entry(stateid, &test_stateid->ts_stateid_list, ts_id_list)
7126                 stateid->ts_id_status =          5258                 stateid->ts_id_status =
7127                         nfsd4_validate_statei    5259                         nfsd4_validate_stateid(cl, &stateid->ts_id_stateid);
7128                                                  5260 
7129         return nfs_ok;                           5261         return nfs_ok;
7130 }                                                5262 }
7131                                                  5263 
7132 static __be32                                    5264 static __be32
7133 nfsd4_free_lock_stateid(stateid_t *stateid, s    5265 nfsd4_free_lock_stateid(stateid_t *stateid, struct nfs4_stid *s)
7134 {                                                5266 {
7135         struct nfs4_ol_stateid *stp = openloc    5267         struct nfs4_ol_stateid *stp = openlockstateid(s);
7136         __be32 ret;                              5268         __be32 ret;
7137                                                  5269 
7138         ret = nfsd4_lock_ol_stateid(stp);        5270         ret = nfsd4_lock_ol_stateid(stp);
7139         if (ret)                                 5271         if (ret)
7140                 goto out_put_stid;               5272                 goto out_put_stid;
7141                                                  5273 
7142         ret = check_stateid_generation(statei    5274         ret = check_stateid_generation(stateid, &s->sc_stateid, 1);
7143         if (ret)                                 5275         if (ret)
7144                 goto out;                        5276                 goto out;
7145                                                  5277 
7146         ret = nfserr_locks_held;                 5278         ret = nfserr_locks_held;
7147         if (check_for_locks(stp->st_stid.sc_f    5279         if (check_for_locks(stp->st_stid.sc_file,
7148                             lockowner(stp->st    5280                             lockowner(stp->st_stateowner)))
7149                 goto out;                        5281                 goto out;
7150                                                  5282 
7151         release_lock_stateid(stp);               5283         release_lock_stateid(stp);
7152         ret = nfs_ok;                            5284         ret = nfs_ok;
7153                                                  5285 
7154 out:                                             5286 out:
7155         mutex_unlock(&stp->st_mutex);            5287         mutex_unlock(&stp->st_mutex);
7156 out_put_stid:                                    5288 out_put_stid:
7157         nfs4_put_stid(s);                        5289         nfs4_put_stid(s);
7158         return ret;                              5290         return ret;
7159 }                                                5291 }
7160                                                  5292 
7161 __be32                                           5293 __be32
7162 nfsd4_free_stateid(struct svc_rqst *rqstp, st    5294 nfsd4_free_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
7163                    union nfsd4_op_u *u)          5295                    union nfsd4_op_u *u)
7164 {                                                5296 {
7165         struct nfsd4_free_stateid *free_state    5297         struct nfsd4_free_stateid *free_stateid = &u->free_stateid;
7166         stateid_t *stateid = &free_stateid->f    5298         stateid_t *stateid = &free_stateid->fr_stateid;
7167         struct nfs4_stid *s;                     5299         struct nfs4_stid *s;
7168         struct nfs4_delegation *dp;              5300         struct nfs4_delegation *dp;
7169         struct nfs4_client *cl = cstate->clp; !! 5301         struct nfs4_client *cl = cstate->session->se_client;
7170         __be32 ret = nfserr_bad_stateid;         5302         __be32 ret = nfserr_bad_stateid;
7171                                                  5303 
7172         spin_lock(&cl->cl_lock);                 5304         spin_lock(&cl->cl_lock);
7173         s = find_stateid_locked(cl, stateid);    5305         s = find_stateid_locked(cl, stateid);
7174         if (!s || s->sc_status & SC_STATUS_CL !! 5306         if (!s)
7175                 goto out_unlock;                 5307                 goto out_unlock;
7176         if (s->sc_status & SC_STATUS_ADMIN_RE << 
7177                 nfsd4_drop_revoked_stid(s);   << 
7178                 ret = nfs_ok;                 << 
7179                 goto out;                     << 
7180         }                                     << 
7181         spin_lock(&s->sc_lock);                  5308         spin_lock(&s->sc_lock);
7182         switch (s->sc_type) {                    5309         switch (s->sc_type) {
7183         case SC_TYPE_DELEG:                   !! 5310         case NFS4_DELEG_STID:
7184                 if (s->sc_status & SC_STATUS_ << 
7185                         s->sc_status |= SC_ST << 
7186                         spin_unlock(&s->sc_lo << 
7187                         dp = delegstateid(s); << 
7188                         if (s->sc_status & SC << 
7189                                 list_del_init << 
7190                         s->sc_status |= SC_ST << 
7191                         spin_unlock(&cl->cl_l << 
7192                         nfs4_put_stid(s);     << 
7193                         ret = nfs_ok;         << 
7194                         goto out;             << 
7195                 }                             << 
7196                 ret = nfserr_locks_held;         5311                 ret = nfserr_locks_held;
7197                 break;                           5312                 break;
7198         case SC_TYPE_OPEN:                    !! 5313         case NFS4_OPEN_STID:
7199                 ret = check_stateid_generatio    5314                 ret = check_stateid_generation(stateid, &s->sc_stateid, 1);
7200                 if (ret)                         5315                 if (ret)
7201                         break;                   5316                         break;
7202                 ret = nfserr_locks_held;         5317                 ret = nfserr_locks_held;
7203                 break;                           5318                 break;
7204         case SC_TYPE_LOCK:                    !! 5319         case NFS4_LOCK_STID:
7205                 spin_unlock(&s->sc_lock);        5320                 spin_unlock(&s->sc_lock);
7206                 refcount_inc(&s->sc_count);      5321                 refcount_inc(&s->sc_count);
7207                 spin_unlock(&cl->cl_lock);       5322                 spin_unlock(&cl->cl_lock);
7208                 ret = nfsd4_free_lock_stateid    5323                 ret = nfsd4_free_lock_stateid(stateid, s);
7209                 goto out;                        5324                 goto out;
                                                   >> 5325         case NFS4_REVOKED_DELEG_STID:
                                                   >> 5326                 spin_unlock(&s->sc_lock);
                                                   >> 5327                 dp = delegstateid(s);
                                                   >> 5328                 list_del_init(&dp->dl_recall_lru);
                                                   >> 5329                 spin_unlock(&cl->cl_lock);
                                                   >> 5330                 nfs4_put_stid(s);
                                                   >> 5331                 ret = nfs_ok;
                                                   >> 5332                 goto out;
                                                   >> 5333         /* Default falls through and returns nfserr_bad_stateid */
7210         }                                        5334         }
7211         spin_unlock(&s->sc_lock);                5335         spin_unlock(&s->sc_lock);
7212 out_unlock:                                      5336 out_unlock:
7213         spin_unlock(&cl->cl_lock);               5337         spin_unlock(&cl->cl_lock);
7214 out:                                             5338 out:
7215         return ret;                              5339         return ret;
7216 }                                                5340 }
7217                                                  5341 
7218 static inline int                                5342 static inline int
7219 setlkflg (int type)                              5343 setlkflg (int type)
7220 {                                                5344 {
7221         return (type == NFS4_READW_LT || type    5345         return (type == NFS4_READW_LT || type == NFS4_READ_LT) ?
7222                 RD_STATE : WR_STATE;             5346                 RD_STATE : WR_STATE;
7223 }                                                5347 }
7224                                                  5348 
7225 static __be32 nfs4_seqid_op_checks(struct nfs    5349 static __be32 nfs4_seqid_op_checks(struct nfsd4_compound_state *cstate, stateid_t *stateid, u32 seqid, struct nfs4_ol_stateid *stp)
7226 {                                                5350 {
7227         struct svc_fh *current_fh = &cstate->    5351         struct svc_fh *current_fh = &cstate->current_fh;
7228         struct nfs4_stateowner *sop = stp->st    5352         struct nfs4_stateowner *sop = stp->st_stateowner;
7229         __be32 status;                           5353         __be32 status;
7230                                                  5354 
7231         status = nfsd4_check_seqid(cstate, so    5355         status = nfsd4_check_seqid(cstate, sop, seqid);
7232         if (status)                              5356         if (status)
7233                 return status;                   5357                 return status;
7234         status = nfsd4_lock_ol_stateid(stp);     5358         status = nfsd4_lock_ol_stateid(stp);
7235         if (status != nfs_ok)                    5359         if (status != nfs_ok)
7236                 return status;                   5360                 return status;
7237         status = check_stateid_generation(sta    5361         status = check_stateid_generation(stateid, &stp->st_stid.sc_stateid, nfsd4_has_session(cstate));
7238         if (status == nfs_ok)                    5362         if (status == nfs_ok)
7239                 status = nfs4_check_fh(curren    5363                 status = nfs4_check_fh(current_fh, &stp->st_stid);
7240         if (status != nfs_ok)                    5364         if (status != nfs_ok)
7241                 mutex_unlock(&stp->st_mutex);    5365                 mutex_unlock(&stp->st_mutex);
7242         return status;                           5366         return status;
7243 }                                                5367 }
7244                                                  5368 
7245 /**                                           !! 5369 /* 
7246  * nfs4_preprocess_seqid_op - find and prep a !! 5370  * Checks for sequence id mutating operations. 
7247  * @cstate: compund state                     << 
7248  * @seqid: seqid (provided by client)         << 
7249  * @stateid: stateid (provided by client)     << 
7250  * @typemask: mask of allowable types for thi << 
7251  * @statusmask: mask of allowed states: 0 or  << 
7252  * @stpp: return pointer for the stateid foun << 
7253  * @nn: net namespace for request             << 
7254  *                                            << 
7255  * Given a stateid+seqid from a client, look  << 
7256  * return it in @stpp. On a nfs_ok return, th << 
7257  * have its st_mutex locked.                  << 
7258  */                                              5371  */
7259 static __be32                                    5372 static __be32
7260 nfs4_preprocess_seqid_op(struct nfsd4_compoun    5373 nfs4_preprocess_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid,
7261                          stateid_t *stateid,  !! 5374                          stateid_t *stateid, char typemask,
7262                          unsigned short typem << 
7263                          struct nfs4_ol_state    5375                          struct nfs4_ol_stateid **stpp,
7264                          struct nfsd_net *nn)    5376                          struct nfsd_net *nn)
7265 {                                                5377 {
7266         __be32 status;                           5378         __be32 status;
7267         struct nfs4_stid *s;                     5379         struct nfs4_stid *s;
7268         struct nfs4_ol_stateid *stp = NULL;      5380         struct nfs4_ol_stateid *stp = NULL;
7269                                                  5381 
7270         trace_nfsd_preprocess(seqid, stateid) !! 5382         dprintk("NFSD: %s: seqid=%d stateid = " STATEID_FMT "\n", __func__,
                                                   >> 5383                 seqid, STATEID_VAL(stateid));
7271                                                  5384 
7272         *stpp = NULL;                            5385         *stpp = NULL;
7273 retry:                                        !! 5386         status = nfsd4_lookup_stateid(cstate, stateid, typemask, &s, nn);
7274         status = nfsd4_lookup_stateid(cstate, << 
7275                                       typemas << 
7276         if (status)                              5387         if (status)
7277                 return status;                   5388                 return status;
7278         stp = openlockstateid(s);                5389         stp = openlockstateid(s);
7279         if (nfsd4_cstate_assign_replay(cstate !! 5390         nfsd4_cstate_assign_replay(cstate, stp->st_stateowner);
7280                 nfs4_put_stateowner(stp->st_s << 
7281                 goto retry;                   << 
7282         }                                     << 
7283                                                  5391 
7284         status = nfs4_seqid_op_checks(cstate,    5392         status = nfs4_seqid_op_checks(cstate, stateid, seqid, stp);
7285         if (!status)                             5393         if (!status)
7286                 *stpp = stp;                     5394                 *stpp = stp;
7287         else                                     5395         else
7288                 nfs4_put_stid(&stp->st_stid);    5396                 nfs4_put_stid(&stp->st_stid);
7289         return status;                           5397         return status;
7290 }                                                5398 }
7291                                                  5399 
7292 static __be32 nfs4_preprocess_confirmed_seqid    5400 static __be32 nfs4_preprocess_confirmed_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid,
7293                                                  5401                                                  stateid_t *stateid, struct nfs4_ol_stateid **stpp, struct nfsd_net *nn)
7294 {                                                5402 {
7295         __be32 status;                           5403         __be32 status;
7296         struct nfs4_openowner *oo;               5404         struct nfs4_openowner *oo;
7297         struct nfs4_ol_stateid *stp;             5405         struct nfs4_ol_stateid *stp;
7298                                                  5406 
7299         status = nfs4_preprocess_seqid_op(cst    5407         status = nfs4_preprocess_seqid_op(cstate, seqid, stateid,
7300                                           SC_ !! 5408                                                 NFS4_OPEN_STID, &stp, nn);
7301         if (status)                              5409         if (status)
7302                 return status;                   5410                 return status;
7303         oo = openowner(stp->st_stateowner);      5411         oo = openowner(stp->st_stateowner);
7304         if (!(oo->oo_flags & NFS4_OO_CONFIRME    5412         if (!(oo->oo_flags & NFS4_OO_CONFIRMED)) {
7305                 mutex_unlock(&stp->st_mutex);    5413                 mutex_unlock(&stp->st_mutex);
7306                 nfs4_put_stid(&stp->st_stid);    5414                 nfs4_put_stid(&stp->st_stid);
7307                 return nfserr_bad_stateid;       5415                 return nfserr_bad_stateid;
7308         }                                        5416         }
7309         *stpp = stp;                             5417         *stpp = stp;
7310         return nfs_ok;                           5418         return nfs_ok;
7311 }                                                5419 }
7312                                                  5420 
7313 __be32                                           5421 __be32
7314 nfsd4_open_confirm(struct svc_rqst *rqstp, st    5422 nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
7315                    union nfsd4_op_u *u)          5423                    union nfsd4_op_u *u)
7316 {                                                5424 {
7317         struct nfsd4_open_confirm *oc = &u->o    5425         struct nfsd4_open_confirm *oc = &u->open_confirm;
7318         __be32 status;                           5426         __be32 status;
7319         struct nfs4_openowner *oo;               5427         struct nfs4_openowner *oo;
7320         struct nfs4_ol_stateid *stp;             5428         struct nfs4_ol_stateid *stp;
7321         struct nfsd_net *nn = net_generic(SVC    5429         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
7322                                                  5430 
7323         dprintk("NFSD: nfsd4_open_confirm on     5431         dprintk("NFSD: nfsd4_open_confirm on file %pd\n",
7324                         cstate->current_fh.fh    5432                         cstate->current_fh.fh_dentry);
7325                                                  5433 
7326         status = fh_verify(rqstp, &cstate->cu    5434         status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0);
7327         if (status)                              5435         if (status)
7328                 return status;                   5436                 return status;
7329                                                  5437 
7330         status = nfs4_preprocess_seqid_op(cst    5438         status = nfs4_preprocess_seqid_op(cstate,
7331                                           oc- !! 5439                                         oc->oc_seqid, &oc->oc_req_stateid,
7332                                           SC_ !! 5440                                         NFS4_OPEN_STID, &stp, nn);
7333         if (status)                              5441         if (status)
7334                 goto out;                        5442                 goto out;
7335         oo = openowner(stp->st_stateowner);      5443         oo = openowner(stp->st_stateowner);
7336         status = nfserr_bad_stateid;             5444         status = nfserr_bad_stateid;
7337         if (oo->oo_flags & NFS4_OO_CONFIRMED)    5445         if (oo->oo_flags & NFS4_OO_CONFIRMED) {
7338                 mutex_unlock(&stp->st_mutex);    5446                 mutex_unlock(&stp->st_mutex);
7339                 goto put_stateid;                5447                 goto put_stateid;
7340         }                                        5448         }
7341         oo->oo_flags |= NFS4_OO_CONFIRMED;       5449         oo->oo_flags |= NFS4_OO_CONFIRMED;
7342         nfs4_inc_and_copy_stateid(&oc->oc_res    5450         nfs4_inc_and_copy_stateid(&oc->oc_resp_stateid, &stp->st_stid);
7343         mutex_unlock(&stp->st_mutex);            5451         mutex_unlock(&stp->st_mutex);
7344         trace_nfsd_open_confirm(oc->oc_seqid, !! 5452         dprintk("NFSD: %s: success, seqid=%d stateid=" STATEID_FMT "\n",
                                                   >> 5453                 __func__, oc->oc_seqid, STATEID_VAL(&stp->st_stid.sc_stateid));
                                                   >> 5454 
7345         nfsd4_client_record_create(oo->oo_own    5455         nfsd4_client_record_create(oo->oo_owner.so_client);
7346         status = nfs_ok;                         5456         status = nfs_ok;
7347 put_stateid:                                     5457 put_stateid:
7348         nfs4_put_stid(&stp->st_stid);            5458         nfs4_put_stid(&stp->st_stid);
7349 out:                                             5459 out:
7350         nfsd4_bump_seqid(cstate, status);        5460         nfsd4_bump_seqid(cstate, status);
7351         return status;                           5461         return status;
7352 }                                                5462 }
7353                                                  5463 
7354 static inline void nfs4_stateid_downgrade_bit    5464 static inline void nfs4_stateid_downgrade_bit(struct nfs4_ol_stateid *stp, u32 access)
7355 {                                                5465 {
7356         if (!test_access(access, stp))           5466         if (!test_access(access, stp))
7357                 return;                          5467                 return;
7358         nfs4_file_put_access(stp->st_stid.sc_    5468         nfs4_file_put_access(stp->st_stid.sc_file, access);
7359         clear_access(access, stp);               5469         clear_access(access, stp);
7360 }                                                5470 }
7361                                                  5471 
7362 static inline void nfs4_stateid_downgrade(str    5472 static inline void nfs4_stateid_downgrade(struct nfs4_ol_stateid *stp, u32 to_access)
7363 {                                                5473 {
7364         switch (to_access) {                     5474         switch (to_access) {
7365         case NFS4_SHARE_ACCESS_READ:             5475         case NFS4_SHARE_ACCESS_READ:
7366                 nfs4_stateid_downgrade_bit(st    5476                 nfs4_stateid_downgrade_bit(stp, NFS4_SHARE_ACCESS_WRITE);
7367                 nfs4_stateid_downgrade_bit(st    5477                 nfs4_stateid_downgrade_bit(stp, NFS4_SHARE_ACCESS_BOTH);
7368                 break;                           5478                 break;
7369         case NFS4_SHARE_ACCESS_WRITE:            5479         case NFS4_SHARE_ACCESS_WRITE:
7370                 nfs4_stateid_downgrade_bit(st    5480                 nfs4_stateid_downgrade_bit(stp, NFS4_SHARE_ACCESS_READ);
7371                 nfs4_stateid_downgrade_bit(st    5481                 nfs4_stateid_downgrade_bit(stp, NFS4_SHARE_ACCESS_BOTH);
7372                 break;                           5482                 break;
7373         case NFS4_SHARE_ACCESS_BOTH:             5483         case NFS4_SHARE_ACCESS_BOTH:
7374                 break;                           5484                 break;
7375         default:                                 5485         default:
7376                 WARN_ON_ONCE(1);                 5486                 WARN_ON_ONCE(1);
7377         }                                        5487         }
7378 }                                                5488 }
7379                                                  5489 
7380 __be32                                           5490 __be32
7381 nfsd4_open_downgrade(struct svc_rqst *rqstp,     5491 nfsd4_open_downgrade(struct svc_rqst *rqstp,
7382                      struct nfsd4_compound_st    5492                      struct nfsd4_compound_state *cstate, union nfsd4_op_u *u)
7383 {                                                5493 {
7384         struct nfsd4_open_downgrade *od = &u-    5494         struct nfsd4_open_downgrade *od = &u->open_downgrade;
7385         __be32 status;                           5495         __be32 status;
7386         struct nfs4_ol_stateid *stp;             5496         struct nfs4_ol_stateid *stp;
7387         struct nfsd_net *nn = net_generic(SVC    5497         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
7388                                                  5498 
7389         dprintk("NFSD: nfsd4_open_downgrade o    5499         dprintk("NFSD: nfsd4_open_downgrade on file %pd\n", 
7390                         cstate->current_fh.fh    5500                         cstate->current_fh.fh_dentry);
7391                                                  5501 
7392         /* We don't yet support WANT bits: */    5502         /* We don't yet support WANT bits: */
7393         if (od->od_deleg_want)                   5503         if (od->od_deleg_want)
7394                 dprintk("NFSD: %s: od_deleg_w    5504                 dprintk("NFSD: %s: od_deleg_want=0x%x ignored\n", __func__,
7395                         od->od_deleg_want);      5505                         od->od_deleg_want);
7396                                                  5506 
7397         status = nfs4_preprocess_confirmed_se    5507         status = nfs4_preprocess_confirmed_seqid_op(cstate, od->od_seqid,
7398                                         &od->    5508                                         &od->od_stateid, &stp, nn);
7399         if (status)                              5509         if (status)
7400                 goto out;                        5510                 goto out; 
7401         status = nfserr_inval;                   5511         status = nfserr_inval;
7402         if (!test_access(od->od_share_access,    5512         if (!test_access(od->od_share_access, stp)) {
7403                 dprintk("NFSD: access not a s    5513                 dprintk("NFSD: access not a subset of current bitmap: 0x%hhx, input access=%08x\n",
7404                         stp->st_access_bmap,     5514                         stp->st_access_bmap, od->od_share_access);
7405                 goto put_stateid;                5515                 goto put_stateid;
7406         }                                        5516         }
7407         if (!test_deny(od->od_share_deny, stp    5517         if (!test_deny(od->od_share_deny, stp)) {
7408                 dprintk("NFSD: deny not a sub    5518                 dprintk("NFSD: deny not a subset of current bitmap: 0x%hhx, input deny=%08x\n",
7409                         stp->st_deny_bmap, od    5519                         stp->st_deny_bmap, od->od_share_deny);
7410                 goto put_stateid;                5520                 goto put_stateid;
7411         }                                        5521         }
7412         nfs4_stateid_downgrade(stp, od->od_sh    5522         nfs4_stateid_downgrade(stp, od->od_share_access);
7413         reset_union_bmap_deny(od->od_share_de    5523         reset_union_bmap_deny(od->od_share_deny, stp);
7414         nfs4_inc_and_copy_stateid(&od->od_sta    5524         nfs4_inc_and_copy_stateid(&od->od_stateid, &stp->st_stid);
7415         status = nfs_ok;                         5525         status = nfs_ok;
7416 put_stateid:                                     5526 put_stateid:
7417         mutex_unlock(&stp->st_mutex);            5527         mutex_unlock(&stp->st_mutex);
7418         nfs4_put_stid(&stp->st_stid);            5528         nfs4_put_stid(&stp->st_stid);
7419 out:                                             5529 out:
7420         nfsd4_bump_seqid(cstate, status);        5530         nfsd4_bump_seqid(cstate, status);
7421         return status;                           5531         return status;
7422 }                                                5532 }
7423                                                  5533 
7424 static bool nfsd4_close_open_stateid(struct n !! 5534 static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s)
7425 {                                                5535 {
7426         struct nfs4_client *clp = s->st_stid.    5536         struct nfs4_client *clp = s->st_stid.sc_client;
7427         bool unhashed;                           5537         bool unhashed;
7428         LIST_HEAD(reaplist);                     5538         LIST_HEAD(reaplist);
7429         struct nfs4_ol_stateid *stp;          << 
7430                                                  5539 
7431         spin_lock(&clp->cl_lock);                5540         spin_lock(&clp->cl_lock);
7432         unhashed = unhash_open_stateid(s, &re    5541         unhashed = unhash_open_stateid(s, &reaplist);
7433                                                  5542 
7434         if (clp->cl_minorversion) {              5543         if (clp->cl_minorversion) {
7435                 if (unhashed)                    5544                 if (unhashed)
7436                         put_ol_stateid_locked    5545                         put_ol_stateid_locked(s, &reaplist);
7437                 spin_unlock(&clp->cl_lock);      5546                 spin_unlock(&clp->cl_lock);
7438                 list_for_each_entry(stp, &rea << 
7439                         nfs4_free_cpntf_state << 
7440                 free_ol_stateid_reaplist(&rea    5547                 free_ol_stateid_reaplist(&reaplist);
7441                 return false;                 << 
7442         } else {                                 5548         } else {
7443                 spin_unlock(&clp->cl_lock);      5549                 spin_unlock(&clp->cl_lock);
7444                 free_ol_stateid_reaplist(&rea    5550                 free_ol_stateid_reaplist(&reaplist);
7445                 return unhashed;              !! 5551                 if (unhashed)
                                                   >> 5552                         move_to_close_lru(s, clp->net);
7446         }                                        5553         }
7447 }                                                5554 }
7448                                                  5555 
7449 /*                                               5556 /*
7450  * nfs4_unlock_state() called after encode       5557  * nfs4_unlock_state() called after encode
7451  */                                              5558  */
7452 __be32                                           5559 __be32
7453 nfsd4_close(struct svc_rqst *rqstp, struct nf    5560 nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
7454                 union nfsd4_op_u *u)             5561                 union nfsd4_op_u *u)
7455 {                                                5562 {
7456         struct nfsd4_close *close = &u->close    5563         struct nfsd4_close *close = &u->close;
7457         __be32 status;                           5564         __be32 status;
7458         struct nfs4_ol_stateid *stp;             5565         struct nfs4_ol_stateid *stp;
7459         struct net *net = SVC_NET(rqstp);        5566         struct net *net = SVC_NET(rqstp);
7460         struct nfsd_net *nn = net_generic(net    5567         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
7461         bool need_move_to_close_list;         << 
7462                                                  5568 
7463         dprintk("NFSD: nfsd4_close on file %p !! 5569         dprintk("NFSD: nfsd4_close on file %pd\n", 
7464                         cstate->current_fh.fh    5570                         cstate->current_fh.fh_dentry);
7465                                                  5571 
7466         status = nfs4_preprocess_seqid_op(cst    5572         status = nfs4_preprocess_seqid_op(cstate, close->cl_seqid,
7467                                           &cl !! 5573                                         &close->cl_stateid,
7468                                           SC_ !! 5574                                         NFS4_OPEN_STID|NFS4_CLOSED_STID,
7469                                           &st !! 5575                                         &stp, nn);
7470         nfsd4_bump_seqid(cstate, status);        5576         nfsd4_bump_seqid(cstate, status);
7471         if (status)                              5577         if (status)
7472                 goto out;                     !! 5578                 goto out; 
7473                                                  5579 
7474         spin_lock(&stp->st_stid.sc_client->cl !! 5580         stp->st_stid.sc_type = NFS4_CLOSED_STID;
7475         stp->st_stid.sc_status |= SC_STATUS_C << 
7476         spin_unlock(&stp->st_stid.sc_client-> << 
7477                                                  5581 
7478         /*                                       5582         /*
7479          * Technically we don't _really_ have    5583          * Technically we don't _really_ have to increment or copy it, since
7480          * it should just be gone after this     5584          * it should just be gone after this operation and we clobber the
7481          * copied value below, but we continu    5585          * copied value below, but we continue to do so here just to ensure
7482          * that racing ops see that there was    5586          * that racing ops see that there was a state change.
7483          */                                      5587          */
7484         nfs4_inc_and_copy_stateid(&close->cl_    5588         nfs4_inc_and_copy_stateid(&close->cl_stateid, &stp->st_stid);
7485                                                  5589 
7486         need_move_to_close_list = nfsd4_close !! 5590         nfsd4_close_open_stateid(stp);
7487         mutex_unlock(&stp->st_mutex);            5591         mutex_unlock(&stp->st_mutex);
7488         if (need_move_to_close_list)          << 
7489                 move_to_close_lru(stp, net);  << 
7490                                                  5592 
7491         /* v4.1+ suggests that we send a spec    5593         /* v4.1+ suggests that we send a special stateid in here, since the
7492          * clients should just ignore this an    5594          * clients should just ignore this anyway. Since this is not useful
7493          * for v4.0 clients either, we set it    5595          * for v4.0 clients either, we set it to the special close_stateid
7494          * universally.                          5596          * universally.
7495          *                                       5597          *
7496          * See RFC5661 section 18.2.4, and RF    5598          * See RFC5661 section 18.2.4, and RFC7530 section 16.2.5
7497          */                                      5599          */
7498         memcpy(&close->cl_stateid, &close_sta    5600         memcpy(&close->cl_stateid, &close_stateid, sizeof(close->cl_stateid));
7499                                                  5601 
7500         /* put reference from nfs4_preprocess    5602         /* put reference from nfs4_preprocess_seqid_op */
7501         nfs4_put_stid(&stp->st_stid);            5603         nfs4_put_stid(&stp->st_stid);
7502 out:                                             5604 out:
7503         return status;                           5605         return status;
7504 }                                                5606 }
7505                                                  5607 
7506 __be32                                           5608 __be32
7507 nfsd4_delegreturn(struct svc_rqst *rqstp, str    5609 nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
7508                   union nfsd4_op_u *u)           5610                   union nfsd4_op_u *u)
7509 {                                                5611 {
7510         struct nfsd4_delegreturn *dr = &u->de    5612         struct nfsd4_delegreturn *dr = &u->delegreturn;
7511         struct nfs4_delegation *dp;              5613         struct nfs4_delegation *dp;
7512         stateid_t *stateid = &dr->dr_stateid;    5614         stateid_t *stateid = &dr->dr_stateid;
7513         struct nfs4_stid *s;                     5615         struct nfs4_stid *s;
7514         __be32 status;                           5616         __be32 status;
7515         struct nfsd_net *nn = net_generic(SVC    5617         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
7516                                                  5618 
7517         if ((status = fh_verify(rqstp, &cstat    5619         if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0)))
7518                 return status;                   5620                 return status;
7519                                                  5621 
7520         status = nfsd4_lookup_stateid(cstate, !! 5622         status = nfsd4_lookup_stateid(cstate, stateid, NFS4_DELEG_STID, &s, nn);
7521                                       SC_STAT << 
7522                                       &s, nn) << 
7523         if (status)                              5623         if (status)
7524                 goto out;                        5624                 goto out;
7525         dp = delegstateid(s);                    5625         dp = delegstateid(s);
7526         status = nfsd4_stid_check_stateid_gen    5626         status = nfsd4_stid_check_stateid_generation(stateid, &dp->dl_stid, nfsd4_has_session(cstate));
7527         if (status)                              5627         if (status)
7528                 goto put_stateid;                5628                 goto put_stateid;
7529                                                  5629 
7530         trace_nfsd_deleg_return(stateid);     << 
7531         destroy_delegation(dp);                  5630         destroy_delegation(dp);
7532         smp_mb__after_atomic();               << 
7533         wake_up_var(d_inode(cstate->current_f << 
7534 put_stateid:                                     5631 put_stateid:
7535         nfs4_put_stid(&dp->dl_stid);             5632         nfs4_put_stid(&dp->dl_stid);
7536 out:                                             5633 out:
7537         return status;                           5634         return status;
7538 }                                                5635 }
7539                                                  5636 
                                                   >> 5637 static inline u64
                                                   >> 5638 end_offset(u64 start, u64 len)
                                                   >> 5639 {
                                                   >> 5640         u64 end;
                                                   >> 5641 
                                                   >> 5642         end = start + len;
                                                   >> 5643         return end >= start ? end: NFS4_MAX_UINT64;
                                                   >> 5644 }
                                                   >> 5645 
7540 /* last octet in a range */                      5646 /* last octet in a range */
7541 static inline u64                                5647 static inline u64
7542 last_byte_offset(u64 start, u64 len)             5648 last_byte_offset(u64 start, u64 len)
7543 {                                                5649 {
7544         u64 end;                                 5650         u64 end;
7545                                                  5651 
7546         WARN_ON_ONCE(!len);                      5652         WARN_ON_ONCE(!len);
7547         end = start + len;                       5653         end = start + len;
7548         return end > start ? end - 1: NFS4_MA    5654         return end > start ? end - 1: NFS4_MAX_UINT64;
7549 }                                                5655 }
7550                                                  5656 
7551 /*                                               5657 /*
7552  * TODO: Linux file offsets are _signed_ 64-b    5658  * TODO: Linux file offsets are _signed_ 64-bit quantities, which means that
7553  * we can't properly handle lock requests tha    5659  * we can't properly handle lock requests that go beyond the (2^63 - 1)-th
7554  * byte, because of sign extension problems.     5660  * byte, because of sign extension problems.  Since NFSv4 calls for 64-bit
7555  * locking, this prevents us from being compl    5661  * locking, this prevents us from being completely protocol-compliant.  The
7556  * real solution to this problem is to start     5662  * real solution to this problem is to start using unsigned file offsets in
7557  * the VFS, but this is a very deep change!      5663  * the VFS, but this is a very deep change!
7558  */                                              5664  */
7559 static inline void                               5665 static inline void
7560 nfs4_transform_lock_offset(struct file_lock *    5666 nfs4_transform_lock_offset(struct file_lock *lock)
7561 {                                                5667 {
7562         if (lock->fl_start < 0)                  5668         if (lock->fl_start < 0)
7563                 lock->fl_start = OFFSET_MAX;     5669                 lock->fl_start = OFFSET_MAX;
7564         if (lock->fl_end < 0)                    5670         if (lock->fl_end < 0)
7565                 lock->fl_end = OFFSET_MAX;       5671                 lock->fl_end = OFFSET_MAX;
7566 }                                                5672 }
7567                                                  5673 
7568 static fl_owner_t                                5674 static fl_owner_t
7569 nfsd4_lm_get_owner(fl_owner_t owner)          !! 5675 nfsd4_fl_get_owner(fl_owner_t owner)
7570 {                                                5676 {
7571         struct nfs4_lockowner *lo = (struct n    5677         struct nfs4_lockowner *lo = (struct nfs4_lockowner *)owner;
7572                                                  5678 
7573         nfs4_get_stateowner(&lo->lo_owner);      5679         nfs4_get_stateowner(&lo->lo_owner);
7574         return owner;                            5680         return owner;
7575 }                                                5681 }
7576                                                  5682 
7577 static void                                      5683 static void
7578 nfsd4_lm_put_owner(fl_owner_t owner)          !! 5684 nfsd4_fl_put_owner(fl_owner_t owner)
7579 {                                                5685 {
7580         struct nfs4_lockowner *lo = (struct n    5686         struct nfs4_lockowner *lo = (struct nfs4_lockowner *)owner;
7581                                                  5687 
7582         if (lo)                                  5688         if (lo)
7583                 nfs4_put_stateowner(&lo->lo_o    5689                 nfs4_put_stateowner(&lo->lo_owner);
7584 }                                                5690 }
7585                                                  5691 
7586 /* return pointer to struct nfs4_client if cl << 
7587 static bool                                   << 
7588 nfsd4_lm_lock_expirable(struct file_lock *cfl << 
7589 {                                             << 
7590         struct nfs4_lockowner *lo = (struct n << 
7591         struct nfs4_client *clp = lo->lo_owne << 
7592         struct nfsd_net *nn;                  << 
7593                                               << 
7594         if (try_to_expire_client(clp)) {      << 
7595                 nn = net_generic(clp->net, nf << 
7596                 mod_delayed_work(laundry_wq,  << 
7597                 return true;                  << 
7598         }                                     << 
7599         return false;                         << 
7600 }                                             << 
7601                                               << 
7602 /* schedule laundromat to run immediately and << 
7603 static void                                   << 
7604 nfsd4_lm_expire_lock(void)                    << 
7605 {                                             << 
7606         flush_workqueue(laundry_wq);          << 
7607 }                                             << 
7608                                               << 
7609 static void                                      5692 static void
7610 nfsd4_lm_notify(struct file_lock *fl)            5693 nfsd4_lm_notify(struct file_lock *fl)
7611 {                                                5694 {
7612         struct nfs4_lockowner           *lo = !! 5695         struct nfs4_lockowner           *lo = (struct nfs4_lockowner *)fl->fl_owner;
7613         struct net                      *net     5696         struct net                      *net = lo->lo_owner.so_client->net;
7614         struct nfsd_net                 *nn =    5697         struct nfsd_net                 *nn = net_generic(net, nfsd_net_id);
7615         struct nfsd4_blocked_lock       *nbl     5698         struct nfsd4_blocked_lock       *nbl = container_of(fl,
7616                                                  5699                                                 struct nfsd4_blocked_lock, nbl_lock);
7617         bool queue = false;                      5700         bool queue = false;
7618                                                  5701 
7619         /* An empty list means that something    5702         /* An empty list means that something else is going to be using it */
7620         spin_lock(&nn->blocked_locks_lock);      5703         spin_lock(&nn->blocked_locks_lock);
7621         if (!list_empty(&nbl->nbl_list)) {       5704         if (!list_empty(&nbl->nbl_list)) {
7622                 list_del_init(&nbl->nbl_list)    5705                 list_del_init(&nbl->nbl_list);
7623                 list_del_init(&nbl->nbl_lru);    5706                 list_del_init(&nbl->nbl_lru);
7624                 queue = true;                    5707                 queue = true;
7625         }                                        5708         }
7626         spin_unlock(&nn->blocked_locks_lock);    5709         spin_unlock(&nn->blocked_locks_lock);
7627                                                  5710 
7628         if (queue) {                          !! 5711         if (queue)
7629                 trace_nfsd_cb_notify_lock(lo, << 
7630                 nfsd4_run_cb(&nbl->nbl_cb);      5712                 nfsd4_run_cb(&nbl->nbl_cb);
7631         }                                     << 
7632 }                                                5713 }
7633                                                  5714 
7634 static const struct lock_manager_operations n    5715 static const struct lock_manager_operations nfsd_posix_mng_ops  = {
7635         .lm_mod_owner = THIS_MODULE,          << 
7636         .lm_notify = nfsd4_lm_notify,            5716         .lm_notify = nfsd4_lm_notify,
7637         .lm_get_owner = nfsd4_lm_get_owner,   !! 5717         .lm_get_owner = nfsd4_fl_get_owner,
7638         .lm_put_owner = nfsd4_lm_put_owner,   !! 5718         .lm_put_owner = nfsd4_fl_put_owner,
7639         .lm_lock_expirable = nfsd4_lm_lock_ex << 
7640         .lm_expire_lock = nfsd4_lm_expire_loc << 
7641 };                                               5719 };
7642                                                  5720 
7643 static inline void                               5721 static inline void
7644 nfs4_set_lock_denied(struct file_lock *fl, st    5722 nfs4_set_lock_denied(struct file_lock *fl, struct nfsd4_lock_denied *deny)
7645 {                                                5723 {
7646         struct nfs4_lockowner *lo;               5724         struct nfs4_lockowner *lo;
7647                                                  5725 
7648         if (fl->fl_lmops == &nfsd_posix_mng_o    5726         if (fl->fl_lmops == &nfsd_posix_mng_ops) {
7649                 lo = (struct nfs4_lockowner * !! 5727                 lo = (struct nfs4_lockowner *) fl->fl_owner;
7650                 xdr_netobj_dup(&deny->ld_owne !! 5728                 deny->ld_owner.data = kmemdup(lo->lo_owner.so_owner.data,
7651                                               !! 5729                                         lo->lo_owner.so_owner.len, GFP_KERNEL);
7652                 if (!deny->ld_owner.data)        5730                 if (!deny->ld_owner.data)
7653                         /* We just don't care    5731                         /* We just don't care that much */
7654                         goto nevermind;          5732                         goto nevermind;
                                                   >> 5733                 deny->ld_owner.len = lo->lo_owner.so_owner.len;
7655                 deny->ld_clientid = lo->lo_ow    5734                 deny->ld_clientid = lo->lo_owner.so_client->cl_clientid;
7656         } else {                                 5735         } else {
7657 nevermind:                                       5736 nevermind:
7658                 deny->ld_owner.len = 0;          5737                 deny->ld_owner.len = 0;
7659                 deny->ld_owner.data = NULL;      5738                 deny->ld_owner.data = NULL;
7660                 deny->ld_clientid.cl_boot = 0    5739                 deny->ld_clientid.cl_boot = 0;
7661                 deny->ld_clientid.cl_id = 0;     5740                 deny->ld_clientid.cl_id = 0;
7662         }                                        5741         }
7663         deny->ld_start = fl->fl_start;           5742         deny->ld_start = fl->fl_start;
7664         deny->ld_length = NFS4_MAX_UINT64;       5743         deny->ld_length = NFS4_MAX_UINT64;
7665         if (fl->fl_end != NFS4_MAX_UINT64)       5744         if (fl->fl_end != NFS4_MAX_UINT64)
7666                 deny->ld_length = fl->fl_end     5745                 deny->ld_length = fl->fl_end - fl->fl_start + 1;        
7667         deny->ld_type = NFS4_READ_LT;            5746         deny->ld_type = NFS4_READ_LT;
7668         if (fl->c.flc_type != F_RDLCK)        !! 5747         if (fl->fl_type != F_RDLCK)
7669                 deny->ld_type = NFS4_WRITE_LT    5748                 deny->ld_type = NFS4_WRITE_LT;
7670 }                                                5749 }
7671                                                  5750 
7672 static struct nfs4_lockowner *                   5751 static struct nfs4_lockowner *
7673 find_lockowner_str_locked(struct nfs4_client     5752 find_lockowner_str_locked(struct nfs4_client *clp, struct xdr_netobj *owner)
7674 {                                                5753 {
7675         unsigned int strhashval = ownerstr_ha    5754         unsigned int strhashval = ownerstr_hashval(owner);
7676         struct nfs4_stateowner *so;              5755         struct nfs4_stateowner *so;
7677                                                  5756 
7678         lockdep_assert_held(&clp->cl_lock);      5757         lockdep_assert_held(&clp->cl_lock);
7679                                                  5758 
7680         list_for_each_entry(so, &clp->cl_owne    5759         list_for_each_entry(so, &clp->cl_ownerstr_hashtbl[strhashval],
7681                             so_strhash) {        5760                             so_strhash) {
7682                 if (so->so_is_open_owner)        5761                 if (so->so_is_open_owner)
7683                         continue;                5762                         continue;
7684                 if (same_owner_str(so, owner)    5763                 if (same_owner_str(so, owner))
7685                         return lockowner(nfs4    5764                         return lockowner(nfs4_get_stateowner(so));
7686         }                                        5765         }
7687         return NULL;                             5766         return NULL;
7688 }                                                5767 }
7689                                                  5768 
7690 static struct nfs4_lockowner *                   5769 static struct nfs4_lockowner *
7691 find_lockowner_str(struct nfs4_client *clp, s    5770 find_lockowner_str(struct nfs4_client *clp, struct xdr_netobj *owner)
7692 {                                                5771 {
7693         struct nfs4_lockowner *lo;               5772         struct nfs4_lockowner *lo;
7694                                                  5773 
7695         spin_lock(&clp->cl_lock);                5774         spin_lock(&clp->cl_lock);
7696         lo = find_lockowner_str_locked(clp, o    5775         lo = find_lockowner_str_locked(clp, owner);
7697         spin_unlock(&clp->cl_lock);              5776         spin_unlock(&clp->cl_lock);
7698         return lo;                               5777         return lo;
7699 }                                                5778 }
7700                                                  5779 
7701 static void nfs4_unhash_lockowner(struct nfs4    5780 static void nfs4_unhash_lockowner(struct nfs4_stateowner *sop)
7702 {                                                5781 {
7703         unhash_lockowner_locked(lockowner(sop    5782         unhash_lockowner_locked(lockowner(sop));
7704 }                                                5783 }
7705                                                  5784 
7706 static void nfs4_free_lockowner(struct nfs4_s    5785 static void nfs4_free_lockowner(struct nfs4_stateowner *sop)
7707 {                                                5786 {
7708         struct nfs4_lockowner *lo = lockowner    5787         struct nfs4_lockowner *lo = lockowner(sop);
7709                                                  5788 
7710         kmem_cache_free(lockowner_slab, lo);     5789         kmem_cache_free(lockowner_slab, lo);
7711 }                                                5790 }
7712                                                  5791 
7713 static const struct nfs4_stateowner_operation    5792 static const struct nfs4_stateowner_operations lockowner_ops = {
7714         .so_unhash =    nfs4_unhash_lockowner    5793         .so_unhash =    nfs4_unhash_lockowner,
7715         .so_free =      nfs4_free_lockowner,     5794         .so_free =      nfs4_free_lockowner,
7716 };                                               5795 };
7717                                                  5796 
7718 /*                                               5797 /*
7719  * Alloc a lock owner structure.                 5798  * Alloc a lock owner structure.
7720  * Called in nfsd4_lock - therefore, OPEN and    5799  * Called in nfsd4_lock - therefore, OPEN and OPEN_CONFIRM (if needed) has 
7721  * occurred.                                     5800  * occurred. 
7722  *                                               5801  *
7723  * strhashval = ownerstr_hashval                 5802  * strhashval = ownerstr_hashval
7724  */                                              5803  */
7725 static struct nfs4_lockowner *                   5804 static struct nfs4_lockowner *
7726 alloc_init_lock_stateowner(unsigned int strha    5805 alloc_init_lock_stateowner(unsigned int strhashval, struct nfs4_client *clp,
7727                            struct nfs4_ol_sta    5806                            struct nfs4_ol_stateid *open_stp,
7728                            struct nfsd4_lock     5807                            struct nfsd4_lock *lock)
7729 {                                                5808 {
7730         struct nfs4_lockowner *lo, *ret;         5809         struct nfs4_lockowner *lo, *ret;
7731                                                  5810 
7732         lo = alloc_stateowner(lockowner_slab,    5811         lo = alloc_stateowner(lockowner_slab, &lock->lk_new_owner, clp);
7733         if (!lo)                                 5812         if (!lo)
7734                 return NULL;                     5813                 return NULL;
7735         INIT_LIST_HEAD(&lo->lo_blocked);         5814         INIT_LIST_HEAD(&lo->lo_blocked);
7736         INIT_LIST_HEAD(&lo->lo_owner.so_state    5815         INIT_LIST_HEAD(&lo->lo_owner.so_stateids);
7737         lo->lo_owner.so_is_open_owner = 0;       5816         lo->lo_owner.so_is_open_owner = 0;
7738         lo->lo_owner.so_seqid = lock->lk_new_    5817         lo->lo_owner.so_seqid = lock->lk_new_lock_seqid;
7739         lo->lo_owner.so_ops = &lockowner_ops;    5818         lo->lo_owner.so_ops = &lockowner_ops;
7740         spin_lock(&clp->cl_lock);                5819         spin_lock(&clp->cl_lock);
7741         ret = find_lockowner_str_locked(clp,     5820         ret = find_lockowner_str_locked(clp, &lock->lk_new_owner);
7742         if (ret == NULL) {                       5821         if (ret == NULL) {
7743                 list_add(&lo->lo_owner.so_str    5822                 list_add(&lo->lo_owner.so_strhash,
7744                          &clp->cl_ownerstr_ha    5823                          &clp->cl_ownerstr_hashtbl[strhashval]);
7745                 ret = lo;                        5824                 ret = lo;
7746         } else                                   5825         } else
7747                 nfs4_free_stateowner(&lo->lo_    5826                 nfs4_free_stateowner(&lo->lo_owner);
7748                                                  5827 
7749         spin_unlock(&clp->cl_lock);              5828         spin_unlock(&clp->cl_lock);
7750         return ret;                              5829         return ret;
7751 }                                                5830 }
7752                                                  5831 
7753 static struct nfs4_ol_stateid *                  5832 static struct nfs4_ol_stateid *
7754 find_lock_stateid(const struct nfs4_lockowner !! 5833 find_lock_stateid(struct nfs4_lockowner *lo, struct nfs4_file *fp)
7755                   const struct nfs4_ol_statei << 
7756 {                                                5834 {
7757         struct nfs4_ol_stateid *lst;             5835         struct nfs4_ol_stateid *lst;
                                                   >> 5836         struct nfs4_client *clp = lo->lo_owner.so_client;
7758                                                  5837 
7759         lockdep_assert_held(&ost->st_stid.sc_ !! 5838         lockdep_assert_held(&clp->cl_lock);
7760                                                  5839 
7761         /* If ost is not hashed, ost->st_lock !! 5840         list_for_each_entry(lst, &lo->lo_owner.so_stateids, st_perstateowner) {
7762         if (!nfs4_ol_stateid_unhashed(ost))   !! 5841                 if (lst->st_stid.sc_type != NFS4_LOCK_STID)
7763                 list_for_each_entry(lst, &ost !! 5842                         continue;
7764                         if (lst->st_stateowne !! 5843                 if (lst->st_stid.sc_file == fp) {
7765                                 refcount_inc( !! 5844                         refcount_inc(&lst->st_stid.sc_count);
7766                                 return lst;   !! 5845                         return lst;
7767                         }                     << 
7768                 }                                5846                 }
                                                   >> 5847         }
7769         return NULL;                             5848         return NULL;
7770 }                                                5849 }
7771                                                  5850 
7772 static struct nfs4_ol_stateid *                  5851 static struct nfs4_ol_stateid *
7773 init_lock_stateid(struct nfs4_ol_stateid *stp    5852 init_lock_stateid(struct nfs4_ol_stateid *stp, struct nfs4_lockowner *lo,
7774                   struct nfs4_file *fp, struc    5853                   struct nfs4_file *fp, struct inode *inode,
7775                   struct nfs4_ol_stateid *ope    5854                   struct nfs4_ol_stateid *open_stp)
7776 {                                                5855 {
7777         struct nfs4_client *clp = lo->lo_owne    5856         struct nfs4_client *clp = lo->lo_owner.so_client;
7778         struct nfs4_ol_stateid *retstp;          5857         struct nfs4_ol_stateid *retstp;
7779                                                  5858 
7780         mutex_init(&stp->st_mutex);              5859         mutex_init(&stp->st_mutex);
7781         mutex_lock_nested(&stp->st_mutex, OPE    5860         mutex_lock_nested(&stp->st_mutex, OPEN_STATEID_MUTEX);
7782 retry:                                           5861 retry:
7783         spin_lock(&clp->cl_lock);                5862         spin_lock(&clp->cl_lock);
7784         if (nfs4_ol_stateid_unhashed(open_stp !! 5863         spin_lock(&fp->fi_lock);
7785                 goto out_close;               !! 5864         retstp = find_lock_stateid(lo, fp);
7786         retstp = find_lock_stateid(lo, open_s << 
7787         if (retstp)                              5865         if (retstp)
7788                 goto out_found;               !! 5866                 goto out_unlock;
                                                   >> 5867 
7789         refcount_inc(&stp->st_stid.sc_count);    5868         refcount_inc(&stp->st_stid.sc_count);
7790         stp->st_stid.sc_type = SC_TYPE_LOCK;  !! 5869         stp->st_stid.sc_type = NFS4_LOCK_STID;
7791         stp->st_stateowner = nfs4_get_stateow    5870         stp->st_stateowner = nfs4_get_stateowner(&lo->lo_owner);
7792         get_nfs4_file(fp);                       5871         get_nfs4_file(fp);
7793         stp->st_stid.sc_file = fp;               5872         stp->st_stid.sc_file = fp;
7794         stp->st_access_bmap = 0;                 5873         stp->st_access_bmap = 0;
7795         stp->st_deny_bmap = open_stp->st_deny    5874         stp->st_deny_bmap = open_stp->st_deny_bmap;
7796         stp->st_openstp = open_stp;              5875         stp->st_openstp = open_stp;
7797         spin_lock(&fp->fi_lock);              << 
7798         list_add(&stp->st_locks, &open_stp->s    5876         list_add(&stp->st_locks, &open_stp->st_locks);
7799         list_add(&stp->st_perstateowner, &lo-    5877         list_add(&stp->st_perstateowner, &lo->lo_owner.so_stateids);
7800         list_add(&stp->st_perfile, &fp->fi_st    5878         list_add(&stp->st_perfile, &fp->fi_stateids);
                                                   >> 5879 out_unlock:
7801         spin_unlock(&fp->fi_lock);               5880         spin_unlock(&fp->fi_lock);
7802         spin_unlock(&clp->cl_lock);              5881         spin_unlock(&clp->cl_lock);
7803         return stp;                           !! 5882         if (retstp) {
7804 out_found:                                    !! 5883                 if (nfsd4_lock_ol_stateid(retstp) != nfs_ok) {
7805         spin_unlock(&clp->cl_lock);           !! 5884                         nfs4_put_stid(&retstp->st_stid);
7806         if (nfsd4_lock_ol_stateid(retstp) !=  !! 5885                         goto retry;
7807                 nfs4_put_stid(&retstp->st_sti !! 5886                 }
7808                 goto retry;                   !! 5887                 /* To keep mutex tracking happy */
                                                   >> 5888                 mutex_unlock(&stp->st_mutex);
                                                   >> 5889                 stp = retstp;
7809         }                                        5890         }
7810         /* To keep mutex tracking happy */    !! 5891         return stp;
7811         mutex_unlock(&stp->st_mutex);         << 
7812         return retstp;                        << 
7813 out_close:                                    << 
7814         spin_unlock(&clp->cl_lock);           << 
7815         mutex_unlock(&stp->st_mutex);         << 
7816         return NULL;                          << 
7817 }                                                5892 }
7818                                                  5893 
7819 static struct nfs4_ol_stateid *                  5894 static struct nfs4_ol_stateid *
7820 find_or_create_lock_stateid(struct nfs4_locko    5895 find_or_create_lock_stateid(struct nfs4_lockowner *lo, struct nfs4_file *fi,
7821                             struct inode *ino    5896                             struct inode *inode, struct nfs4_ol_stateid *ost,
7822                             bool *new)           5897                             bool *new)
7823 {                                                5898 {
7824         struct nfs4_stid *ns = NULL;             5899         struct nfs4_stid *ns = NULL;
7825         struct nfs4_ol_stateid *lst;             5900         struct nfs4_ol_stateid *lst;
7826         struct nfs4_openowner *oo = openowner    5901         struct nfs4_openowner *oo = openowner(ost->st_stateowner);
7827         struct nfs4_client *clp = oo->oo_owne    5902         struct nfs4_client *clp = oo->oo_owner.so_client;
7828                                                  5903 
7829         *new = false;                            5904         *new = false;
7830         spin_lock(&clp->cl_lock);                5905         spin_lock(&clp->cl_lock);
7831         lst = find_lock_stateid(lo, ost);     !! 5906         lst = find_lock_stateid(lo, fi);
7832         spin_unlock(&clp->cl_lock);              5907         spin_unlock(&clp->cl_lock);
7833         if (lst != NULL) {                       5908         if (lst != NULL) {
7834                 if (nfsd4_lock_ol_stateid(lst    5909                 if (nfsd4_lock_ol_stateid(lst) == nfs_ok)
7835                         goto out;                5910                         goto out;
7836                 nfs4_put_stid(&lst->st_stid);    5911                 nfs4_put_stid(&lst->st_stid);
7837         }                                        5912         }
7838         ns = nfs4_alloc_stid(clp, stateid_sla    5913         ns = nfs4_alloc_stid(clp, stateid_slab, nfs4_free_lock_stateid);
7839         if (ns == NULL)                          5914         if (ns == NULL)
7840                 return NULL;                     5915                 return NULL;
7841                                                  5916 
7842         lst = init_lock_stateid(openlockstate    5917         lst = init_lock_stateid(openlockstateid(ns), lo, fi, inode, ost);
7843         if (lst == openlockstateid(ns))          5918         if (lst == openlockstateid(ns))
7844                 *new = true;                     5919                 *new = true;
7845         else                                     5920         else
7846                 nfs4_put_stid(ns);               5921                 nfs4_put_stid(ns);
7847 out:                                             5922 out:
7848         return lst;                              5923         return lst;
7849 }                                                5924 }
7850                                                  5925 
7851 static int                                       5926 static int
7852 check_lock_length(u64 offset, u64 length)        5927 check_lock_length(u64 offset, u64 length)
7853 {                                                5928 {
7854         return ((length == 0) || ((length !=     5929         return ((length == 0) || ((length != NFS4_MAX_UINT64) &&
7855                 (length > ~offset)));            5930                 (length > ~offset)));
7856 }                                                5931 }
7857                                                  5932 
7858 static void get_lock_access(struct nfs4_ol_st    5933 static void get_lock_access(struct nfs4_ol_stateid *lock_stp, u32 access)
7859 {                                                5934 {
7860         struct nfs4_file *fp = lock_stp->st_s    5935         struct nfs4_file *fp = lock_stp->st_stid.sc_file;
7861                                                  5936 
7862         lockdep_assert_held(&fp->fi_lock);       5937         lockdep_assert_held(&fp->fi_lock);
7863                                                  5938 
7864         if (test_access(access, lock_stp))       5939         if (test_access(access, lock_stp))
7865                 return;                          5940                 return;
7866         __nfs4_file_get_access(fp, access);      5941         __nfs4_file_get_access(fp, access);
7867         set_access(access, lock_stp);            5942         set_access(access, lock_stp);
7868 }                                                5943 }
7869                                                  5944 
7870 static __be32                                    5945 static __be32
7871 lookup_or_create_lock_state(struct nfsd4_comp    5946 lookup_or_create_lock_state(struct nfsd4_compound_state *cstate,
7872                             struct nfs4_ol_st    5947                             struct nfs4_ol_stateid *ost,
7873                             struct nfsd4_lock    5948                             struct nfsd4_lock *lock,
7874                             struct nfs4_ol_st    5949                             struct nfs4_ol_stateid **plst, bool *new)
7875 {                                                5950 {
7876         __be32 status;                           5951         __be32 status;
7877         struct nfs4_file *fi = ost->st_stid.s    5952         struct nfs4_file *fi = ost->st_stid.sc_file;
7878         struct nfs4_openowner *oo = openowner    5953         struct nfs4_openowner *oo = openowner(ost->st_stateowner);
7879         struct nfs4_client *cl = oo->oo_owner    5954         struct nfs4_client *cl = oo->oo_owner.so_client;
7880         struct inode *inode = d_inode(cstate-    5955         struct inode *inode = d_inode(cstate->current_fh.fh_dentry);
7881         struct nfs4_lockowner *lo;               5956         struct nfs4_lockowner *lo;
7882         struct nfs4_ol_stateid *lst;             5957         struct nfs4_ol_stateid *lst;
7883         unsigned int strhashval;                 5958         unsigned int strhashval;
7884                                                  5959 
7885         lo = find_lockowner_str(cl, &lock->lk    5960         lo = find_lockowner_str(cl, &lock->lk_new_owner);
7886         if (!lo) {                               5961         if (!lo) {
7887                 strhashval = ownerstr_hashval    5962                 strhashval = ownerstr_hashval(&lock->lk_new_owner);
7888                 lo = alloc_init_lock_stateown    5963                 lo = alloc_init_lock_stateowner(strhashval, cl, ost, lock);
7889                 if (lo == NULL)                  5964                 if (lo == NULL)
7890                         return nfserr_jukebox    5965                         return nfserr_jukebox;
7891         } else {                                 5966         } else {
7892                 /* with an existing lockowner    5967                 /* with an existing lockowner, seqids must be the same */
7893                 status = nfserr_bad_seqid;       5968                 status = nfserr_bad_seqid;
7894                 if (!cstate->minorversion &&     5969                 if (!cstate->minorversion &&
7895                     lock->lk_new_lock_seqid !    5970                     lock->lk_new_lock_seqid != lo->lo_owner.so_seqid)
7896                         goto out;                5971                         goto out;
7897         }                                        5972         }
7898                                                  5973 
7899         lst = find_or_create_lock_stateid(lo,    5974         lst = find_or_create_lock_stateid(lo, fi, inode, ost, new);
7900         if (lst == NULL) {                       5975         if (lst == NULL) {
7901                 status = nfserr_jukebox;         5976                 status = nfserr_jukebox;
7902                 goto out;                        5977                 goto out;
7903         }                                        5978         }
7904                                                  5979 
7905         status = nfs_ok;                         5980         status = nfs_ok;
7906         *plst = lst;                             5981         *plst = lst;
7907 out:                                             5982 out:
7908         nfs4_put_stateowner(&lo->lo_owner);      5983         nfs4_put_stateowner(&lo->lo_owner);
7909         return status;                           5984         return status;
7910 }                                                5985 }
7911                                                  5986 
7912 /*                                               5987 /*
7913  *  LOCK operation                               5988  *  LOCK operation 
7914  */                                              5989  */
7915 __be32                                           5990 __be32
7916 nfsd4_lock(struct svc_rqst *rqstp, struct nfs    5991 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
7917            union nfsd4_op_u *u)                  5992            union nfsd4_op_u *u)
7918 {                                                5993 {
7919         struct nfsd4_lock *lock = &u->lock;      5994         struct nfsd4_lock *lock = &u->lock;
7920         struct nfs4_openowner *open_sop = NUL    5995         struct nfs4_openowner *open_sop = NULL;
7921         struct nfs4_lockowner *lock_sop = NUL    5996         struct nfs4_lockowner *lock_sop = NULL;
7922         struct nfs4_ol_stateid *lock_stp = NU    5997         struct nfs4_ol_stateid *lock_stp = NULL;
7923         struct nfs4_ol_stateid *open_stp = NU    5998         struct nfs4_ol_stateid *open_stp = NULL;
7924         struct nfs4_file *fp;                    5999         struct nfs4_file *fp;
7925         struct nfsd_file *nf = NULL;          !! 6000         struct file *filp = NULL;
7926         struct nfsd4_blocked_lock *nbl = NULL    6001         struct nfsd4_blocked_lock *nbl = NULL;
7927         struct file_lock *file_lock = NULL;      6002         struct file_lock *file_lock = NULL;
7928         struct file_lock *conflock = NULL;       6003         struct file_lock *conflock = NULL;
7929         struct super_block *sb;               << 
7930         __be32 status = 0;                       6004         __be32 status = 0;
7931         int lkflg;                               6005         int lkflg;
7932         int err;                                 6006         int err;
7933         bool new = false;                        6007         bool new = false;
7934         unsigned char type;                   !! 6008         unsigned char fl_type;
7935         unsigned int flags = FL_POSIX;        !! 6009         unsigned int fl_flags = FL_POSIX;
7936         struct net *net = SVC_NET(rqstp);        6010         struct net *net = SVC_NET(rqstp);
7937         struct nfsd_net *nn = net_generic(net    6011         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
7938                                                  6012 
7939         dprintk("NFSD: nfsd4_lock: start=%Ld     6013         dprintk("NFSD: nfsd4_lock: start=%Ld length=%Ld\n",
7940                 (long long) lock->lk_offset,     6014                 (long long) lock->lk_offset,
7941                 (long long) lock->lk_length);    6015                 (long long) lock->lk_length);
7942                                                  6016 
7943         if (check_lock_length(lock->lk_offset    6017         if (check_lock_length(lock->lk_offset, lock->lk_length))
7944                  return nfserr_inval;            6018                  return nfserr_inval;
7945                                                  6019 
7946         if ((status = fh_verify(rqstp, &cstat    6020         if ((status = fh_verify(rqstp, &cstate->current_fh,
7947                                 S_IFREG, NFSD    6021                                 S_IFREG, NFSD_MAY_LOCK))) {
7948                 dprintk("NFSD: nfsd4_lock: pe    6022                 dprintk("NFSD: nfsd4_lock: permission denied!\n");
7949                 return status;                   6023                 return status;
7950         }                                        6024         }
7951         sb = cstate->current_fh.fh_dentry->d_ << 
7952                                                  6025 
7953         if (lock->lk_is_new) {                   6026         if (lock->lk_is_new) {
7954                 if (nfsd4_has_session(cstate)    6027                 if (nfsd4_has_session(cstate))
7955                         /* See rfc 5661 18.10    6028                         /* See rfc 5661 18.10.3: given clientid is ignored: */
7956                         memcpy(&lock->lk_new_    6029                         memcpy(&lock->lk_new_clientid,
7957                                 &cstate->clp- !! 6030                                 &cstate->session->se_client->cl_clientid,
7958                                 sizeof(client    6031                                 sizeof(clientid_t));
7959                                                  6032 
                                                   >> 6033                 status = nfserr_stale_clientid;
                                                   >> 6034                 if (STALE_CLIENTID(&lock->lk_new_clientid, nn))
                                                   >> 6035                         goto out;
                                                   >> 6036 
7960                 /* validate and update open s    6037                 /* validate and update open stateid and open seqid */
7961                 status = nfs4_preprocess_conf    6038                 status = nfs4_preprocess_confirmed_seqid_op(cstate,
7962                                         lock-    6039                                         lock->lk_new_open_seqid,
7963                                         &lock    6040                                         &lock->lk_new_open_stateid,
7964                                         &open    6041                                         &open_stp, nn);
7965                 if (status)                      6042                 if (status)
7966                         goto out;                6043                         goto out;
7967                 mutex_unlock(&open_stp->st_mu    6044                 mutex_unlock(&open_stp->st_mutex);
7968                 open_sop = openowner(open_stp    6045                 open_sop = openowner(open_stp->st_stateowner);
7969                 status = nfserr_bad_stateid;     6046                 status = nfserr_bad_stateid;
7970                 if (!same_clid(&open_sop->oo_    6047                 if (!same_clid(&open_sop->oo_owner.so_client->cl_clientid,
7971                                                  6048                                                 &lock->lk_new_clientid))
7972                         goto out;                6049                         goto out;
7973                 status = lookup_or_create_loc    6050                 status = lookup_or_create_lock_state(cstate, open_stp, lock,
7974                                                  6051                                                         &lock_stp, &new);
7975         } else {                                 6052         } else {
7976                 status = nfs4_preprocess_seqi    6053                 status = nfs4_preprocess_seqid_op(cstate,
7977                                               !! 6054                                        lock->lk_old_lock_seqid,
7978                                               !! 6055                                        &lock->lk_old_lock_stateid,
7979                                               !! 6056                                        NFS4_LOCK_STID, &lock_stp, nn);
7980                                               << 
7981         }                                        6057         }
7982         if (status)                              6058         if (status)
7983                 goto out;                        6059                 goto out;
7984         lock_sop = lockowner(lock_stp->st_sta    6060         lock_sop = lockowner(lock_stp->st_stateowner);
7985                                                  6061 
7986         lkflg = setlkflg(lock->lk_type);         6062         lkflg = setlkflg(lock->lk_type);
7987         status = nfs4_check_openmode(lock_stp    6063         status = nfs4_check_openmode(lock_stp, lkflg);
7988         if (status)                              6064         if (status)
7989                 goto out;                        6065                 goto out;
7990                                                  6066 
7991         status = nfserr_grace;                   6067         status = nfserr_grace;
7992         if (locks_in_grace(net) && !lock->lk_    6068         if (locks_in_grace(net) && !lock->lk_reclaim)
7993                 goto out;                        6069                 goto out;
7994         status = nfserr_no_grace;                6070         status = nfserr_no_grace;
7995         if (!locks_in_grace(net) && lock->lk_    6071         if (!locks_in_grace(net) && lock->lk_reclaim)
7996                 goto out;                        6072                 goto out;
7997                                                  6073 
7998         if (lock->lk_reclaim)                 << 
7999                 flags |= FL_RECLAIM;          << 
8000                                               << 
8001         fp = lock_stp->st_stid.sc_file;          6074         fp = lock_stp->st_stid.sc_file;
8002         switch (lock->lk_type) {                 6075         switch (lock->lk_type) {
8003                 case NFS4_READW_LT:              6076                 case NFS4_READW_LT:
8004                         if (nfsd4_has_session !! 6077                         if (nfsd4_has_session(cstate))
8005                             exportfs_lock_op_ !! 6078                                 fl_flags |= FL_SLEEP;
8006                                 flags |= FL_S !! 6079                         /* Fallthrough */
8007                         fallthrough;          << 
8008                 case NFS4_READ_LT:               6080                 case NFS4_READ_LT:
8009                         spin_lock(&fp->fi_loc    6081                         spin_lock(&fp->fi_lock);
8010                         nf = find_readable_fi !! 6082                         filp = find_readable_file_locked(fp);
8011                         if (nf)               !! 6083                         if (filp)
8012                                 get_lock_acce    6084                                 get_lock_access(lock_stp, NFS4_SHARE_ACCESS_READ);
8013                         spin_unlock(&fp->fi_l    6085                         spin_unlock(&fp->fi_lock);
8014                         type = F_RDLCK;       !! 6086                         fl_type = F_RDLCK;
8015                         break;                   6087                         break;
8016                 case NFS4_WRITEW_LT:             6088                 case NFS4_WRITEW_LT:
8017                         if (nfsd4_has_session !! 6089                         if (nfsd4_has_session(cstate))
8018                             exportfs_lock_op_ !! 6090                                 fl_flags |= FL_SLEEP;
8019                                 flags |= FL_S !! 6091                         /* Fallthrough */
8020                         fallthrough;          << 
8021                 case NFS4_WRITE_LT:              6092                 case NFS4_WRITE_LT:
8022                         spin_lock(&fp->fi_loc    6093                         spin_lock(&fp->fi_lock);
8023                         nf = find_writeable_f !! 6094                         filp = find_writeable_file_locked(fp);
8024                         if (nf)               !! 6095                         if (filp)
8025                                 get_lock_acce    6096                                 get_lock_access(lock_stp, NFS4_SHARE_ACCESS_WRITE);
8026                         spin_unlock(&fp->fi_l    6097                         spin_unlock(&fp->fi_lock);
8027                         type = F_WRLCK;       !! 6098                         fl_type = F_WRLCK;
8028                         break;                   6099                         break;
8029                 default:                         6100                 default:
8030                         status = nfserr_inval    6101                         status = nfserr_inval;
8031                 goto out;                        6102                 goto out;
8032         }                                        6103         }
8033                                                  6104 
8034         if (!nf) {                            !! 6105         if (!filp) {
8035                 status = nfserr_openmode;        6106                 status = nfserr_openmode;
8036                 goto out;                        6107                 goto out;
8037         }                                        6108         }
8038                                                  6109 
8039         /*                                    << 
8040          * Most filesystems with their own -> << 
8041          * the nfsd thread waiting to acquire << 
8042          * deadlocks (we don't want every nfs << 
8043          * for file locks), so don't attempt  << 
8044          * on those filesystems:              << 
8045          */                                   << 
8046         if (!exportfs_lock_op_is_async(sb->s_ << 
8047                 flags &= ~FL_SLEEP;           << 
8048                                               << 
8049         nbl = find_or_allocate_block(lock_sop    6110         nbl = find_or_allocate_block(lock_sop, &fp->fi_fhandle, nn);
8050         if (!nbl) {                              6111         if (!nbl) {
8051                 dprintk("NFSD: %s: unable to     6112                 dprintk("NFSD: %s: unable to allocate block!\n", __func__);
8052                 status = nfserr_jukebox;         6113                 status = nfserr_jukebox;
8053                 goto out;                        6114                 goto out;
8054         }                                        6115         }
8055                                                  6116 
8056         file_lock = &nbl->nbl_lock;              6117         file_lock = &nbl->nbl_lock;
8057         file_lock->c.flc_type = type;         !! 6118         file_lock->fl_type = fl_type;
8058         file_lock->c.flc_owner = (fl_owner_t) !! 6119         file_lock->fl_owner = (fl_owner_t)lockowner(nfs4_get_stateowner(&lock_sop->lo_owner));
8059         file_lock->c.flc_pid = current->tgid; !! 6120         file_lock->fl_pid = current->tgid;
8060         file_lock->c.flc_file = nf->nf_file;  !! 6121         file_lock->fl_file = filp;
8061         file_lock->c.flc_flags = flags;       !! 6122         file_lock->fl_flags = fl_flags;
8062         file_lock->fl_lmops = &nfsd_posix_mng    6123         file_lock->fl_lmops = &nfsd_posix_mng_ops;
8063         file_lock->fl_start = lock->lk_offset    6124         file_lock->fl_start = lock->lk_offset;
8064         file_lock->fl_end = last_byte_offset(    6125         file_lock->fl_end = last_byte_offset(lock->lk_offset, lock->lk_length);
8065         nfs4_transform_lock_offset(file_lock)    6126         nfs4_transform_lock_offset(file_lock);
8066                                                  6127 
8067         conflock = locks_alloc_lock();           6128         conflock = locks_alloc_lock();
8068         if (!conflock) {                         6129         if (!conflock) {
8069                 dprintk("NFSD: %s: unable to     6130                 dprintk("NFSD: %s: unable to allocate lock!\n", __func__);
8070                 status = nfserr_jukebox;         6131                 status = nfserr_jukebox;
8071                 goto out;                        6132                 goto out;
8072         }                                        6133         }
8073                                                  6134 
8074         if (flags & FL_SLEEP) {               !! 6135         if (fl_flags & FL_SLEEP) {
8075                 nbl->nbl_time = ktime_get_boo !! 6136                 nbl->nbl_time = jiffies;
8076                 spin_lock(&nn->blocked_locks_    6137                 spin_lock(&nn->blocked_locks_lock);
8077                 list_add_tail(&nbl->nbl_list,    6138                 list_add_tail(&nbl->nbl_list, &lock_sop->lo_blocked);
8078                 list_add_tail(&nbl->nbl_lru,     6139                 list_add_tail(&nbl->nbl_lru, &nn->blocked_locks_lru);
8079                 kref_get(&nbl->nbl_kref);     << 
8080                 spin_unlock(&nn->blocked_lock    6140                 spin_unlock(&nn->blocked_locks_lock);
8081         }                                        6141         }
8082                                                  6142 
8083         err = vfs_lock_file(nf->nf_file, F_SE !! 6143         err = vfs_lock_file(filp, F_SETLK, file_lock, conflock);
8084         switch (err) {                           6144         switch (err) {
8085         case 0: /* success! */                   6145         case 0: /* success! */
8086                 nfs4_inc_and_copy_stateid(&lo    6146                 nfs4_inc_and_copy_stateid(&lock->lk_resp_stateid, &lock_stp->st_stid);
8087                 status = 0;                      6147                 status = 0;
8088                 if (lock->lk_reclaim)            6148                 if (lock->lk_reclaim)
8089                         nn->somebody_reclaime    6149                         nn->somebody_reclaimed = true;
8090                 break;                           6150                 break;
8091         case FILE_LOCK_DEFERRED:                 6151         case FILE_LOCK_DEFERRED:
8092                 kref_put(&nbl->nbl_kref, free << 
8093                 nbl = NULL;                      6152                 nbl = NULL;
8094                 fallthrough;                  !! 6153                 /* Fallthrough */
8095         case -EAGAIN:           /* conflock h    6154         case -EAGAIN:           /* conflock holds conflicting lock */
8096                 status = nfserr_denied;          6155                 status = nfserr_denied;
8097                 dprintk("NFSD: nfsd4_lock: co    6156                 dprintk("NFSD: nfsd4_lock: conflicting lock found!\n");
8098                 nfs4_set_lock_denied(conflock    6157                 nfs4_set_lock_denied(conflock, &lock->lk_denied);
8099                 break;                           6158                 break;
8100         case -EDEADLK:                           6159         case -EDEADLK:
8101                 status = nfserr_deadlock;        6160                 status = nfserr_deadlock;
8102                 break;                           6161                 break;
8103         default:                                 6162         default:
8104                 dprintk("NFSD: nfsd4_lock: vf    6163                 dprintk("NFSD: nfsd4_lock: vfs_lock_file() failed! status %d\n",err);
8105                 status = nfserrno(err);          6164                 status = nfserrno(err);
8106                 break;                           6165                 break;
8107         }                                        6166         }
8108 out:                                             6167 out:
8109         if (nbl) {                               6168         if (nbl) {
8110                 /* dequeue it if we queued it    6169                 /* dequeue it if we queued it before */
8111                 if (flags & FL_SLEEP) {       !! 6170                 if (fl_flags & FL_SLEEP) {
8112                         spin_lock(&nn->blocke    6171                         spin_lock(&nn->blocked_locks_lock);
8113                         if (!list_empty(&nbl- !! 6172                         list_del_init(&nbl->nbl_list);
8114                             !list_empty(&nbl- !! 6173                         list_del_init(&nbl->nbl_lru);
8115                                 list_del_init << 
8116                                 list_del_init << 
8117                                 kref_put(&nbl << 
8118                         }                     << 
8119                         /* nbl can use one of << 
8120                         spin_unlock(&nn->bloc    6174                         spin_unlock(&nn->blocked_locks_lock);
8121                 }                                6175                 }
8122                 free_blocked_lock(nbl);          6176                 free_blocked_lock(nbl);
8123         }                                        6177         }
8124         if (nf)                               !! 6178         if (filp)
8125                 nfsd_file_put(nf);            !! 6179                 fput(filp);
8126         if (lock_stp) {                          6180         if (lock_stp) {
8127                 /* Bump seqid manually if the    6181                 /* Bump seqid manually if the 4.0 replay owner is openowner */
8128                 if (cstate->replay_owner &&      6182                 if (cstate->replay_owner &&
8129                     cstate->replay_owner != &    6183                     cstate->replay_owner != &lock_sop->lo_owner &&
8130                     seqid_mutating_err(ntohl(    6184                     seqid_mutating_err(ntohl(status)))
8131                         lock_sop->lo_owner.so    6185                         lock_sop->lo_owner.so_seqid++;
8132                                                  6186 
8133                 /*                               6187                 /*
8134                  * If this is a new, never-be    6188                  * If this is a new, never-before-used stateid, and we are
8135                  * returning an error, then j    6189                  * returning an error, then just go ahead and release it.
8136                  */                              6190                  */
8137                 if (status && new)               6191                 if (status && new)
8138                         release_lock_stateid(    6192                         release_lock_stateid(lock_stp);
8139                                                  6193 
8140                 mutex_unlock(&lock_stp->st_mu    6194                 mutex_unlock(&lock_stp->st_mutex);
8141                                                  6195 
8142                 nfs4_put_stid(&lock_stp->st_s    6196                 nfs4_put_stid(&lock_stp->st_stid);
8143         }                                        6197         }
8144         if (open_stp)                            6198         if (open_stp)
8145                 nfs4_put_stid(&open_stp->st_s    6199                 nfs4_put_stid(&open_stp->st_stid);
8146         nfsd4_bump_seqid(cstate, status);        6200         nfsd4_bump_seqid(cstate, status);
8147         if (conflock)                            6201         if (conflock)
8148                 locks_free_lock(conflock);       6202                 locks_free_lock(conflock);
8149         return status;                           6203         return status;
8150 }                                                6204 }
8151                                                  6205 
8152 void nfsd4_lock_release(union nfsd4_op_u *u)  << 
8153 {                                             << 
8154         struct nfsd4_lock *lock = &u->lock;   << 
8155         struct nfsd4_lock_denied *deny = &loc << 
8156                                               << 
8157         kfree(deny->ld_owner.data);           << 
8158 }                                             << 
8159                                               << 
8160 /*                                               6206 /*
8161  * The NFSv4 spec allows a client to do a LOC    6207  * The NFSv4 spec allows a client to do a LOCKT without holding an OPEN,
8162  * so we do a temporary open here just to get    6208  * so we do a temporary open here just to get an open file to pass to
8163  * vfs_test_lock.                             !! 6209  * vfs_test_lock.  (Arguably perhaps test_lock should be done with an
                                                   >> 6210  * inode operation.)
8164  */                                              6211  */
8165 static __be32 nfsd_test_lock(struct svc_rqst     6212 static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file_lock *lock)
8166 {                                                6213 {
8167         struct nfsd_file *nf;                 !! 6214         struct file *file;
8168         struct inode *inode;                  !! 6215         __be32 err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_READ, &file);
8169         __be32 err;                           !! 6216         if (!err) {
8170                                               !! 6217                 err = nfserrno(vfs_test_lock(file, lock));
8171         err = nfsd_file_acquire(rqstp, fhp, N !! 6218                 fput(file);
8172         if (err)                              !! 6219         }
8173                 return err;                   << 
8174         inode = fhp->fh_dentry->d_inode;      << 
8175         inode_lock(inode); /* to block new le << 
8176         err = nfserrno(nfsd_open_break_lease( << 
8177         if (err)                              << 
8178                 goto out;                     << 
8179         lock->c.flc_file = nf->nf_file;       << 
8180         err = nfserrno(vfs_test_lock(nf->nf_f << 
8181         lock->c.flc_file = NULL;              << 
8182 out:                                          << 
8183         inode_unlock(inode);                  << 
8184         nfsd_file_put(nf);                    << 
8185         return err;                              6220         return err;
8186 }                                                6221 }
8187                                                  6222 
8188 /*                                               6223 /*
8189  * LOCKT operation                               6224  * LOCKT operation
8190  */                                              6225  */
8191 __be32                                           6226 __be32
8192 nfsd4_lockt(struct svc_rqst *rqstp, struct nf    6227 nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
8193             union nfsd4_op_u *u)                 6228             union nfsd4_op_u *u)
8194 {                                                6229 {
8195         struct nfsd4_lockt *lockt = &u->lockt    6230         struct nfsd4_lockt *lockt = &u->lockt;
8196         struct file_lock *file_lock = NULL;      6231         struct file_lock *file_lock = NULL;
8197         struct nfs4_lockowner *lo = NULL;        6232         struct nfs4_lockowner *lo = NULL;
8198         __be32 status;                           6233         __be32 status;
8199         struct nfsd_net *nn = net_generic(SVC    6234         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
8200                                                  6235 
8201         if (locks_in_grace(SVC_NET(rqstp)))      6236         if (locks_in_grace(SVC_NET(rqstp)))
8202                 return nfserr_grace;             6237                 return nfserr_grace;
8203                                                  6238 
8204         if (check_lock_length(lockt->lt_offse    6239         if (check_lock_length(lockt->lt_offset, lockt->lt_length))
8205                  return nfserr_inval;            6240                  return nfserr_inval;
8206                                                  6241 
8207         if (!nfsd4_has_session(cstate)) {        6242         if (!nfsd4_has_session(cstate)) {
8208                 status = set_client(&lockt->l !! 6243                 status = lookup_clientid(&lockt->lt_clientid, cstate, nn);
8209                 if (status)                      6244                 if (status)
8210                         goto out;                6245                         goto out;
8211         }                                        6246         }
8212                                                  6247 
8213         if ((status = fh_verify(rqstp, &cstat    6248         if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0)))
8214                 goto out;                        6249                 goto out;
8215                                                  6250 
8216         file_lock = locks_alloc_lock();          6251         file_lock = locks_alloc_lock();
8217         if (!file_lock) {                        6252         if (!file_lock) {
8218                 dprintk("NFSD: %s: unable to     6253                 dprintk("NFSD: %s: unable to allocate lock!\n", __func__);
8219                 status = nfserr_jukebox;         6254                 status = nfserr_jukebox;
8220                 goto out;                        6255                 goto out;
8221         }                                        6256         }
8222                                                  6257 
8223         switch (lockt->lt_type) {                6258         switch (lockt->lt_type) {
8224                 case NFS4_READ_LT:               6259                 case NFS4_READ_LT:
8225                 case NFS4_READW_LT:              6260                 case NFS4_READW_LT:
8226                         file_lock->c.flc_type !! 6261                         file_lock->fl_type = F_RDLCK;
8227                         break;                   6262                         break;
8228                 case NFS4_WRITE_LT:              6263                 case NFS4_WRITE_LT:
8229                 case NFS4_WRITEW_LT:             6264                 case NFS4_WRITEW_LT:
8230                         file_lock->c.flc_type !! 6265                         file_lock->fl_type = F_WRLCK;
8231                         break;                   6266                         break;
8232                 default:                         6267                 default:
8233                         dprintk("NFSD: nfs4_l    6268                         dprintk("NFSD: nfs4_lockt: bad lock type!\n");
8234                         status = nfserr_inval    6269                         status = nfserr_inval;
8235                         goto out;                6270                         goto out;
8236         }                                        6271         }
8237                                                  6272 
8238         lo = find_lockowner_str(cstate->clp,     6273         lo = find_lockowner_str(cstate->clp, &lockt->lt_owner);
8239         if (lo)                                  6274         if (lo)
8240                 file_lock->c.flc_owner = (fl_ !! 6275                 file_lock->fl_owner = (fl_owner_t)lo;
8241         file_lock->c.flc_pid = current->tgid; !! 6276         file_lock->fl_pid = current->tgid;
8242         file_lock->c.flc_flags = FL_POSIX;    !! 6277         file_lock->fl_flags = FL_POSIX;
8243                                                  6278 
8244         file_lock->fl_start = lockt->lt_offse    6279         file_lock->fl_start = lockt->lt_offset;
8245         file_lock->fl_end = last_byte_offset(    6280         file_lock->fl_end = last_byte_offset(lockt->lt_offset, lockt->lt_length);
8246                                                  6281 
8247         nfs4_transform_lock_offset(file_lock)    6282         nfs4_transform_lock_offset(file_lock);
8248                                                  6283 
8249         status = nfsd_test_lock(rqstp, &cstat    6284         status = nfsd_test_lock(rqstp, &cstate->current_fh, file_lock);
8250         if (status)                              6285         if (status)
8251                 goto out;                        6286                 goto out;
8252                                                  6287 
8253         if (file_lock->c.flc_type != F_UNLCK) !! 6288         if (file_lock->fl_type != F_UNLCK) {
8254                 status = nfserr_denied;          6289                 status = nfserr_denied;
8255                 nfs4_set_lock_denied(file_loc    6290                 nfs4_set_lock_denied(file_lock, &lockt->lt_denied);
8256         }                                        6291         }
8257 out:                                             6292 out:
8258         if (lo)                                  6293         if (lo)
8259                 nfs4_put_stateowner(&lo->lo_o    6294                 nfs4_put_stateowner(&lo->lo_owner);
8260         if (file_lock)                           6295         if (file_lock)
8261                 locks_free_lock(file_lock);      6296                 locks_free_lock(file_lock);
8262         return status;                           6297         return status;
8263 }                                                6298 }
8264                                                  6299 
8265 void nfsd4_lockt_release(union nfsd4_op_u *u) << 
8266 {                                             << 
8267         struct nfsd4_lockt *lockt = &u->lockt << 
8268         struct nfsd4_lock_denied *deny = &loc << 
8269                                               << 
8270         kfree(deny->ld_owner.data);           << 
8271 }                                             << 
8272                                               << 
8273 __be32                                           6300 __be32
8274 nfsd4_locku(struct svc_rqst *rqstp, struct nf    6301 nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
8275             union nfsd4_op_u *u)                 6302             union nfsd4_op_u *u)
8276 {                                                6303 {
8277         struct nfsd4_locku *locku = &u->locku    6304         struct nfsd4_locku *locku = &u->locku;
8278         struct nfs4_ol_stateid *stp;             6305         struct nfs4_ol_stateid *stp;
8279         struct nfsd_file *nf = NULL;          !! 6306         struct file *filp = NULL;
8280         struct file_lock *file_lock = NULL;      6307         struct file_lock *file_lock = NULL;
8281         __be32 status;                           6308         __be32 status;
8282         int err;                                 6309         int err;
8283         struct nfsd_net *nn = net_generic(SVC    6310         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
8284                                                  6311 
8285         dprintk("NFSD: nfsd4_locku: start=%Ld    6312         dprintk("NFSD: nfsd4_locku: start=%Ld length=%Ld\n",
8286                 (long long) locku->lu_offset,    6313                 (long long) locku->lu_offset,
8287                 (long long) locku->lu_length)    6314                 (long long) locku->lu_length);
8288                                                  6315 
8289         if (check_lock_length(locku->lu_offse    6316         if (check_lock_length(locku->lu_offset, locku->lu_length))
8290                  return nfserr_inval;            6317                  return nfserr_inval;
8291                                                  6318 
8292         status = nfs4_preprocess_seqid_op(cst    6319         status = nfs4_preprocess_seqid_op(cstate, locku->lu_seqid,
8293                                           &lo !! 6320                                         &locku->lu_stateid, NFS4_LOCK_STID,
8294                                           &st !! 6321                                         &stp, nn);
8295         if (status)                              6322         if (status)
8296                 goto out;                        6323                 goto out;
8297         nf = find_any_file(stp->st_stid.sc_fi !! 6324         filp = find_any_file(stp->st_stid.sc_file);
8298         if (!nf) {                            !! 6325         if (!filp) {
8299                 status = nfserr_lock_range;      6326                 status = nfserr_lock_range;
8300                 goto put_stateid;                6327                 goto put_stateid;
8301         }                                        6328         }
8302         file_lock = locks_alloc_lock();          6329         file_lock = locks_alloc_lock();
8303         if (!file_lock) {                        6330         if (!file_lock) {
8304                 dprintk("NFSD: %s: unable to     6331                 dprintk("NFSD: %s: unable to allocate lock!\n", __func__);
8305                 status = nfserr_jukebox;         6332                 status = nfserr_jukebox;
8306                 goto put_file;                !! 6333                 goto fput;
8307         }                                        6334         }
8308                                                  6335 
8309         file_lock->c.flc_type = F_UNLCK;      !! 6336         file_lock->fl_type = F_UNLCK;
8310         file_lock->c.flc_owner = (fl_owner_t) !! 6337         file_lock->fl_owner = (fl_owner_t)lockowner(nfs4_get_stateowner(stp->st_stateowner));
8311         file_lock->c.flc_pid = current->tgid; !! 6338         file_lock->fl_pid = current->tgid;
8312         file_lock->c.flc_file = nf->nf_file;  !! 6339         file_lock->fl_file = filp;
8313         file_lock->c.flc_flags = FL_POSIX;    !! 6340         file_lock->fl_flags = FL_POSIX;
8314         file_lock->fl_lmops = &nfsd_posix_mng    6341         file_lock->fl_lmops = &nfsd_posix_mng_ops;
8315         file_lock->fl_start = locku->lu_offse    6342         file_lock->fl_start = locku->lu_offset;
8316                                                  6343 
8317         file_lock->fl_end = last_byte_offset(    6344         file_lock->fl_end = last_byte_offset(locku->lu_offset,
8318                                                  6345                                                 locku->lu_length);
8319         nfs4_transform_lock_offset(file_lock)    6346         nfs4_transform_lock_offset(file_lock);
8320                                                  6347 
8321         err = vfs_lock_file(nf->nf_file, F_SE !! 6348         err = vfs_lock_file(filp, F_SETLK, file_lock, NULL);
8322         if (err) {                               6349         if (err) {
8323                 dprintk("NFSD: nfs4_locku: vf    6350                 dprintk("NFSD: nfs4_locku: vfs_lock_file failed!\n");
8324                 goto out_nfserr;                 6351                 goto out_nfserr;
8325         }                                        6352         }
8326         nfs4_inc_and_copy_stateid(&locku->lu_    6353         nfs4_inc_and_copy_stateid(&locku->lu_stateid, &stp->st_stid);
8327 put_file:                                     !! 6354 fput:
8328         nfsd_file_put(nf);                    !! 6355         fput(filp);
8329 put_stateid:                                     6356 put_stateid:
8330         mutex_unlock(&stp->st_mutex);            6357         mutex_unlock(&stp->st_mutex);
8331         nfs4_put_stid(&stp->st_stid);            6358         nfs4_put_stid(&stp->st_stid);
8332 out:                                             6359 out:
8333         nfsd4_bump_seqid(cstate, status);        6360         nfsd4_bump_seqid(cstate, status);
8334         if (file_lock)                           6361         if (file_lock)
8335                 locks_free_lock(file_lock);      6362                 locks_free_lock(file_lock);
8336         return status;                           6363         return status;
8337                                                  6364 
8338 out_nfserr:                                      6365 out_nfserr:
8339         status = nfserrno(err);                  6366         status = nfserrno(err);
8340         goto put_file;                        !! 6367         goto fput;
8341 }                                                6368 }
8342                                                  6369 
8343 /*                                               6370 /*
8344  * returns                                       6371  * returns
8345  *      true:  locks held by lockowner           6372  *      true:  locks held by lockowner
8346  *      false: no locks held by lockowner        6373  *      false: no locks held by lockowner
8347  */                                              6374  */
8348 static bool                                      6375 static bool
8349 check_for_locks(struct nfs4_file *fp, struct     6376 check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner)
8350 {                                                6377 {
8351         struct file_lock *fl;                    6378         struct file_lock *fl;
8352         int status = false;                      6379         int status = false;
8353         struct nfsd_file *nf;                 !! 6380         struct file *filp = find_any_file(fp);
8354         struct inode *inode;                     6381         struct inode *inode;
8355         struct file_lock_context *flctx;         6382         struct file_lock_context *flctx;
8356                                                  6383 
8357         spin_lock(&fp->fi_lock);              !! 6384         if (!filp) {
8358         nf = find_any_file_locked(fp);        << 
8359         if (!nf) {                            << 
8360                 /* Any valid lock stateid sho    6385                 /* Any valid lock stateid should have some sort of access */
8361                 WARN_ON_ONCE(1);                 6386                 WARN_ON_ONCE(1);
8362                 goto out;                     !! 6387                 return status;
8363         }                                        6388         }
8364                                                  6389 
8365         inode = file_inode(nf->nf_file);      !! 6390         inode = locks_inode(filp);
8366         flctx = locks_inode_context(inode);   !! 6391         flctx = inode->i_flctx;
8367                                                  6392 
8368         if (flctx && !list_empty_careful(&flc    6393         if (flctx && !list_empty_careful(&flctx->flc_posix)) {
8369                 spin_lock(&flctx->flc_lock);     6394                 spin_lock(&flctx->flc_lock);
8370                 for_each_file_lock(fl, &flctx !! 6395                 list_for_each_entry(fl, &flctx->flc_posix, fl_list) {
8371                         if (fl->c.flc_owner = !! 6396                         if (fl->fl_owner == (fl_owner_t)lowner) {
8372                                 status = true    6397                                 status = true;
8373                                 break;           6398                                 break;
8374                         }                        6399                         }
8375                 }                                6400                 }
8376                 spin_unlock(&flctx->flc_lock)    6401                 spin_unlock(&flctx->flc_lock);
8377         }                                        6402         }
8378 out:                                          !! 6403         fput(filp);
8379         spin_unlock(&fp->fi_lock);            << 
8380         return status;                           6404         return status;
8381 }                                                6405 }
8382                                                  6406 
8383 /**                                           << 
8384  * nfsd4_release_lockowner - process NFSv4.0  << 
8385  * @rqstp: RPC transaction                    << 
8386  * @cstate: NFSv4 COMPOUND state              << 
8387  * @u: RELEASE_LOCKOWNER arguments            << 
8388  *                                            << 
8389  * Check if there are any locks still held an << 
8390  * and any lock state that is owned.          << 
8391  *                                            << 
8392  * Return values:                             << 
8393  *   %nfs_ok: lockowner released or not found << 
8394  *   %nfserr_locks_held: lockowner still in u << 
8395  *   %nfserr_stale_clientid: clientid no long << 
8396  *   %nfserr_expired: clientid not recognized << 
8397  */                                           << 
8398 __be32                                           6407 __be32
8399 nfsd4_release_lockowner(struct svc_rqst *rqst    6408 nfsd4_release_lockowner(struct svc_rqst *rqstp,
8400                         struct nfsd4_compound    6409                         struct nfsd4_compound_state *cstate,
8401                         union nfsd4_op_u *u)     6410                         union nfsd4_op_u *u)
8402 {                                                6411 {
8403         struct nfsd4_release_lockowner *rlock    6412         struct nfsd4_release_lockowner *rlockowner = &u->release_lockowner;
8404         struct nfsd_net *nn = net_generic(SVC << 
8405         clientid_t *clid = &rlockowner->rl_cl    6413         clientid_t *clid = &rlockowner->rl_clientid;
                                                   >> 6414         struct nfs4_stateowner *sop;
                                                   >> 6415         struct nfs4_lockowner *lo = NULL;
8406         struct nfs4_ol_stateid *stp;             6416         struct nfs4_ol_stateid *stp;
8407         struct nfs4_lockowner *lo;            !! 6417         struct xdr_netobj *owner = &rlockowner->rl_owner;
8408         struct nfs4_client *clp;              !! 6418         unsigned int hashval = ownerstr_hashval(owner);
8409         LIST_HEAD(reaplist);                  << 
8410         __be32 status;                           6419         __be32 status;
                                                   >> 6420         struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
                                                   >> 6421         struct nfs4_client *clp;
                                                   >> 6422         LIST_HEAD (reaplist);
8411                                                  6423 
8412         dprintk("nfsd4_release_lockowner clie    6424         dprintk("nfsd4_release_lockowner clientid: (%08x/%08x):\n",
8413                 clid->cl_boot, clid->cl_id);     6425                 clid->cl_boot, clid->cl_id);
8414                                                  6426 
8415         status = set_client(clid, cstate, nn) !! 6427         status = lookup_clientid(clid, cstate, nn);
8416         if (status)                              6428         if (status)
8417                 return status;                   6429                 return status;
8418         clp = cstate->clp;                    << 
8419                                                  6430 
                                                   >> 6431         clp = cstate->clp;
                                                   >> 6432         /* Find the matching lock stateowner */
8420         spin_lock(&clp->cl_lock);                6433         spin_lock(&clp->cl_lock);
8421         lo = find_lockowner_str_locked(clp, & !! 6434         list_for_each_entry(sop, &clp->cl_ownerstr_hashtbl[hashval],
                                                   >> 6435                             so_strhash) {
                                                   >> 6436 
                                                   >> 6437                 if (sop->so_is_open_owner || !same_owner_str(sop, owner))
                                                   >> 6438                         continue;
                                                   >> 6439 
                                                   >> 6440                 /* see if there are still any locks associated with it */
                                                   >> 6441                 lo = lockowner(sop);
                                                   >> 6442                 list_for_each_entry(stp, &sop->so_stateids, st_perstateowner) {
                                                   >> 6443                         if (check_for_locks(stp->st_stid.sc_file, lo)) {
                                                   >> 6444                                 status = nfserr_locks_held;
                                                   >> 6445                                 spin_unlock(&clp->cl_lock);
                                                   >> 6446                                 return status;
                                                   >> 6447                         }
                                                   >> 6448                 }
                                                   >> 6449 
                                                   >> 6450                 nfs4_get_stateowner(sop);
                                                   >> 6451                 break;
                                                   >> 6452         }
8422         if (!lo) {                               6453         if (!lo) {
8423                 spin_unlock(&clp->cl_lock);      6454                 spin_unlock(&clp->cl_lock);
8424                 return nfs_ok;                !! 6455                 return status;
8425         }                                        6456         }
8426                                                  6457 
8427         list_for_each_entry(stp, &lo->lo_owne << 
8428                 if (check_for_locks(stp->st_s << 
8429                         spin_unlock(&clp->cl_ << 
8430                         nfs4_put_stateowner(& << 
8431                         return nfserr_locks_h << 
8432                 }                             << 
8433         }                                     << 
8434         unhash_lockowner_locked(lo);             6458         unhash_lockowner_locked(lo);
8435         while (!list_empty(&lo->lo_owner.so_s    6459         while (!list_empty(&lo->lo_owner.so_stateids)) {
8436                 stp = list_first_entry(&lo->l    6460                 stp = list_first_entry(&lo->lo_owner.so_stateids,
8437                                        struct    6461                                        struct nfs4_ol_stateid,
8438                                        st_per    6462                                        st_perstateowner);
8439                 unhash_lock_stateid(stp);     !! 6463                 WARN_ON(!unhash_lock_stateid(stp));
8440                 put_ol_stateid_locked(stp, &r    6464                 put_ol_stateid_locked(stp, &reaplist);
8441         }                                        6465         }
8442         spin_unlock(&clp->cl_lock);              6466         spin_unlock(&clp->cl_lock);
8443                                               << 
8444         free_ol_stateid_reaplist(&reaplist);     6467         free_ol_stateid_reaplist(&reaplist);
8445         remove_blocked_locks(lo);                6468         remove_blocked_locks(lo);
8446         nfs4_put_stateowner(&lo->lo_owner);      6469         nfs4_put_stateowner(&lo->lo_owner);
8447         return nfs_ok;                        !! 6470 
                                                   >> 6471         return status;
8448 }                                                6472 }
8449                                                  6473 
8450 static inline struct nfs4_client_reclaim *       6474 static inline struct nfs4_client_reclaim *
8451 alloc_reclaim(void)                              6475 alloc_reclaim(void)
8452 {                                                6476 {
8453         return kmalloc(sizeof(struct nfs4_cli    6477         return kmalloc(sizeof(struct nfs4_client_reclaim), GFP_KERNEL);
8454 }                                                6478 }
8455                                                  6479 
8456 bool                                             6480 bool
8457 nfs4_has_reclaimed_state(struct xdr_netobj na    6481 nfs4_has_reclaimed_state(struct xdr_netobj name, struct nfsd_net *nn)
8458 {                                                6482 {
8459         struct nfs4_client_reclaim *crp;         6483         struct nfs4_client_reclaim *crp;
8460                                                  6484 
8461         crp = nfsd4_find_reclaim_client(name,    6485         crp = nfsd4_find_reclaim_client(name, nn);
8462         return (crp && crp->cr_clp);             6486         return (crp && crp->cr_clp);
8463 }                                                6487 }
8464                                                  6488 
8465 /*                                               6489 /*
8466  * failure => all reset bets are off, nfserr_    6490  * failure => all reset bets are off, nfserr_no_grace...
8467  *                                               6491  *
8468  * The caller is responsible for freeing name    6492  * The caller is responsible for freeing name.data if NULL is returned (it
8469  * will be freed in nfs4_remove_reclaim_recor    6493  * will be freed in nfs4_remove_reclaim_record in the normal case).
8470  */                                              6494  */
8471 struct nfs4_client_reclaim *                     6495 struct nfs4_client_reclaim *
8472 nfs4_client_to_reclaim(struct xdr_netobj name !! 6496 nfs4_client_to_reclaim(struct xdr_netobj name, struct nfsd_net *nn)
8473                 struct nfsd_net *nn)          << 
8474 {                                                6497 {
8475         unsigned int strhashval;                 6498         unsigned int strhashval;
8476         struct nfs4_client_reclaim *crp;         6499         struct nfs4_client_reclaim *crp;
8477                                                  6500 
                                                   >> 6501         dprintk("NFSD nfs4_client_to_reclaim NAME: %.*s\n", name.len, name.data);
8478         crp = alloc_reclaim();                   6502         crp = alloc_reclaim();
8479         if (crp) {                               6503         if (crp) {
8480                 strhashval = clientstr_hashva    6504                 strhashval = clientstr_hashval(name);
8481                 INIT_LIST_HEAD(&crp->cr_strha    6505                 INIT_LIST_HEAD(&crp->cr_strhash);
8482                 list_add(&crp->cr_strhash, &n    6506                 list_add(&crp->cr_strhash, &nn->reclaim_str_hashtbl[strhashval]);
8483                 crp->cr_name.data = name.data    6507                 crp->cr_name.data = name.data;
8484                 crp->cr_name.len = name.len;     6508                 crp->cr_name.len = name.len;
8485                 crp->cr_princhash.data = prin << 
8486                 crp->cr_princhash.len = princ << 
8487                 crp->cr_clp = NULL;              6509                 crp->cr_clp = NULL;
8488                 nn->reclaim_str_hashtbl_size+    6510                 nn->reclaim_str_hashtbl_size++;
8489         }                                        6511         }
8490         return crp;                              6512         return crp;
8491 }                                                6513 }
8492                                                  6514 
8493 void                                             6515 void
8494 nfs4_remove_reclaim_record(struct nfs4_client    6516 nfs4_remove_reclaim_record(struct nfs4_client_reclaim *crp, struct nfsd_net *nn)
8495 {                                                6517 {
8496         list_del(&crp->cr_strhash);              6518         list_del(&crp->cr_strhash);
8497         kfree(crp->cr_name.data);                6519         kfree(crp->cr_name.data);
8498         kfree(crp->cr_princhash.data);        << 
8499         kfree(crp);                              6520         kfree(crp);
8500         nn->reclaim_str_hashtbl_size--;          6521         nn->reclaim_str_hashtbl_size--;
8501 }                                                6522 }
8502                                                  6523 
8503 void                                             6524 void
8504 nfs4_release_reclaim(struct nfsd_net *nn)        6525 nfs4_release_reclaim(struct nfsd_net *nn)
8505 {                                                6526 {
8506         struct nfs4_client_reclaim *crp = NUL    6527         struct nfs4_client_reclaim *crp = NULL;
8507         int i;                                   6528         int i;
8508                                                  6529 
8509         for (i = 0; i < CLIENT_HASH_SIZE; i++    6530         for (i = 0; i < CLIENT_HASH_SIZE; i++) {
8510                 while (!list_empty(&nn->recla    6531                 while (!list_empty(&nn->reclaim_str_hashtbl[i])) {
8511                         crp = list_entry(nn->    6532                         crp = list_entry(nn->reclaim_str_hashtbl[i].next,
8512                                         struc    6533                                         struct nfs4_client_reclaim, cr_strhash);
8513                         nfs4_remove_reclaim_r    6534                         nfs4_remove_reclaim_record(crp, nn);
8514                 }                                6535                 }
8515         }                                        6536         }
8516         WARN_ON_ONCE(nn->reclaim_str_hashtbl_    6537         WARN_ON_ONCE(nn->reclaim_str_hashtbl_size);
8517 }                                                6538 }
8518                                                  6539 
8519 /*                                               6540 /*
8520  * called from OPEN, CLAIM_PREVIOUS with a ne    6541  * called from OPEN, CLAIM_PREVIOUS with a new clientid. */
8521 struct nfs4_client_reclaim *                     6542 struct nfs4_client_reclaim *
8522 nfsd4_find_reclaim_client(struct xdr_netobj n    6543 nfsd4_find_reclaim_client(struct xdr_netobj name, struct nfsd_net *nn)
8523 {                                                6544 {
8524         unsigned int strhashval;                 6545         unsigned int strhashval;
8525         struct nfs4_client_reclaim *crp = NUL    6546         struct nfs4_client_reclaim *crp = NULL;
8526                                                  6547 
                                                   >> 6548         dprintk("NFSD: nfs4_find_reclaim_client for name %.*s\n", name.len, name.data);
                                                   >> 6549 
8527         strhashval = clientstr_hashval(name);    6550         strhashval = clientstr_hashval(name);
8528         list_for_each_entry(crp, &nn->reclaim    6551         list_for_each_entry(crp, &nn->reclaim_str_hashtbl[strhashval], cr_strhash) {
8529                 if (compare_blob(&crp->cr_nam    6552                 if (compare_blob(&crp->cr_name, &name) == 0) {
8530                         return crp;              6553                         return crp;
8531                 }                                6554                 }
8532         }                                        6555         }
8533         return NULL;                             6556         return NULL;
8534 }                                                6557 }
8535                                                  6558 
                                                   >> 6559 /*
                                                   >> 6560 * Called from OPEN. Look for clientid in reclaim list.
                                                   >> 6561 */
8536 __be32                                           6562 __be32
8537 nfs4_check_open_reclaim(struct nfs4_client *c !! 6563 nfs4_check_open_reclaim(clientid_t *clid,
                                                   >> 6564                 struct nfsd4_compound_state *cstate,
                                                   >> 6565                 struct nfsd_net *nn)
8538 {                                                6566 {
8539         if (test_bit(NFSD4_CLIENT_RECLAIM_COM !! 6567         __be32 status;
                                                   >> 6568 
                                                   >> 6569         /* find clientid in conf_id_hashtbl */
                                                   >> 6570         status = lookup_clientid(clid, cstate, nn);
                                                   >> 6571         if (status)
                                                   >> 6572                 return nfserr_reclaim_bad;
                                                   >> 6573 
                                                   >> 6574         if (test_bit(NFSD4_CLIENT_RECLAIM_COMPLETE, &cstate->clp->cl_flags))
8540                 return nfserr_no_grace;          6575                 return nfserr_no_grace;
8541                                                  6576 
8542         if (nfsd4_client_record_check(clp))   !! 6577         if (nfsd4_client_record_check(cstate->clp))
8543                 return nfserr_reclaim_bad;       6578                 return nfserr_reclaim_bad;
8544                                                  6579 
8545         return nfs_ok;                           6580         return nfs_ok;
8546 }                                                6581 }
8547                                                  6582 
                                                   >> 6583 #ifdef CONFIG_NFSD_FAULT_INJECTION
                                                   >> 6584 static inline void
                                                   >> 6585 put_client(struct nfs4_client *clp)
                                                   >> 6586 {
                                                   >> 6587         atomic_dec(&clp->cl_refcount);
                                                   >> 6588 }
                                                   >> 6589 
                                                   >> 6590 static struct nfs4_client *
                                                   >> 6591 nfsd_find_client(struct sockaddr_storage *addr, size_t addr_size)
                                                   >> 6592 {
                                                   >> 6593         struct nfs4_client *clp;
                                                   >> 6594         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6595                                           nfsd_net_id);
                                                   >> 6596 
                                                   >> 6597         if (!nfsd_netns_ready(nn))
                                                   >> 6598                 return NULL;
                                                   >> 6599 
                                                   >> 6600         list_for_each_entry(clp, &nn->client_lru, cl_lru) {
                                                   >> 6601                 if (memcmp(&clp->cl_addr, addr, addr_size) == 0)
                                                   >> 6602                         return clp;
                                                   >> 6603         }
                                                   >> 6604         return NULL;
                                                   >> 6605 }
                                                   >> 6606 
                                                   >> 6607 u64
                                                   >> 6608 nfsd_inject_print_clients(void)
                                                   >> 6609 {
                                                   >> 6610         struct nfs4_client *clp;
                                                   >> 6611         u64 count = 0;
                                                   >> 6612         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6613                                           nfsd_net_id);
                                                   >> 6614         char buf[INET6_ADDRSTRLEN];
                                                   >> 6615 
                                                   >> 6616         if (!nfsd_netns_ready(nn))
                                                   >> 6617                 return 0;
                                                   >> 6618 
                                                   >> 6619         spin_lock(&nn->client_lock);
                                                   >> 6620         list_for_each_entry(clp, &nn->client_lru, cl_lru) {
                                                   >> 6621                 rpc_ntop((struct sockaddr *)&clp->cl_addr, buf, sizeof(buf));
                                                   >> 6622                 pr_info("NFS Client: %s\n", buf);
                                                   >> 6623                 ++count;
                                                   >> 6624         }
                                                   >> 6625         spin_unlock(&nn->client_lock);
                                                   >> 6626 
                                                   >> 6627         return count;
                                                   >> 6628 }
                                                   >> 6629 
                                                   >> 6630 u64
                                                   >> 6631 nfsd_inject_forget_client(struct sockaddr_storage *addr, size_t addr_size)
                                                   >> 6632 {
                                                   >> 6633         u64 count = 0;
                                                   >> 6634         struct nfs4_client *clp;
                                                   >> 6635         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6636                                           nfsd_net_id);
                                                   >> 6637 
                                                   >> 6638         if (!nfsd_netns_ready(nn))
                                                   >> 6639                 return count;
                                                   >> 6640 
                                                   >> 6641         spin_lock(&nn->client_lock);
                                                   >> 6642         clp = nfsd_find_client(addr, addr_size);
                                                   >> 6643         if (clp) {
                                                   >> 6644                 if (mark_client_expired_locked(clp) == nfs_ok)
                                                   >> 6645                         ++count;
                                                   >> 6646                 else
                                                   >> 6647                         clp = NULL;
                                                   >> 6648         }
                                                   >> 6649         spin_unlock(&nn->client_lock);
                                                   >> 6650 
                                                   >> 6651         if (clp)
                                                   >> 6652                 expire_client(clp);
                                                   >> 6653 
                                                   >> 6654         return count;
                                                   >> 6655 }
                                                   >> 6656 
                                                   >> 6657 u64
                                                   >> 6658 nfsd_inject_forget_clients(u64 max)
                                                   >> 6659 {
                                                   >> 6660         u64 count = 0;
                                                   >> 6661         struct nfs4_client *clp, *next;
                                                   >> 6662         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6663                                                 nfsd_net_id);
                                                   >> 6664         LIST_HEAD(reaplist);
                                                   >> 6665 
                                                   >> 6666         if (!nfsd_netns_ready(nn))
                                                   >> 6667                 return count;
                                                   >> 6668 
                                                   >> 6669         spin_lock(&nn->client_lock);
                                                   >> 6670         list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) {
                                                   >> 6671                 if (mark_client_expired_locked(clp) == nfs_ok) {
                                                   >> 6672                         list_add(&clp->cl_lru, &reaplist);
                                                   >> 6673                         if (max != 0 && ++count >= max)
                                                   >> 6674                                 break;
                                                   >> 6675                 }
                                                   >> 6676         }
                                                   >> 6677         spin_unlock(&nn->client_lock);
                                                   >> 6678 
                                                   >> 6679         list_for_each_entry_safe(clp, next, &reaplist, cl_lru)
                                                   >> 6680                 expire_client(clp);
                                                   >> 6681 
                                                   >> 6682         return count;
                                                   >> 6683 }
                                                   >> 6684 
                                                   >> 6685 static void nfsd_print_count(struct nfs4_client *clp, unsigned int count,
                                                   >> 6686                              const char *type)
                                                   >> 6687 {
                                                   >> 6688         char buf[INET6_ADDRSTRLEN];
                                                   >> 6689         rpc_ntop((struct sockaddr *)&clp->cl_addr, buf, sizeof(buf));
                                                   >> 6690         printk(KERN_INFO "NFS Client: %s has %u %s\n", buf, count, type);
                                                   >> 6691 }
                                                   >> 6692 
                                                   >> 6693 static void
                                                   >> 6694 nfsd_inject_add_lock_to_list(struct nfs4_ol_stateid *lst,
                                                   >> 6695                              struct list_head *collect)
                                                   >> 6696 {
                                                   >> 6697         struct nfs4_client *clp = lst->st_stid.sc_client;
                                                   >> 6698         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6699                                           nfsd_net_id);
                                                   >> 6700 
                                                   >> 6701         if (!collect)
                                                   >> 6702                 return;
                                                   >> 6703 
                                                   >> 6704         lockdep_assert_held(&nn->client_lock);
                                                   >> 6705         atomic_inc(&clp->cl_refcount);
                                                   >> 6706         list_add(&lst->st_locks, collect);
                                                   >> 6707 }
                                                   >> 6708 
                                                   >> 6709 static u64 nfsd_foreach_client_lock(struct nfs4_client *clp, u64 max,
                                                   >> 6710                                     struct list_head *collect,
                                                   >> 6711                                     bool (*func)(struct nfs4_ol_stateid *))
                                                   >> 6712 {
                                                   >> 6713         struct nfs4_openowner *oop;
                                                   >> 6714         struct nfs4_ol_stateid *stp, *st_next;
                                                   >> 6715         struct nfs4_ol_stateid *lst, *lst_next;
                                                   >> 6716         u64 count = 0;
                                                   >> 6717 
                                                   >> 6718         spin_lock(&clp->cl_lock);
                                                   >> 6719         list_for_each_entry(oop, &clp->cl_openowners, oo_perclient) {
                                                   >> 6720                 list_for_each_entry_safe(stp, st_next,
                                                   >> 6721                                 &oop->oo_owner.so_stateids, st_perstateowner) {
                                                   >> 6722                         list_for_each_entry_safe(lst, lst_next,
                                                   >> 6723                                         &stp->st_locks, st_locks) {
                                                   >> 6724                                 if (func) {
                                                   >> 6725                                         if (func(lst))
                                                   >> 6726                                                 nfsd_inject_add_lock_to_list(lst,
                                                   >> 6727                                                                         collect);
                                                   >> 6728                                 }
                                                   >> 6729                                 ++count;
                                                   >> 6730                                 /*
                                                   >> 6731                                  * Despite the fact that these functions deal
                                                   >> 6732                                  * with 64-bit integers for "count", we must
                                                   >> 6733                                  * ensure that it doesn't blow up the
                                                   >> 6734                                  * clp->cl_refcount. Throw a warning if we
                                                   >> 6735                                  * start to approach INT_MAX here.
                                                   >> 6736                                  */
                                                   >> 6737                                 WARN_ON_ONCE(count == (INT_MAX / 2));
                                                   >> 6738                                 if (count == max)
                                                   >> 6739                                         goto out;
                                                   >> 6740                         }
                                                   >> 6741                 }
                                                   >> 6742         }
                                                   >> 6743 out:
                                                   >> 6744         spin_unlock(&clp->cl_lock);
                                                   >> 6745 
                                                   >> 6746         return count;
                                                   >> 6747 }
                                                   >> 6748 
                                                   >> 6749 static u64
                                                   >> 6750 nfsd_collect_client_locks(struct nfs4_client *clp, struct list_head *collect,
                                                   >> 6751                           u64 max)
                                                   >> 6752 {
                                                   >> 6753         return nfsd_foreach_client_lock(clp, max, collect, unhash_lock_stateid);
                                                   >> 6754 }
                                                   >> 6755 
                                                   >> 6756 static u64
                                                   >> 6757 nfsd_print_client_locks(struct nfs4_client *clp)
                                                   >> 6758 {
                                                   >> 6759         u64 count = nfsd_foreach_client_lock(clp, 0, NULL, NULL);
                                                   >> 6760         nfsd_print_count(clp, count, "locked files");
                                                   >> 6761         return count;
                                                   >> 6762 }
                                                   >> 6763 
                                                   >> 6764 u64
                                                   >> 6765 nfsd_inject_print_locks(void)
                                                   >> 6766 {
                                                   >> 6767         struct nfs4_client *clp;
                                                   >> 6768         u64 count = 0;
                                                   >> 6769         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6770                                                 nfsd_net_id);
                                                   >> 6771 
                                                   >> 6772         if (!nfsd_netns_ready(nn))
                                                   >> 6773                 return 0;
                                                   >> 6774 
                                                   >> 6775         spin_lock(&nn->client_lock);
                                                   >> 6776         list_for_each_entry(clp, &nn->client_lru, cl_lru)
                                                   >> 6777                 count += nfsd_print_client_locks(clp);
                                                   >> 6778         spin_unlock(&nn->client_lock);
                                                   >> 6779 
                                                   >> 6780         return count;
                                                   >> 6781 }
                                                   >> 6782 
                                                   >> 6783 static void
                                                   >> 6784 nfsd_reap_locks(struct list_head *reaplist)
                                                   >> 6785 {
                                                   >> 6786         struct nfs4_client *clp;
                                                   >> 6787         struct nfs4_ol_stateid *stp, *next;
                                                   >> 6788 
                                                   >> 6789         list_for_each_entry_safe(stp, next, reaplist, st_locks) {
                                                   >> 6790                 list_del_init(&stp->st_locks);
                                                   >> 6791                 clp = stp->st_stid.sc_client;
                                                   >> 6792                 nfs4_put_stid(&stp->st_stid);
                                                   >> 6793                 put_client(clp);
                                                   >> 6794         }
                                                   >> 6795 }
                                                   >> 6796 
                                                   >> 6797 u64
                                                   >> 6798 nfsd_inject_forget_client_locks(struct sockaddr_storage *addr, size_t addr_size)
                                                   >> 6799 {
                                                   >> 6800         unsigned int count = 0;
                                                   >> 6801         struct nfs4_client *clp;
                                                   >> 6802         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6803                                                 nfsd_net_id);
                                                   >> 6804         LIST_HEAD(reaplist);
                                                   >> 6805 
                                                   >> 6806         if (!nfsd_netns_ready(nn))
                                                   >> 6807                 return count;
                                                   >> 6808 
                                                   >> 6809         spin_lock(&nn->client_lock);
                                                   >> 6810         clp = nfsd_find_client(addr, addr_size);
                                                   >> 6811         if (clp)
                                                   >> 6812                 count = nfsd_collect_client_locks(clp, &reaplist, 0);
                                                   >> 6813         spin_unlock(&nn->client_lock);
                                                   >> 6814         nfsd_reap_locks(&reaplist);
                                                   >> 6815         return count;
                                                   >> 6816 }
                                                   >> 6817 
                                                   >> 6818 u64
                                                   >> 6819 nfsd_inject_forget_locks(u64 max)
                                                   >> 6820 {
                                                   >> 6821         u64 count = 0;
                                                   >> 6822         struct nfs4_client *clp;
                                                   >> 6823         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6824                                                 nfsd_net_id);
                                                   >> 6825         LIST_HEAD(reaplist);
                                                   >> 6826 
                                                   >> 6827         if (!nfsd_netns_ready(nn))
                                                   >> 6828                 return count;
                                                   >> 6829 
                                                   >> 6830         spin_lock(&nn->client_lock);
                                                   >> 6831         list_for_each_entry(clp, &nn->client_lru, cl_lru) {
                                                   >> 6832                 count += nfsd_collect_client_locks(clp, &reaplist, max - count);
                                                   >> 6833                 if (max != 0 && count >= max)
                                                   >> 6834                         break;
                                                   >> 6835         }
                                                   >> 6836         spin_unlock(&nn->client_lock);
                                                   >> 6837         nfsd_reap_locks(&reaplist);
                                                   >> 6838         return count;
                                                   >> 6839 }
                                                   >> 6840 
                                                   >> 6841 static u64
                                                   >> 6842 nfsd_foreach_client_openowner(struct nfs4_client *clp, u64 max,
                                                   >> 6843                               struct list_head *collect,
                                                   >> 6844                               void (*func)(struct nfs4_openowner *))
                                                   >> 6845 {
                                                   >> 6846         struct nfs4_openowner *oop, *next;
                                                   >> 6847         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6848                                                 nfsd_net_id);
                                                   >> 6849         u64 count = 0;
                                                   >> 6850 
                                                   >> 6851         lockdep_assert_held(&nn->client_lock);
                                                   >> 6852 
                                                   >> 6853         spin_lock(&clp->cl_lock);
                                                   >> 6854         list_for_each_entry_safe(oop, next, &clp->cl_openowners, oo_perclient) {
                                                   >> 6855                 if (func) {
                                                   >> 6856                         func(oop);
                                                   >> 6857                         if (collect) {
                                                   >> 6858                                 atomic_inc(&clp->cl_refcount);
                                                   >> 6859                                 list_add(&oop->oo_perclient, collect);
                                                   >> 6860                         }
                                                   >> 6861                 }
                                                   >> 6862                 ++count;
                                                   >> 6863                 /*
                                                   >> 6864                  * Despite the fact that these functions deal with
                                                   >> 6865                  * 64-bit integers for "count", we must ensure that
                                                   >> 6866                  * it doesn't blow up the clp->cl_refcount. Throw a
                                                   >> 6867                  * warning if we start to approach INT_MAX here.
                                                   >> 6868                  */
                                                   >> 6869                 WARN_ON_ONCE(count == (INT_MAX / 2));
                                                   >> 6870                 if (count == max)
                                                   >> 6871                         break;
                                                   >> 6872         }
                                                   >> 6873         spin_unlock(&clp->cl_lock);
                                                   >> 6874 
                                                   >> 6875         return count;
                                                   >> 6876 }
                                                   >> 6877 
                                                   >> 6878 static u64
                                                   >> 6879 nfsd_print_client_openowners(struct nfs4_client *clp)
                                                   >> 6880 {
                                                   >> 6881         u64 count = nfsd_foreach_client_openowner(clp, 0, NULL, NULL);
                                                   >> 6882 
                                                   >> 6883         nfsd_print_count(clp, count, "openowners");
                                                   >> 6884         return count;
                                                   >> 6885 }
                                                   >> 6886 
                                                   >> 6887 static u64
                                                   >> 6888 nfsd_collect_client_openowners(struct nfs4_client *clp,
                                                   >> 6889                                struct list_head *collect, u64 max)
                                                   >> 6890 {
                                                   >> 6891         return nfsd_foreach_client_openowner(clp, max, collect,
                                                   >> 6892                                                 unhash_openowner_locked);
                                                   >> 6893 }
                                                   >> 6894 
                                                   >> 6895 u64
                                                   >> 6896 nfsd_inject_print_openowners(void)
                                                   >> 6897 {
                                                   >> 6898         struct nfs4_client *clp;
                                                   >> 6899         u64 count = 0;
                                                   >> 6900         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6901                                                 nfsd_net_id);
                                                   >> 6902 
                                                   >> 6903         if (!nfsd_netns_ready(nn))
                                                   >> 6904                 return 0;
                                                   >> 6905 
                                                   >> 6906         spin_lock(&nn->client_lock);
                                                   >> 6907         list_for_each_entry(clp, &nn->client_lru, cl_lru)
                                                   >> 6908                 count += nfsd_print_client_openowners(clp);
                                                   >> 6909         spin_unlock(&nn->client_lock);
                                                   >> 6910 
                                                   >> 6911         return count;
                                                   >> 6912 }
                                                   >> 6913 
                                                   >> 6914 static void
                                                   >> 6915 nfsd_reap_openowners(struct list_head *reaplist)
                                                   >> 6916 {
                                                   >> 6917         struct nfs4_client *clp;
                                                   >> 6918         struct nfs4_openowner *oop, *next;
                                                   >> 6919 
                                                   >> 6920         list_for_each_entry_safe(oop, next, reaplist, oo_perclient) {
                                                   >> 6921                 list_del_init(&oop->oo_perclient);
                                                   >> 6922                 clp = oop->oo_owner.so_client;
                                                   >> 6923                 release_openowner(oop);
                                                   >> 6924                 put_client(clp);
                                                   >> 6925         }
                                                   >> 6926 }
                                                   >> 6927 
                                                   >> 6928 u64
                                                   >> 6929 nfsd_inject_forget_client_openowners(struct sockaddr_storage *addr,
                                                   >> 6930                                      size_t addr_size)
                                                   >> 6931 {
                                                   >> 6932         unsigned int count = 0;
                                                   >> 6933         struct nfs4_client *clp;
                                                   >> 6934         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6935                                                 nfsd_net_id);
                                                   >> 6936         LIST_HEAD(reaplist);
                                                   >> 6937 
                                                   >> 6938         if (!nfsd_netns_ready(nn))
                                                   >> 6939                 return count;
                                                   >> 6940 
                                                   >> 6941         spin_lock(&nn->client_lock);
                                                   >> 6942         clp = nfsd_find_client(addr, addr_size);
                                                   >> 6943         if (clp)
                                                   >> 6944                 count = nfsd_collect_client_openowners(clp, &reaplist, 0);
                                                   >> 6945         spin_unlock(&nn->client_lock);
                                                   >> 6946         nfsd_reap_openowners(&reaplist);
                                                   >> 6947         return count;
                                                   >> 6948 }
                                                   >> 6949 
                                                   >> 6950 u64
                                                   >> 6951 nfsd_inject_forget_openowners(u64 max)
                                                   >> 6952 {
                                                   >> 6953         u64 count = 0;
                                                   >> 6954         struct nfs4_client *clp;
                                                   >> 6955         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6956                                                 nfsd_net_id);
                                                   >> 6957         LIST_HEAD(reaplist);
                                                   >> 6958 
                                                   >> 6959         if (!nfsd_netns_ready(nn))
                                                   >> 6960                 return count;
                                                   >> 6961 
                                                   >> 6962         spin_lock(&nn->client_lock);
                                                   >> 6963         list_for_each_entry(clp, &nn->client_lru, cl_lru) {
                                                   >> 6964                 count += nfsd_collect_client_openowners(clp, &reaplist,
                                                   >> 6965                                                         max - count);
                                                   >> 6966                 if (max != 0 && count >= max)
                                                   >> 6967                         break;
                                                   >> 6968         }
                                                   >> 6969         spin_unlock(&nn->client_lock);
                                                   >> 6970         nfsd_reap_openowners(&reaplist);
                                                   >> 6971         return count;
                                                   >> 6972 }
                                                   >> 6973 
                                                   >> 6974 static u64 nfsd_find_all_delegations(struct nfs4_client *clp, u64 max,
                                                   >> 6975                                      struct list_head *victims)
                                                   >> 6976 {
                                                   >> 6977         struct nfs4_delegation *dp, *next;
                                                   >> 6978         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 6979                                                 nfsd_net_id);
                                                   >> 6980         u64 count = 0;
                                                   >> 6981 
                                                   >> 6982         lockdep_assert_held(&nn->client_lock);
                                                   >> 6983 
                                                   >> 6984         spin_lock(&state_lock);
                                                   >> 6985         list_for_each_entry_safe(dp, next, &clp->cl_delegations, dl_perclnt) {
                                                   >> 6986                 if (victims) {
                                                   >> 6987                         /*
                                                   >> 6988                          * It's not safe to mess with delegations that have a
                                                   >> 6989                          * non-zero dl_time. They might have already been broken
                                                   >> 6990                          * and could be processed by the laundromat outside of
                                                   >> 6991                          * the state_lock. Just leave them be.
                                                   >> 6992                          */
                                                   >> 6993                         if (dp->dl_time != 0)
                                                   >> 6994                                 continue;
                                                   >> 6995 
                                                   >> 6996                         atomic_inc(&clp->cl_refcount);
                                                   >> 6997                         WARN_ON(!unhash_delegation_locked(dp));
                                                   >> 6998                         list_add(&dp->dl_recall_lru, victims);
                                                   >> 6999                 }
                                                   >> 7000                 ++count;
                                                   >> 7001                 /*
                                                   >> 7002                  * Despite the fact that these functions deal with
                                                   >> 7003                  * 64-bit integers for "count", we must ensure that
                                                   >> 7004                  * it doesn't blow up the clp->cl_refcount. Throw a
                                                   >> 7005                  * warning if we start to approach INT_MAX here.
                                                   >> 7006                  */
                                                   >> 7007                 WARN_ON_ONCE(count == (INT_MAX / 2));
                                                   >> 7008                 if (count == max)
                                                   >> 7009                         break;
                                                   >> 7010         }
                                                   >> 7011         spin_unlock(&state_lock);
                                                   >> 7012         return count;
                                                   >> 7013 }
                                                   >> 7014 
                                                   >> 7015 static u64
                                                   >> 7016 nfsd_print_client_delegations(struct nfs4_client *clp)
                                                   >> 7017 {
                                                   >> 7018         u64 count = nfsd_find_all_delegations(clp, 0, NULL);
                                                   >> 7019 
                                                   >> 7020         nfsd_print_count(clp, count, "delegations");
                                                   >> 7021         return count;
                                                   >> 7022 }
                                                   >> 7023 
                                                   >> 7024 u64
                                                   >> 7025 nfsd_inject_print_delegations(void)
                                                   >> 7026 {
                                                   >> 7027         struct nfs4_client *clp;
                                                   >> 7028         u64 count = 0;
                                                   >> 7029         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 7030                                                 nfsd_net_id);
                                                   >> 7031 
                                                   >> 7032         if (!nfsd_netns_ready(nn))
                                                   >> 7033                 return 0;
                                                   >> 7034 
                                                   >> 7035         spin_lock(&nn->client_lock);
                                                   >> 7036         list_for_each_entry(clp, &nn->client_lru, cl_lru)
                                                   >> 7037                 count += nfsd_print_client_delegations(clp);
                                                   >> 7038         spin_unlock(&nn->client_lock);
                                                   >> 7039 
                                                   >> 7040         return count;
                                                   >> 7041 }
                                                   >> 7042 
                                                   >> 7043 static void
                                                   >> 7044 nfsd_forget_delegations(struct list_head *reaplist)
                                                   >> 7045 {
                                                   >> 7046         struct nfs4_client *clp;
                                                   >> 7047         struct nfs4_delegation *dp, *next;
                                                   >> 7048 
                                                   >> 7049         list_for_each_entry_safe(dp, next, reaplist, dl_recall_lru) {
                                                   >> 7050                 list_del_init(&dp->dl_recall_lru);
                                                   >> 7051                 clp = dp->dl_stid.sc_client;
                                                   >> 7052                 revoke_delegation(dp);
                                                   >> 7053                 put_client(clp);
                                                   >> 7054         }
                                                   >> 7055 }
                                                   >> 7056 
                                                   >> 7057 u64
                                                   >> 7058 nfsd_inject_forget_client_delegations(struct sockaddr_storage *addr,
                                                   >> 7059                                       size_t addr_size)
                                                   >> 7060 {
                                                   >> 7061         u64 count = 0;
                                                   >> 7062         struct nfs4_client *clp;
                                                   >> 7063         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 7064                                                 nfsd_net_id);
                                                   >> 7065         LIST_HEAD(reaplist);
                                                   >> 7066 
                                                   >> 7067         if (!nfsd_netns_ready(nn))
                                                   >> 7068                 return count;
                                                   >> 7069 
                                                   >> 7070         spin_lock(&nn->client_lock);
                                                   >> 7071         clp = nfsd_find_client(addr, addr_size);
                                                   >> 7072         if (clp)
                                                   >> 7073                 count = nfsd_find_all_delegations(clp, 0, &reaplist);
                                                   >> 7074         spin_unlock(&nn->client_lock);
                                                   >> 7075 
                                                   >> 7076         nfsd_forget_delegations(&reaplist);
                                                   >> 7077         return count;
                                                   >> 7078 }
                                                   >> 7079 
                                                   >> 7080 u64
                                                   >> 7081 nfsd_inject_forget_delegations(u64 max)
                                                   >> 7082 {
                                                   >> 7083         u64 count = 0;
                                                   >> 7084         struct nfs4_client *clp;
                                                   >> 7085         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 7086                                                 nfsd_net_id);
                                                   >> 7087         LIST_HEAD(reaplist);
                                                   >> 7088 
                                                   >> 7089         if (!nfsd_netns_ready(nn))
                                                   >> 7090                 return count;
                                                   >> 7091 
                                                   >> 7092         spin_lock(&nn->client_lock);
                                                   >> 7093         list_for_each_entry(clp, &nn->client_lru, cl_lru) {
                                                   >> 7094                 count += nfsd_find_all_delegations(clp, max - count, &reaplist);
                                                   >> 7095                 if (max != 0 && count >= max)
                                                   >> 7096                         break;
                                                   >> 7097         }
                                                   >> 7098         spin_unlock(&nn->client_lock);
                                                   >> 7099         nfsd_forget_delegations(&reaplist);
                                                   >> 7100         return count;
                                                   >> 7101 }
                                                   >> 7102 
                                                   >> 7103 static void
                                                   >> 7104 nfsd_recall_delegations(struct list_head *reaplist)
                                                   >> 7105 {
                                                   >> 7106         struct nfs4_client *clp;
                                                   >> 7107         struct nfs4_delegation *dp, *next;
                                                   >> 7108 
                                                   >> 7109         list_for_each_entry_safe(dp, next, reaplist, dl_recall_lru) {
                                                   >> 7110                 list_del_init(&dp->dl_recall_lru);
                                                   >> 7111                 clp = dp->dl_stid.sc_client;
                                                   >> 7112                 /*
                                                   >> 7113                  * We skipped all entries that had a zero dl_time before,
                                                   >> 7114                  * so we can now reset the dl_time back to 0. If a delegation
                                                   >> 7115                  * break comes in now, then it won't make any difference since
                                                   >> 7116                  * we're recalling it either way.
                                                   >> 7117                  */
                                                   >> 7118                 spin_lock(&state_lock);
                                                   >> 7119                 dp->dl_time = 0;
                                                   >> 7120                 spin_unlock(&state_lock);
                                                   >> 7121                 nfsd_break_one_deleg(dp);
                                                   >> 7122                 put_client(clp);
                                                   >> 7123         }
                                                   >> 7124 }
                                                   >> 7125 
                                                   >> 7126 u64
                                                   >> 7127 nfsd_inject_recall_client_delegations(struct sockaddr_storage *addr,
                                                   >> 7128                                       size_t addr_size)
                                                   >> 7129 {
                                                   >> 7130         u64 count = 0;
                                                   >> 7131         struct nfs4_client *clp;
                                                   >> 7132         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 7133                                                 nfsd_net_id);
                                                   >> 7134         LIST_HEAD(reaplist);
                                                   >> 7135 
                                                   >> 7136         if (!nfsd_netns_ready(nn))
                                                   >> 7137                 return count;
                                                   >> 7138 
                                                   >> 7139         spin_lock(&nn->client_lock);
                                                   >> 7140         clp = nfsd_find_client(addr, addr_size);
                                                   >> 7141         if (clp)
                                                   >> 7142                 count = nfsd_find_all_delegations(clp, 0, &reaplist);
                                                   >> 7143         spin_unlock(&nn->client_lock);
                                                   >> 7144 
                                                   >> 7145         nfsd_recall_delegations(&reaplist);
                                                   >> 7146         return count;
                                                   >> 7147 }
                                                   >> 7148 
                                                   >> 7149 u64
                                                   >> 7150 nfsd_inject_recall_delegations(u64 max)
                                                   >> 7151 {
                                                   >> 7152         u64 count = 0;
                                                   >> 7153         struct nfs4_client *clp, *next;
                                                   >> 7154         struct nfsd_net *nn = net_generic(current->nsproxy->net_ns,
                                                   >> 7155                                                 nfsd_net_id);
                                                   >> 7156         LIST_HEAD(reaplist);
                                                   >> 7157 
                                                   >> 7158         if (!nfsd_netns_ready(nn))
                                                   >> 7159                 return count;
                                                   >> 7160 
                                                   >> 7161         spin_lock(&nn->client_lock);
                                                   >> 7162         list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) {
                                                   >> 7163                 count += nfsd_find_all_delegations(clp, max - count, &reaplist);
                                                   >> 7164                 if (max != 0 && ++count >= max)
                                                   >> 7165                         break;
                                                   >> 7166         }
                                                   >> 7167         spin_unlock(&nn->client_lock);
                                                   >> 7168         nfsd_recall_delegations(&reaplist);
                                                   >> 7169         return count;
                                                   >> 7170 }
                                                   >> 7171 #endif /* CONFIG_NFSD_FAULT_INJECTION */
                                                   >> 7172 
8548 /*                                               7173 /*
8549  * Since the lifetime of a delegation isn't l    7174  * Since the lifetime of a delegation isn't limited to that of an open, a
8550  * client may quite reasonably hang on to a d    7175  * client may quite reasonably hang on to a delegation as long as it has
8551  * the inode cached.  This becomes an obvious    7176  * the inode cached.  This becomes an obvious problem the first time a
8552  * client's inode cache approaches the size o    7177  * client's inode cache approaches the size of the server's total memory.
8553  *                                               7178  *
8554  * For now we avoid this problem by imposing     7179  * For now we avoid this problem by imposing a hard limit on the number
8555  * of delegations, which varies according to     7180  * of delegations, which varies according to the server's memory size.
8556  */                                              7181  */
8557 static void                                      7182 static void
8558 set_max_delegations(void)                        7183 set_max_delegations(void)
8559 {                                                7184 {
8560         /*                                       7185         /*
8561          * Allow at most 4 delegations per me    7186          * Allow at most 4 delegations per megabyte of RAM.  Quick
8562          * estimates suggest that in the wors    7187          * estimates suggest that in the worst case (where every delegation
8563          * is for a different inode), a deleg    7188          * is for a different inode), a delegation could take about 1.5K,
8564          * giving a worst case usage of about    7189          * giving a worst case usage of about 6% of memory.
8565          */                                      7190          */
8566         max_delegations = nr_free_buffer_page    7191         max_delegations = nr_free_buffer_pages() >> (20 - 2 - PAGE_SHIFT);
8567 }                                                7192 }
8568                                                  7193 
8569 static int nfs4_state_create_net(struct net *    7194 static int nfs4_state_create_net(struct net *net)
8570 {                                                7195 {
8571         struct nfsd_net *nn = net_generic(net    7196         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
8572         int i;                                   7197         int i;
8573                                                  7198 
8574         nn->conf_id_hashtbl = kmalloc_array(C    7199         nn->conf_id_hashtbl = kmalloc_array(CLIENT_HASH_SIZE,
8575                                             s    7200                                             sizeof(struct list_head),
8576                                             G    7201                                             GFP_KERNEL);
8577         if (!nn->conf_id_hashtbl)                7202         if (!nn->conf_id_hashtbl)
8578                 goto err;                        7203                 goto err;
8579         nn->unconf_id_hashtbl = kmalloc_array    7204         nn->unconf_id_hashtbl = kmalloc_array(CLIENT_HASH_SIZE,
8580                                                  7205                                               sizeof(struct list_head),
8581                                                  7206                                               GFP_KERNEL);
8582         if (!nn->unconf_id_hashtbl)              7207         if (!nn->unconf_id_hashtbl)
8583                 goto err_unconf_id;              7208                 goto err_unconf_id;
8584         nn->sessionid_hashtbl = kmalloc_array    7209         nn->sessionid_hashtbl = kmalloc_array(SESSION_HASH_SIZE,
8585                                                  7210                                               sizeof(struct list_head),
8586                                                  7211                                               GFP_KERNEL);
8587         if (!nn->sessionid_hashtbl)              7212         if (!nn->sessionid_hashtbl)
8588                 goto err_sessionid;              7213                 goto err_sessionid;
8589                                                  7214 
8590         for (i = 0; i < CLIENT_HASH_SIZE; i++    7215         for (i = 0; i < CLIENT_HASH_SIZE; i++) {
8591                 INIT_LIST_HEAD(&nn->conf_id_h    7216                 INIT_LIST_HEAD(&nn->conf_id_hashtbl[i]);
8592                 INIT_LIST_HEAD(&nn->unconf_id    7217                 INIT_LIST_HEAD(&nn->unconf_id_hashtbl[i]);
8593         }                                        7218         }
8594         for (i = 0; i < SESSION_HASH_SIZE; i+    7219         for (i = 0; i < SESSION_HASH_SIZE; i++)
8595                 INIT_LIST_HEAD(&nn->sessionid    7220                 INIT_LIST_HEAD(&nn->sessionid_hashtbl[i]);
8596         nn->conf_name_tree = RB_ROOT;            7221         nn->conf_name_tree = RB_ROOT;
8597         nn->unconf_name_tree = RB_ROOT;          7222         nn->unconf_name_tree = RB_ROOT;
8598         nn->boot_time = ktime_get_real_second !! 7223         nn->boot_time = get_seconds();
8599         nn->grace_ended = false;                 7224         nn->grace_ended = false;
8600         nn->nfsd4_manager.block_opens = true;    7225         nn->nfsd4_manager.block_opens = true;
8601         INIT_LIST_HEAD(&nn->nfsd4_manager.lis    7226         INIT_LIST_HEAD(&nn->nfsd4_manager.list);
8602         INIT_LIST_HEAD(&nn->client_lru);         7227         INIT_LIST_HEAD(&nn->client_lru);
8603         INIT_LIST_HEAD(&nn->close_lru);          7228         INIT_LIST_HEAD(&nn->close_lru);
8604         INIT_LIST_HEAD(&nn->del_recall_lru);     7229         INIT_LIST_HEAD(&nn->del_recall_lru);
8605         spin_lock_init(&nn->client_lock);        7230         spin_lock_init(&nn->client_lock);
8606         spin_lock_init(&nn->s2s_cp_lock);        7231         spin_lock_init(&nn->s2s_cp_lock);
8607         idr_init(&nn->s2s_cp_stateids);          7232         idr_init(&nn->s2s_cp_stateids);
8608         atomic_set(&nn->pending_async_copies, << 
8609                                                  7233 
8610         spin_lock_init(&nn->blocked_locks_loc    7234         spin_lock_init(&nn->blocked_locks_lock);
8611         INIT_LIST_HEAD(&nn->blocked_locks_lru    7235         INIT_LIST_HEAD(&nn->blocked_locks_lru);
8612                                                  7236 
8613         INIT_DELAYED_WORK(&nn->laundromat_wor    7237         INIT_DELAYED_WORK(&nn->laundromat_work, laundromat_main);
8614         INIT_WORK(&nn->nfsd_shrinker_work, nf << 
8615         get_net(net);                            7238         get_net(net);
8616                                                  7239 
8617         nn->nfsd_client_shrinker = shrinker_a << 
8618         if (!nn->nfsd_client_shrinker)        << 
8619                 goto err_shrinker;            << 
8620                                               << 
8621         nn->nfsd_client_shrinker->scan_object << 
8622         nn->nfsd_client_shrinker->count_objec << 
8623         nn->nfsd_client_shrinker->private_dat << 
8624                                               << 
8625         shrinker_register(nn->nfsd_client_shr << 
8626                                               << 
8627         return 0;                                7240         return 0;
8628                                                  7241 
8629 err_shrinker:                                 << 
8630         put_net(net);                         << 
8631         kfree(nn->sessionid_hashtbl);         << 
8632 err_sessionid:                                   7242 err_sessionid:
8633         kfree(nn->unconf_id_hashtbl);            7243         kfree(nn->unconf_id_hashtbl);
8634 err_unconf_id:                                   7244 err_unconf_id:
8635         kfree(nn->conf_id_hashtbl);              7245         kfree(nn->conf_id_hashtbl);
8636 err:                                             7246 err:
8637         return -ENOMEM;                          7247         return -ENOMEM;
8638 }                                                7248 }
8639                                                  7249 
8640 static void                                      7250 static void
8641 nfs4_state_destroy_net(struct net *net)          7251 nfs4_state_destroy_net(struct net *net)
8642 {                                                7252 {
8643         int i;                                   7253         int i;
8644         struct nfs4_client *clp = NULL;          7254         struct nfs4_client *clp = NULL;
8645         struct nfsd_net *nn = net_generic(net    7255         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
8646                                                  7256 
8647         for (i = 0; i < CLIENT_HASH_SIZE; i++    7257         for (i = 0; i < CLIENT_HASH_SIZE; i++) {
8648                 while (!list_empty(&nn->conf_    7258                 while (!list_empty(&nn->conf_id_hashtbl[i])) {
8649                         clp = list_entry(nn->    7259                         clp = list_entry(nn->conf_id_hashtbl[i].next, struct nfs4_client, cl_idhash);
8650                         destroy_client(clp);     7260                         destroy_client(clp);
8651                 }                                7261                 }
8652         }                                        7262         }
8653                                                  7263 
8654         WARN_ON(!list_empty(&nn->blocked_lock    7264         WARN_ON(!list_empty(&nn->blocked_locks_lru));
8655                                                  7265 
8656         for (i = 0; i < CLIENT_HASH_SIZE; i++    7266         for (i = 0; i < CLIENT_HASH_SIZE; i++) {
8657                 while (!list_empty(&nn->uncon    7267                 while (!list_empty(&nn->unconf_id_hashtbl[i])) {
8658                         clp = list_entry(nn->    7268                         clp = list_entry(nn->unconf_id_hashtbl[i].next, struct nfs4_client, cl_idhash);
8659                         destroy_client(clp);     7269                         destroy_client(clp);
8660                 }                                7270                 }
8661         }                                        7271         }
8662                                                  7272 
8663         kfree(nn->sessionid_hashtbl);            7273         kfree(nn->sessionid_hashtbl);
8664         kfree(nn->unconf_id_hashtbl);            7274         kfree(nn->unconf_id_hashtbl);
8665         kfree(nn->conf_id_hashtbl);              7275         kfree(nn->conf_id_hashtbl);
8666         put_net(net);                            7276         put_net(net);
8667 }                                                7277 }
8668                                                  7278 
8669 int                                              7279 int
8670 nfs4_state_start_net(struct net *net)            7280 nfs4_state_start_net(struct net *net)
8671 {                                                7281 {
8672         struct nfsd_net *nn = net_generic(net    7282         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
8673         int ret;                                 7283         int ret;
8674                                                  7284 
8675         ret = nfs4_state_create_net(net);        7285         ret = nfs4_state_create_net(net);
8676         if (ret)                                 7286         if (ret)
8677                 return ret;                      7287                 return ret;
8678         locks_start_grace(net, &nn->nfsd4_man    7288         locks_start_grace(net, &nn->nfsd4_manager);
8679         nfsd4_client_tracking_init(net);         7289         nfsd4_client_tracking_init(net);
8680         if (nn->track_reclaim_completes && nn    7290         if (nn->track_reclaim_completes && nn->reclaim_str_hashtbl_size == 0)
8681                 goto skip_grace;                 7291                 goto skip_grace;
8682         printk(KERN_INFO "NFSD: starting %lld !! 7292         printk(KERN_INFO "NFSD: starting %ld-second grace period (net %x)\n",
8683                nn->nfsd4_grace, net->ns.inum)    7293                nn->nfsd4_grace, net->ns.inum);
8684         trace_nfsd_grace_start(nn);           << 
8685         queue_delayed_work(laundry_wq, &nn->l    7294         queue_delayed_work(laundry_wq, &nn->laundromat_work, nn->nfsd4_grace * HZ);
8686         return 0;                                7295         return 0;
8687                                                  7296 
8688 skip_grace:                                      7297 skip_grace:
8689         printk(KERN_INFO "NFSD: no clients to    7298         printk(KERN_INFO "NFSD: no clients to reclaim, skipping NFSv4 grace period (net %x)\n",
8690                         net->ns.inum);           7299                         net->ns.inum);
8691         queue_delayed_work(laundry_wq, &nn->l    7300         queue_delayed_work(laundry_wq, &nn->laundromat_work, nn->nfsd4_lease * HZ);
8692         nfsd4_end_grace(nn);                     7301         nfsd4_end_grace(nn);
8693         return 0;                                7302         return 0;
8694 }                                                7303 }
8695                                                  7304 
8696 /* initialization to perform when the nfsd se    7305 /* initialization to perform when the nfsd service is started: */
8697                                                  7306 
8698 int                                              7307 int
8699 nfs4_state_start(void)                           7308 nfs4_state_start(void)
8700 {                                                7309 {
8701         int ret;                                 7310         int ret;
8702                                                  7311 
8703         ret = rhltable_init(&nfs4_file_rhltab !! 7312         laundry_wq = alloc_workqueue("%s", WQ_UNBOUND, 0, "nfsd4");
                                                   >> 7313         if (laundry_wq == NULL) {
                                                   >> 7314                 ret = -ENOMEM;
                                                   >> 7315                 goto out;
                                                   >> 7316         }
                                                   >> 7317         ret = nfsd4_create_callback_queue();
8704         if (ret)                                 7318         if (ret)
8705                 return ret;                   !! 7319                 goto out_free_laundry;
8706                                                  7320 
8707         set_max_delegations();                   7321         set_max_delegations();
8708         return 0;                                7322         return 0;
                                                   >> 7323 
                                                   >> 7324 out_free_laundry:
                                                   >> 7325         destroy_workqueue(laundry_wq);
                                                   >> 7326 out:
                                                   >> 7327         return ret;
8709 }                                                7328 }
8710                                                  7329 
8711 void                                             7330 void
8712 nfs4_state_shutdown_net(struct net *net)         7331 nfs4_state_shutdown_net(struct net *net)
8713 {                                                7332 {
8714         struct nfs4_delegation *dp = NULL;       7333         struct nfs4_delegation *dp = NULL;
8715         struct list_head *pos, *next, reaplis    7334         struct list_head *pos, *next, reaplist;
8716         struct nfsd_net *nn = net_generic(net    7335         struct nfsd_net *nn = net_generic(net, nfsd_net_id);
8717                                                  7336 
8718         shrinker_free(nn->nfsd_client_shrinke << 
8719         cancel_work_sync(&nn->nfsd_shrinker_w << 
8720         cancel_delayed_work_sync(&nn->laundro    7337         cancel_delayed_work_sync(&nn->laundromat_work);
8721         locks_end_grace(&nn->nfsd4_manager);     7338         locks_end_grace(&nn->nfsd4_manager);
8722                                                  7339 
8723         INIT_LIST_HEAD(&reaplist);               7340         INIT_LIST_HEAD(&reaplist);
8724         spin_lock(&state_lock);                  7341         spin_lock(&state_lock);
8725         list_for_each_safe(pos, next, &nn->de    7342         list_for_each_safe(pos, next, &nn->del_recall_lru) {
8726                 dp = list_entry (pos, struct     7343                 dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru);
8727                 unhash_delegation_locked(dp,  !! 7344                 WARN_ON(!unhash_delegation_locked(dp));
8728                 list_add(&dp->dl_recall_lru,     7345                 list_add(&dp->dl_recall_lru, &reaplist);
8729         }                                        7346         }
8730         spin_unlock(&state_lock);                7347         spin_unlock(&state_lock);
8731         list_for_each_safe(pos, next, &reapli    7348         list_for_each_safe(pos, next, &reaplist) {
8732                 dp = list_entry (pos, struct     7349                 dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru);
8733                 list_del_init(&dp->dl_recall_    7350                 list_del_init(&dp->dl_recall_lru);
8734                 destroy_unhashed_deleg(dp);      7351                 destroy_unhashed_deleg(dp);
8735         }                                        7352         }
8736                                                  7353 
8737         nfsd4_client_tracking_exit(net);         7354         nfsd4_client_tracking_exit(net);
8738         nfs4_state_destroy_net(net);             7355         nfs4_state_destroy_net(net);
8739 #ifdef CONFIG_NFSD_V4_2_INTER_SSC             << 
8740         nfsd4_ssc_shutdown_umount(nn);        << 
8741 #endif                                        << 
8742 }                                                7356 }
8743                                                  7357 
8744 void                                             7358 void
8745 nfs4_state_shutdown(void)                        7359 nfs4_state_shutdown(void)
8746 {                                                7360 {
8747         rhltable_destroy(&nfs4_file_rhltable) !! 7361         destroy_workqueue(laundry_wq);
                                                   >> 7362         nfsd4_destroy_callback_queue();
8748 }                                                7363 }
8749                                                  7364 
8750 static void                                      7365 static void
8751 get_stateid(struct nfsd4_compound_state *csta    7366 get_stateid(struct nfsd4_compound_state *cstate, stateid_t *stateid)
8752 {                                                7367 {
8753         if (HAS_CSTATE_FLAG(cstate, CURRENT_S !! 7368         if (HAS_STATE_ID(cstate, CURRENT_STATE_ID_FLAG) && CURRENT_STATEID(stateid))
8754             CURRENT_STATEID(stateid))         << 
8755                 memcpy(stateid, &cstate->curr    7369                 memcpy(stateid, &cstate->current_stateid, sizeof(stateid_t));
8756 }                                                7370 }
8757                                                  7371 
8758 static void                                      7372 static void
8759 put_stateid(struct nfsd4_compound_state *csta    7373 put_stateid(struct nfsd4_compound_state *cstate, stateid_t *stateid)
8760 {                                                7374 {
8761         if (cstate->minorversion) {              7375         if (cstate->minorversion) {
8762                 memcpy(&cstate->current_state    7376                 memcpy(&cstate->current_stateid, stateid, sizeof(stateid_t));
8763                 SET_CSTATE_FLAG(cstate, CURRE !! 7377                 SET_STATE_ID(cstate, CURRENT_STATE_ID_FLAG);
8764         }                                        7378         }
8765 }                                                7379 }
8766                                                  7380 
8767 void                                             7381 void
8768 clear_current_stateid(struct nfsd4_compound_s    7382 clear_current_stateid(struct nfsd4_compound_state *cstate)
8769 {                                                7383 {
8770         CLEAR_CSTATE_FLAG(cstate, CURRENT_STA !! 7384         CLEAR_STATE_ID(cstate, CURRENT_STATE_ID_FLAG);
8771 }                                                7385 }
8772                                                  7386 
8773 /*                                               7387 /*
8774  * functions to set current state id             7388  * functions to set current state id
8775  */                                              7389  */
8776 void                                             7390 void
8777 nfsd4_set_opendowngradestateid(struct nfsd4_c    7391 nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate,
8778                 union nfsd4_op_u *u)             7392                 union nfsd4_op_u *u)
8779 {                                                7393 {
8780         put_stateid(cstate, &u->open_downgrad    7394         put_stateid(cstate, &u->open_downgrade.od_stateid);
8781 }                                                7395 }
8782                                                  7396 
8783 void                                             7397 void
8784 nfsd4_set_openstateid(struct nfsd4_compound_s    7398 nfsd4_set_openstateid(struct nfsd4_compound_state *cstate,
8785                 union nfsd4_op_u *u)             7399                 union nfsd4_op_u *u)
8786 {                                                7400 {
8787         put_stateid(cstate, &u->open.op_state    7401         put_stateid(cstate, &u->open.op_stateid);
8788 }                                                7402 }
8789                                                  7403 
8790 void                                             7404 void
8791 nfsd4_set_closestateid(struct nfsd4_compound_    7405 nfsd4_set_closestateid(struct nfsd4_compound_state *cstate,
8792                 union nfsd4_op_u *u)             7406                 union nfsd4_op_u *u)
8793 {                                                7407 {
8794         put_stateid(cstate, &u->close.cl_stat    7408         put_stateid(cstate, &u->close.cl_stateid);
8795 }                                                7409 }
8796                                                  7410 
8797 void                                             7411 void
8798 nfsd4_set_lockstateid(struct nfsd4_compound_s    7412 nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate,
8799                 union nfsd4_op_u *u)             7413                 union nfsd4_op_u *u)
8800 {                                                7414 {
8801         put_stateid(cstate, &u->lock.lk_resp_    7415         put_stateid(cstate, &u->lock.lk_resp_stateid);
8802 }                                                7416 }
8803                                                  7417 
8804 /*                                               7418 /*
8805  * functions to consume current state id         7419  * functions to consume current state id
8806  */                                              7420  */
8807                                                  7421 
8808 void                                             7422 void
8809 nfsd4_get_opendowngradestateid(struct nfsd4_c    7423 nfsd4_get_opendowngradestateid(struct nfsd4_compound_state *cstate,
8810                 union nfsd4_op_u *u)             7424                 union nfsd4_op_u *u)
8811 {                                                7425 {
8812         get_stateid(cstate, &u->open_downgrad    7426         get_stateid(cstate, &u->open_downgrade.od_stateid);
8813 }                                                7427 }
8814                                                  7428 
8815 void                                             7429 void
8816 nfsd4_get_delegreturnstateid(struct nfsd4_com    7430 nfsd4_get_delegreturnstateid(struct nfsd4_compound_state *cstate,
8817                 union nfsd4_op_u *u)             7431                 union nfsd4_op_u *u)
8818 {                                                7432 {
8819         get_stateid(cstate, &u->delegreturn.d    7433         get_stateid(cstate, &u->delegreturn.dr_stateid);
8820 }                                                7434 }
8821                                                  7435 
8822 void                                             7436 void
8823 nfsd4_get_freestateid(struct nfsd4_compound_s    7437 nfsd4_get_freestateid(struct nfsd4_compound_state *cstate,
8824                 union nfsd4_op_u *u)             7438                 union nfsd4_op_u *u)
8825 {                                                7439 {
8826         get_stateid(cstate, &u->free_stateid.    7440         get_stateid(cstate, &u->free_stateid.fr_stateid);
8827 }                                                7441 }
8828                                                  7442 
8829 void                                             7443 void
8830 nfsd4_get_setattrstateid(struct nfsd4_compoun    7444 nfsd4_get_setattrstateid(struct nfsd4_compound_state *cstate,
8831                 union nfsd4_op_u *u)             7445                 union nfsd4_op_u *u)
8832 {                                                7446 {
8833         get_stateid(cstate, &u->setattr.sa_st    7447         get_stateid(cstate, &u->setattr.sa_stateid);
8834 }                                                7448 }
8835                                                  7449 
8836 void                                             7450 void
8837 nfsd4_get_closestateid(struct nfsd4_compound_    7451 nfsd4_get_closestateid(struct nfsd4_compound_state *cstate,
8838                 union nfsd4_op_u *u)             7452                 union nfsd4_op_u *u)
8839 {                                                7453 {
8840         get_stateid(cstate, &u->close.cl_stat    7454         get_stateid(cstate, &u->close.cl_stateid);
8841 }                                                7455 }
8842                                                  7456 
8843 void                                             7457 void
8844 nfsd4_get_lockustateid(struct nfsd4_compound_    7458 nfsd4_get_lockustateid(struct nfsd4_compound_state *cstate,
8845                 union nfsd4_op_u *u)             7459                 union nfsd4_op_u *u)
8846 {                                                7460 {
8847         get_stateid(cstate, &u->locku.lu_stat    7461         get_stateid(cstate, &u->locku.lu_stateid);
8848 }                                                7462 }
8849                                                  7463 
8850 void                                             7464 void
8851 nfsd4_get_readstateid(struct nfsd4_compound_s    7465 nfsd4_get_readstateid(struct nfsd4_compound_state *cstate,
8852                 union nfsd4_op_u *u)             7466                 union nfsd4_op_u *u)
8853 {                                                7467 {
8854         get_stateid(cstate, &u->read.rd_state    7468         get_stateid(cstate, &u->read.rd_stateid);
8855 }                                                7469 }
8856                                                  7470 
8857 void                                             7471 void
8858 nfsd4_get_writestateid(struct nfsd4_compound_    7472 nfsd4_get_writestateid(struct nfsd4_compound_state *cstate,
8859                 union nfsd4_op_u *u)             7473                 union nfsd4_op_u *u)
8860 {                                                7474 {
8861         get_stateid(cstate, &u->write.wr_stat    7475         get_stateid(cstate, &u->write.wr_stateid);
8862 }                                             << 
8863                                               << 
8864 /**                                           << 
8865  * nfsd4_deleg_getattr_conflict - Recall if G << 
8866  * @rqstp: RPC transaction context            << 
8867  * @dentry: dentry of inode to be checked for << 
8868  * @modified: return true if file was modifie << 
8869  * @size: new size of file if modified is tru << 
8870  *                                            << 
8871  * This function is called when there is a co << 
8872  * delegation and a change/size GETATTR from  << 
8873  * must either use the CB_GETATTR to get the  << 
8874  * attributes from the client that holds the  << 
8875  * delegation before replying to the GETATTR. << 
8876  * 18.7.4.                                    << 
8877  *                                            << 
8878  * Returns 0 if there is no conflict; otherwi << 
8879  * code is returned.                          << 
8880  */                                           << 
8881 __be32                                        << 
8882 nfsd4_deleg_getattr_conflict(struct svc_rqst  << 
8883                                 bool *modifie << 
8884 {                                             << 
8885         __be32 status;                        << 
8886         struct nfsd_net *nn = net_generic(SVC << 
8887         struct file_lock_context *ctx;        << 
8888         struct nfs4_delegation *dp = NULL;    << 
8889         struct file_lease *fl;                << 
8890         struct iattr attrs;                   << 
8891         struct nfs4_cb_fattr *ncf;            << 
8892         struct inode *inode = d_inode(dentry) << 
8893                                               << 
8894         *modified = false;                    << 
8895         ctx = locks_inode_context(inode);     << 
8896         if (!ctx)                             << 
8897                 return 0;                     << 
8898                                               << 
8899 #define NON_NFSD_LEASE ((void *)1)            << 
8900                                               << 
8901         spin_lock(&ctx->flc_lock);            << 
8902         for_each_file_lock(fl, &ctx->flc_leas << 
8903                 if (fl->c.flc_flags == FL_LAY << 
8904                         continue;             << 
8905                 if (fl->c.flc_type == F_WRLCK << 
8906                         if (fl->fl_lmops == & << 
8907                                 dp = fl->c.fl << 
8908                         else                  << 
8909                                 dp = NON_NFSD << 
8910                 }                             << 
8911                 break;                        << 
8912         }                                     << 
8913         if (dp == NULL || dp == NON_NFSD_LEAS << 
8914             dp->dl_recall.cb_clp == *(rqstp-> << 
8915                 spin_unlock(&ctx->flc_lock);  << 
8916                 if (dp == NON_NFSD_LEASE) {   << 
8917                         status = nfserrno(nfs << 
8918                                               << 
8919                         if (status != nfserr_ << 
8920                             !nfsd_wait_for_de << 
8921                                 return status << 
8922                 }                             << 
8923                 return 0;                     << 
8924         }                                     << 
8925                                               << 
8926         nfsd_stats_wdeleg_getattr_inc(nn);    << 
8927         refcount_inc(&dp->dl_stid.sc_count);  << 
8928         ncf = &dp->dl_cb_fattr;               << 
8929         nfs4_cb_getattr(&dp->dl_cb_fattr);    << 
8930         spin_unlock(&ctx->flc_lock);          << 
8931                                               << 
8932         wait_on_bit_timeout(&ncf->ncf_cb_flag << 
8933                             TASK_INTERRUPTIBL << 
8934         if (ncf->ncf_cb_status) {             << 
8935                 /* Recall delegation only if  << 
8936                 status = nfserrno(nfsd_open_b << 
8937                 if (status != nfserr_jukebox  << 
8938                     !nfsd_wait_for_delegretur << 
8939                         goto out_status;      << 
8940         }                                     << 
8941         if (!ncf->ncf_file_modified &&        << 
8942             (ncf->ncf_initial_cinfo != ncf->n << 
8943              ncf->ncf_cur_fsize != ncf->ncf_c << 
8944                 ncf->ncf_file_modified = true << 
8945         if (ncf->ncf_file_modified) {         << 
8946                 int err;                      << 
8947                                               << 
8948                 /*                            << 
8949                  * Per section 10.4.3 of RFC  << 
8950                  * not update the file's meta << 
8951                  * modified size              << 
8952                  */                           << 
8953                 attrs.ia_mtime = attrs.ia_cti << 
8954                 attrs.ia_valid = ATTR_MTIME | << 
8955                 inode_lock(inode);            << 
8956                 err = notify_change(&nop_mnt_ << 
8957                 inode_unlock(inode);          << 
8958                 if (err) {                    << 
8959                         status = nfserrno(err << 
8960                         goto out_status;      << 
8961                 }                             << 
8962                 ncf->ncf_cur_fsize = ncf->ncf << 
8963                 *size = ncf->ncf_cur_fsize;   << 
8964                 *modified = true;             << 
8965         }                                     << 
8966         status = 0;                           << 
8967 out_status:                                   << 
8968         nfs4_put_stid(&dp->dl_stid);          << 
8969         return status;                        << 
8970 }                                                7476 }
8971                                                  7477 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php