1 /* 2 * Copyright (c) 2001 The Regents of the University of Michigan. 3 * All rights reserved. 4 * 5 * Kendrick Smith <kmsmith@umich.edu> 6 * Andy Adamson <kandros@umich.edu> 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. Neither the name of the University nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 22 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 23 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 28 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 29 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 30 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 31 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 * 33 */ 34 35 #include <linux/file.h> 36 #include <linux/fs.h> 37 #include <linux/slab.h> 38 #include <linux/namei.h> 39 #include <linux/swap.h> 40 #include <linux/pagemap.h> 41 #include <linux/ratelimit.h> 42 #include <linux/sunrpc/svcauth_gss.h> 43 #include <linux/sunrpc/addr.h> 44 #include <linux/jhash.h> 45 #include <linux/string_helpers.h> 46 #include "xdr4.h" 47 #include "xdr4cb.h" 48 #include "vfs.h" 49 #include "current_stateid.h" 50 51 #include "netns.h" 52 #include "pnfs.h" 53 #include "filecache.h" 54 55 #define NFSDDBG_FACILITY NFSDDBG_PROC 56 57 #define all_ones {{~0,~0},~0} 58 static const stateid_t one_stateid = { 59 .si_generation = ~0, 60 .si_opaque = all_ones, 61 }; 62 static const stateid_t zero_stateid = { 63 /* all fields zero */ 64 }; 65 static const stateid_t currentstateid = { 66 .si_generation = 1, 67 }; 68 static const stateid_t close_stateid = { 69 .si_generation = 0xffffffffU, 70 }; 71 72 static u64 current_sessionid = 1; 73 74 #define ZERO_STATEID(stateid) (!memcmp((stateid), &zero_stateid, sizeof(stateid_t))) 75 #define ONE_STATEID(stateid) (!memcmp((stateid), &one_stateid, sizeof(stateid_t))) 76 #define CURRENT_STATEID(stateid) (!memcmp((stateid), ¤tstateid, sizeof(stateid_t))) 77 #define CLOSE_STATEID(stateid) (!memcmp((stateid), &close_stateid, sizeof(stateid_t))) 78 79 /* forward declarations */ 80 static bool check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner); 81 static void nfs4_free_ol_stateid(struct nfs4_stid *stid); 82 void nfsd4_end_grace(struct nfsd_net *nn); 83 84 /* Locking: */ 85 86 /* 87 * Currently used for the del_recall_lru and file hash table. In an 88 * effort to decrease the scope of the client_mutex, this spinlock may 89 * eventually cover more: 90 */ 91 static DEFINE_SPINLOCK(state_lock); 92 93 enum nfsd4_st_mutex_lock_subclass { 94 OPEN_STATEID_MUTEX = 0, 95 LOCK_STATEID_MUTEX = 1, 96 }; 97 98 /* 99 * A waitqueue for all in-progress 4.0 CLOSE operations that are waiting for 100 * the refcount on the open stateid to drop. 101 */ 102 static DECLARE_WAIT_QUEUE_HEAD(close_wq); 103 104 /* 105 * A waitqueue where a writer to clients/#/ctl destroying a client can 106 * wait for cl_rpc_users to drop to 0 and then for the client to be 107 * unhashed. 108 */ 109 static DECLARE_WAIT_QUEUE_HEAD(expiry_wq); 110 111 static struct kmem_cache *client_slab; 112 static struct kmem_cache *openowner_slab; 113 static struct kmem_cache *lockowner_slab; 114 static struct kmem_cache *file_slab; 115 static struct kmem_cache *stateid_slab; 116 static struct kmem_cache *deleg_slab; 117 static struct kmem_cache *odstate_slab; 118 119 static void free_session(struct nfsd4_session *); 120 121 static const struct nfsd4_callback_ops nfsd4_cb_recall_ops; 122 static const struct nfsd4_callback_ops nfsd4_cb_notify_lock_ops; 123 124 static bool is_session_dead(struct nfsd4_session *ses) 125 { 126 return ses->se_flags & NFS4_SESSION_DEAD; 127 } 128 129 static __be32 mark_session_dead_locked(struct nfsd4_session *ses, int ref_held_by_me) 130 { 131 if (atomic_read(&ses->se_ref) > ref_held_by_me) 132 return nfserr_jukebox; 133 ses->se_flags |= NFS4_SESSION_DEAD; 134 return nfs_ok; 135 } 136 137 static bool is_client_expired(struct nfs4_client *clp) 138 { 139 return clp->cl_time == 0; 140 } 141 142 static __be32 get_client_locked(struct nfs4_client *clp) 143 { 144 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 145 146 lockdep_assert_held(&nn->client_lock); 147 148 if (is_client_expired(clp)) 149 return nfserr_expired; 150 atomic_inc(&clp->cl_rpc_users); 151 return nfs_ok; 152 } 153 154 /* must be called under the client_lock */ 155 static inline void 156 renew_client_locked(struct nfs4_client *clp) 157 { 158 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 159 160 if (is_client_expired(clp)) { 161 WARN_ON(1); 162 printk("%s: client (clientid %08x/%08x) already expired\n", 163 __func__, 164 clp->cl_clientid.cl_boot, 165 clp->cl_clientid.cl_id); 166 return; 167 } 168 169 dprintk("renewing client (clientid %08x/%08x)\n", 170 clp->cl_clientid.cl_boot, 171 clp->cl_clientid.cl_id); 172 list_move_tail(&clp->cl_lru, &nn->client_lru); 173 clp->cl_time = get_seconds(); 174 } 175 176 static void put_client_renew_locked(struct nfs4_client *clp) 177 { 178 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 179 180 lockdep_assert_held(&nn->client_lock); 181 182 if (!atomic_dec_and_test(&clp->cl_rpc_users)) 183 return; 184 if (!is_client_expired(clp)) 185 renew_client_locked(clp); 186 else 187 wake_up_all(&expiry_wq); 188 } 189 190 static void put_client_renew(struct nfs4_client *clp) 191 { 192 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 193 194 if (!atomic_dec_and_lock(&clp->cl_rpc_users, &nn->client_lock)) 195 return; 196 if (!is_client_expired(clp)) 197 renew_client_locked(clp); 198 else 199 wake_up_all(&expiry_wq); 200 spin_unlock(&nn->client_lock); 201 } 202 203 static __be32 nfsd4_get_session_locked(struct nfsd4_session *ses) 204 { 205 __be32 status; 206 207 if (is_session_dead(ses)) 208 return nfserr_badsession; 209 status = get_client_locked(ses->se_client); 210 if (status) 211 return status; 212 atomic_inc(&ses->se_ref); 213 return nfs_ok; 214 } 215 216 static void nfsd4_put_session_locked(struct nfsd4_session *ses) 217 { 218 struct nfs4_client *clp = ses->se_client; 219 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 220 221 lockdep_assert_held(&nn->client_lock); 222 223 if (atomic_dec_and_test(&ses->se_ref) && is_session_dead(ses)) 224 free_session(ses); 225 put_client_renew_locked(clp); 226 } 227 228 static void nfsd4_put_session(struct nfsd4_session *ses) 229 { 230 struct nfs4_client *clp = ses->se_client; 231 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 232 233 spin_lock(&nn->client_lock); 234 nfsd4_put_session_locked(ses); 235 spin_unlock(&nn->client_lock); 236 } 237 238 static struct nfsd4_blocked_lock * 239 find_blocked_lock(struct nfs4_lockowner *lo, struct knfsd_fh *fh, 240 struct nfsd_net *nn) 241 { 242 struct nfsd4_blocked_lock *cur, *found = NULL; 243 244 spin_lock(&nn->blocked_locks_lock); 245 list_for_each_entry(cur, &lo->lo_blocked, nbl_list) { 246 if (fh_match(fh, &cur->nbl_fh)) { 247 list_del_init(&cur->nbl_list); 248 list_del_init(&cur->nbl_lru); 249 found = cur; 250 break; 251 } 252 } 253 spin_unlock(&nn->blocked_locks_lock); 254 if (found) 255 locks_delete_block(&found->nbl_lock); 256 return found; 257 } 258 259 static struct nfsd4_blocked_lock * 260 find_or_allocate_block(struct nfs4_lockowner *lo, struct knfsd_fh *fh, 261 struct nfsd_net *nn) 262 { 263 struct nfsd4_blocked_lock *nbl; 264 265 nbl = find_blocked_lock(lo, fh, nn); 266 if (!nbl) { 267 nbl= kmalloc(sizeof(*nbl), GFP_KERNEL); 268 if (nbl) { 269 fh_copy_shallow(&nbl->nbl_fh, fh); 270 locks_init_lock(&nbl->nbl_lock); 271 nfsd4_init_cb(&nbl->nbl_cb, lo->lo_owner.so_client, 272 &nfsd4_cb_notify_lock_ops, 273 NFSPROC4_CLNT_CB_NOTIFY_LOCK); 274 } 275 } 276 return nbl; 277 } 278 279 static void 280 free_blocked_lock(struct nfsd4_blocked_lock *nbl) 281 { 282 locks_delete_block(&nbl->nbl_lock); 283 locks_release_private(&nbl->nbl_lock); 284 kfree(nbl); 285 } 286 287 static void 288 remove_blocked_locks(struct nfs4_lockowner *lo) 289 { 290 struct nfs4_client *clp = lo->lo_owner.so_client; 291 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 292 struct nfsd4_blocked_lock *nbl; 293 LIST_HEAD(reaplist); 294 295 /* Dequeue all blocked locks */ 296 spin_lock(&nn->blocked_locks_lock); 297 while (!list_empty(&lo->lo_blocked)) { 298 nbl = list_first_entry(&lo->lo_blocked, 299 struct nfsd4_blocked_lock, 300 nbl_list); 301 list_del_init(&nbl->nbl_list); 302 list_move(&nbl->nbl_lru, &reaplist); 303 } 304 spin_unlock(&nn->blocked_locks_lock); 305 306 /* Now free them */ 307 while (!list_empty(&reaplist)) { 308 nbl = list_first_entry(&reaplist, struct nfsd4_blocked_lock, 309 nbl_lru); 310 list_del_init(&nbl->nbl_lru); 311 free_blocked_lock(nbl); 312 } 313 } 314 315 static void 316 nfsd4_cb_notify_lock_prepare(struct nfsd4_callback *cb) 317 { 318 struct nfsd4_blocked_lock *nbl = container_of(cb, 319 struct nfsd4_blocked_lock, nbl_cb); 320 locks_delete_block(&nbl->nbl_lock); 321 } 322 323 static int 324 nfsd4_cb_notify_lock_done(struct nfsd4_callback *cb, struct rpc_task *task) 325 { 326 /* 327 * Since this is just an optimization, we don't try very hard if it 328 * turns out not to succeed. We'll requeue it on NFS4ERR_DELAY, and 329 * just quit trying on anything else. 330 */ 331 switch (task->tk_status) { 332 case -NFS4ERR_DELAY: 333 rpc_delay(task, 1 * HZ); 334 return 0; 335 default: 336 return 1; 337 } 338 } 339 340 static void 341 nfsd4_cb_notify_lock_release(struct nfsd4_callback *cb) 342 { 343 struct nfsd4_blocked_lock *nbl = container_of(cb, 344 struct nfsd4_blocked_lock, nbl_cb); 345 346 free_blocked_lock(nbl); 347 } 348 349 static const struct nfsd4_callback_ops nfsd4_cb_notify_lock_ops = { 350 .prepare = nfsd4_cb_notify_lock_prepare, 351 .done = nfsd4_cb_notify_lock_done, 352 .release = nfsd4_cb_notify_lock_release, 353 }; 354 355 static inline struct nfs4_stateowner * 356 nfs4_get_stateowner(struct nfs4_stateowner *sop) 357 { 358 atomic_inc(&sop->so_count); 359 return sop; 360 } 361 362 static int 363 same_owner_str(struct nfs4_stateowner *sop, struct xdr_netobj *owner) 364 { 365 return (sop->so_owner.len == owner->len) && 366 0 == memcmp(sop->so_owner.data, owner->data, owner->len); 367 } 368 369 static struct nfs4_openowner * 370 find_openstateowner_str_locked(unsigned int hashval, struct nfsd4_open *open, 371 struct nfs4_client *clp) 372 { 373 struct nfs4_stateowner *so; 374 375 lockdep_assert_held(&clp->cl_lock); 376 377 list_for_each_entry(so, &clp->cl_ownerstr_hashtbl[hashval], 378 so_strhash) { 379 if (!so->so_is_open_owner) 380 continue; 381 if (same_owner_str(so, &open->op_owner)) 382 return openowner(nfs4_get_stateowner(so)); 383 } 384 return NULL; 385 } 386 387 static struct nfs4_openowner * 388 find_openstateowner_str(unsigned int hashval, struct nfsd4_open *open, 389 struct nfs4_client *clp) 390 { 391 struct nfs4_openowner *oo; 392 393 spin_lock(&clp->cl_lock); 394 oo = find_openstateowner_str_locked(hashval, open, clp); 395 spin_unlock(&clp->cl_lock); 396 return oo; 397 } 398 399 static inline u32 400 opaque_hashval(const void *ptr, int nbytes) 401 { 402 unsigned char *cptr = (unsigned char *) ptr; 403 404 u32 x = 0; 405 while (nbytes--) { 406 x *= 37; 407 x += *cptr++; 408 } 409 return x; 410 } 411 412 static void nfsd4_free_file_rcu(struct rcu_head *rcu) 413 { 414 struct nfs4_file *fp = container_of(rcu, struct nfs4_file, fi_rcu); 415 416 kmem_cache_free(file_slab, fp); 417 } 418 419 void 420 put_nfs4_file(struct nfs4_file *fi) 421 { 422 might_lock(&state_lock); 423 424 if (refcount_dec_and_lock(&fi->fi_ref, &state_lock)) { 425 hlist_del_rcu(&fi->fi_hash); 426 spin_unlock(&state_lock); 427 WARN_ON_ONCE(!list_empty(&fi->fi_clnt_odstate)); 428 WARN_ON_ONCE(!list_empty(&fi->fi_delegations)); 429 call_rcu(&fi->fi_rcu, nfsd4_free_file_rcu); 430 } 431 } 432 433 static struct nfsd_file * 434 __nfs4_get_fd(struct nfs4_file *f, int oflag) 435 { 436 if (f->fi_fds[oflag]) 437 return nfsd_file_get(f->fi_fds[oflag]); 438 return NULL; 439 } 440 441 static struct nfsd_file * 442 find_writeable_file_locked(struct nfs4_file *f) 443 { 444 struct nfsd_file *ret; 445 446 lockdep_assert_held(&f->fi_lock); 447 448 ret = __nfs4_get_fd(f, O_WRONLY); 449 if (!ret) 450 ret = __nfs4_get_fd(f, O_RDWR); 451 return ret; 452 } 453 454 static struct nfsd_file * 455 find_writeable_file(struct nfs4_file *f) 456 { 457 struct nfsd_file *ret; 458 459 spin_lock(&f->fi_lock); 460 ret = find_writeable_file_locked(f); 461 spin_unlock(&f->fi_lock); 462 463 return ret; 464 } 465 466 static struct nfsd_file * 467 find_readable_file_locked(struct nfs4_file *f) 468 { 469 struct nfsd_file *ret; 470 471 lockdep_assert_held(&f->fi_lock); 472 473 ret = __nfs4_get_fd(f, O_RDONLY); 474 if (!ret) 475 ret = __nfs4_get_fd(f, O_RDWR); 476 return ret; 477 } 478 479 static struct nfsd_file * 480 find_readable_file(struct nfs4_file *f) 481 { 482 struct nfsd_file *ret; 483 484 spin_lock(&f->fi_lock); 485 ret = find_readable_file_locked(f); 486 spin_unlock(&f->fi_lock); 487 488 return ret; 489 } 490 491 struct nfsd_file * 492 find_any_file(struct nfs4_file *f) 493 { 494 struct nfsd_file *ret; 495 496 spin_lock(&f->fi_lock); 497 ret = __nfs4_get_fd(f, O_RDWR); 498 if (!ret) { 499 ret = __nfs4_get_fd(f, O_WRONLY); 500 if (!ret) 501 ret = __nfs4_get_fd(f, O_RDONLY); 502 } 503 spin_unlock(&f->fi_lock); 504 return ret; 505 } 506 507 static atomic_long_t num_delegations; 508 unsigned long max_delegations; 509 510 /* 511 * Open owner state (share locks) 512 */ 513 514 /* hash tables for lock and open owners */ 515 #define OWNER_HASH_BITS 8 516 #define OWNER_HASH_SIZE (1 << OWNER_HASH_BITS) 517 #define OWNER_HASH_MASK (OWNER_HASH_SIZE - 1) 518 519 static unsigned int ownerstr_hashval(struct xdr_netobj *ownername) 520 { 521 unsigned int ret; 522 523 ret = opaque_hashval(ownername->data, ownername->len); 524 return ret & OWNER_HASH_MASK; 525 } 526 527 /* hash table for nfs4_file */ 528 #define FILE_HASH_BITS 8 529 #define FILE_HASH_SIZE (1 << FILE_HASH_BITS) 530 531 static unsigned int nfsd_fh_hashval(struct knfsd_fh *fh) 532 { 533 return jhash2(fh->fh_base.fh_pad, XDR_QUADLEN(fh->fh_size), 0); 534 } 535 536 static unsigned int file_hashval(struct knfsd_fh *fh) 537 { 538 return nfsd_fh_hashval(fh) & (FILE_HASH_SIZE - 1); 539 } 540 541 static struct hlist_head file_hashtbl[FILE_HASH_SIZE]; 542 543 static void 544 __nfs4_file_get_access(struct nfs4_file *fp, u32 access) 545 { 546 lockdep_assert_held(&fp->fi_lock); 547 548 if (access & NFS4_SHARE_ACCESS_WRITE) 549 atomic_inc(&fp->fi_access[O_WRONLY]); 550 if (access & NFS4_SHARE_ACCESS_READ) 551 atomic_inc(&fp->fi_access[O_RDONLY]); 552 } 553 554 static __be32 555 nfs4_file_get_access(struct nfs4_file *fp, u32 access) 556 { 557 lockdep_assert_held(&fp->fi_lock); 558 559 /* Does this access mode make sense? */ 560 if (access & ~NFS4_SHARE_ACCESS_BOTH) 561 return nfserr_inval; 562 563 /* Does it conflict with a deny mode already set? */ 564 if ((access & fp->fi_share_deny) != 0) 565 return nfserr_share_denied; 566 567 __nfs4_file_get_access(fp, access); 568 return nfs_ok; 569 } 570 571 static __be32 nfs4_file_check_deny(struct nfs4_file *fp, u32 deny) 572 { 573 /* Common case is that there is no deny mode. */ 574 if (deny) { 575 /* Does this deny mode make sense? */ 576 if (deny & ~NFS4_SHARE_DENY_BOTH) 577 return nfserr_inval; 578 579 if ((deny & NFS4_SHARE_DENY_READ) && 580 atomic_read(&fp->fi_access[O_RDONLY])) 581 return nfserr_share_denied; 582 583 if ((deny & NFS4_SHARE_DENY_WRITE) && 584 atomic_read(&fp->fi_access[O_WRONLY])) 585 return nfserr_share_denied; 586 } 587 return nfs_ok; 588 } 589 590 static void __nfs4_file_put_access(struct nfs4_file *fp, int oflag) 591 { 592 might_lock(&fp->fi_lock); 593 594 if (atomic_dec_and_lock(&fp->fi_access[oflag], &fp->fi_lock)) { 595 struct nfsd_file *f1 = NULL; 596 struct nfsd_file *f2 = NULL; 597 598 swap(f1, fp->fi_fds[oflag]); 599 if (atomic_read(&fp->fi_access[1 - oflag]) == 0) 600 swap(f2, fp->fi_fds[O_RDWR]); 601 spin_unlock(&fp->fi_lock); 602 if (f1) 603 nfsd_file_put(f1); 604 if (f2) 605 nfsd_file_put(f2); 606 } 607 } 608 609 static void nfs4_file_put_access(struct nfs4_file *fp, u32 access) 610 { 611 WARN_ON_ONCE(access & ~NFS4_SHARE_ACCESS_BOTH); 612 613 if (access & NFS4_SHARE_ACCESS_WRITE) 614 __nfs4_file_put_access(fp, O_WRONLY); 615 if (access & NFS4_SHARE_ACCESS_READ) 616 __nfs4_file_put_access(fp, O_RDONLY); 617 } 618 619 /* 620 * Allocate a new open/delegation state counter. This is needed for 621 * pNFS for proper return on close semantics. 622 * 623 * Note that we only allocate it for pNFS-enabled exports, otherwise 624 * all pointers to struct nfs4_clnt_odstate are always NULL. 625 */ 626 static struct nfs4_clnt_odstate * 627 alloc_clnt_odstate(struct nfs4_client *clp) 628 { 629 struct nfs4_clnt_odstate *co; 630 631 co = kmem_cache_zalloc(odstate_slab, GFP_KERNEL); 632 if (co) { 633 co->co_client = clp; 634 refcount_set(&co->co_odcount, 1); 635 } 636 return co; 637 } 638 639 static void 640 hash_clnt_odstate_locked(struct nfs4_clnt_odstate *co) 641 { 642 struct nfs4_file *fp = co->co_file; 643 644 lockdep_assert_held(&fp->fi_lock); 645 list_add(&co->co_perfile, &fp->fi_clnt_odstate); 646 } 647 648 static inline void 649 get_clnt_odstate(struct nfs4_clnt_odstate *co) 650 { 651 if (co) 652 refcount_inc(&co->co_odcount); 653 } 654 655 static void 656 put_clnt_odstate(struct nfs4_clnt_odstate *co) 657 { 658 struct nfs4_file *fp; 659 660 if (!co) 661 return; 662 663 fp = co->co_file; 664 if (refcount_dec_and_lock(&co->co_odcount, &fp->fi_lock)) { 665 list_del(&co->co_perfile); 666 spin_unlock(&fp->fi_lock); 667 668 nfsd4_return_all_file_layouts(co->co_client, fp); 669 kmem_cache_free(odstate_slab, co); 670 } 671 } 672 673 static struct nfs4_clnt_odstate * 674 find_or_hash_clnt_odstate(struct nfs4_file *fp, struct nfs4_clnt_odstate *new) 675 { 676 struct nfs4_clnt_odstate *co; 677 struct nfs4_client *cl; 678 679 if (!new) 680 return NULL; 681 682 cl = new->co_client; 683 684 spin_lock(&fp->fi_lock); 685 list_for_each_entry(co, &fp->fi_clnt_odstate, co_perfile) { 686 if (co->co_client == cl) { 687 get_clnt_odstate(co); 688 goto out; 689 } 690 } 691 co = new; 692 co->co_file = fp; 693 hash_clnt_odstate_locked(new); 694 out: 695 spin_unlock(&fp->fi_lock); 696 return co; 697 } 698 699 struct nfs4_stid *nfs4_alloc_stid(struct nfs4_client *cl, struct kmem_cache *slab, 700 void (*sc_free)(struct nfs4_stid *)) 701 { 702 struct nfs4_stid *stid; 703 int new_id; 704 705 stid = kmem_cache_zalloc(slab, GFP_KERNEL); 706 if (!stid) 707 return NULL; 708 709 idr_preload(GFP_KERNEL); 710 spin_lock(&cl->cl_lock); 711 /* Reserving 0 for start of file in nfsdfs "states" file: */ 712 new_id = idr_alloc_cyclic(&cl->cl_stateids, stid, 1, 0, GFP_NOWAIT); 713 spin_unlock(&cl->cl_lock); 714 idr_preload_end(); 715 if (new_id < 0) 716 goto out_free; 717 718 stid->sc_free = sc_free; 719 stid->sc_client = cl; 720 stid->sc_stateid.si_opaque.so_id = new_id; 721 stid->sc_stateid.si_opaque.so_clid = cl->cl_clientid; 722 /* Will be incremented before return to client: */ 723 refcount_set(&stid->sc_count, 1); 724 spin_lock_init(&stid->sc_lock); 725 726 /* 727 * It shouldn't be a problem to reuse an opaque stateid value. 728 * I don't think it is for 4.1. But with 4.0 I worry that, for 729 * example, a stray write retransmission could be accepted by 730 * the server when it should have been rejected. Therefore, 731 * adopt a trick from the sctp code to attempt to maximize the 732 * amount of time until an id is reused, by ensuring they always 733 * "increase" (mod INT_MAX): 734 */ 735 return stid; 736 out_free: 737 kmem_cache_free(slab, stid); 738 return NULL; 739 } 740 741 /* 742 * Create a unique stateid_t to represent each COPY. 743 */ 744 int nfs4_init_cp_state(struct nfsd_net *nn, struct nfsd4_copy *copy) 745 { 746 int new_id; 747 748 idr_preload(GFP_KERNEL); 749 spin_lock(&nn->s2s_cp_lock); 750 new_id = idr_alloc_cyclic(&nn->s2s_cp_stateids, copy, 0, 0, GFP_NOWAIT); 751 spin_unlock(&nn->s2s_cp_lock); 752 idr_preload_end(); 753 if (new_id < 0) 754 return 0; 755 copy->cp_stateid.si_opaque.so_id = new_id; 756 copy->cp_stateid.si_opaque.so_clid.cl_boot = nn->boot_time; 757 copy->cp_stateid.si_opaque.so_clid.cl_id = nn->s2s_cp_cl_id; 758 return 1; 759 } 760 761 void nfs4_free_cp_state(struct nfsd4_copy *copy) 762 { 763 struct nfsd_net *nn; 764 765 nn = net_generic(copy->cp_clp->net, nfsd_net_id); 766 spin_lock(&nn->s2s_cp_lock); 767 idr_remove(&nn->s2s_cp_stateids, copy->cp_stateid.si_opaque.so_id); 768 spin_unlock(&nn->s2s_cp_lock); 769 } 770 771 static struct nfs4_ol_stateid * nfs4_alloc_open_stateid(struct nfs4_client *clp) 772 { 773 struct nfs4_stid *stid; 774 775 stid = nfs4_alloc_stid(clp, stateid_slab, nfs4_free_ol_stateid); 776 if (!stid) 777 return NULL; 778 779 return openlockstateid(stid); 780 } 781 782 static void nfs4_free_deleg(struct nfs4_stid *stid) 783 { 784 kmem_cache_free(deleg_slab, stid); 785 atomic_long_dec(&num_delegations); 786 } 787 788 /* 789 * When we recall a delegation, we should be careful not to hand it 790 * out again straight away. 791 * To ensure this we keep a pair of bloom filters ('new' and 'old') 792 * in which the filehandles of recalled delegations are "stored". 793 * If a filehandle appear in either filter, a delegation is blocked. 794 * When a delegation is recalled, the filehandle is stored in the "new" 795 * filter. 796 * Every 30 seconds we swap the filters and clear the "new" one, 797 * unless both are empty of course. 798 * 799 * Each filter is 256 bits. We hash the filehandle to 32bit and use the 800 * low 3 bytes as hash-table indices. 801 * 802 * 'blocked_delegations_lock', which is always taken in block_delegations(), 803 * is used to manage concurrent access. Testing does not need the lock 804 * except when swapping the two filters. 805 */ 806 static DEFINE_SPINLOCK(blocked_delegations_lock); 807 static struct bloom_pair { 808 int entries, old_entries; 809 time_t swap_time; 810 int new; /* index into 'set' */ 811 DECLARE_BITMAP(set[2], 256); 812 } blocked_delegations; 813 814 static int delegation_blocked(struct knfsd_fh *fh) 815 { 816 u32 hash; 817 struct bloom_pair *bd = &blocked_delegations; 818 819 if (bd->entries == 0) 820 return 0; 821 if (seconds_since_boot() - bd->swap_time > 30) { 822 spin_lock(&blocked_delegations_lock); 823 if (seconds_since_boot() - bd->swap_time > 30) { 824 bd->entries -= bd->old_entries; 825 bd->old_entries = bd->entries; 826 memset(bd->set[bd->new], 0, 827 sizeof(bd->set[0])); 828 bd->new = 1-bd->new; 829 bd->swap_time = seconds_since_boot(); 830 } 831 spin_unlock(&blocked_delegations_lock); 832 } 833 hash = jhash(&fh->fh_base, fh->fh_size, 0); 834 if (test_bit(hash&255, bd->set[0]) && 835 test_bit((hash>>8)&255, bd->set[0]) && 836 test_bit((hash>>16)&255, bd->set[0])) 837 return 1; 838 839 if (test_bit(hash&255, bd->set[1]) && 840 test_bit((hash>>8)&255, bd->set[1]) && 841 test_bit((hash>>16)&255, bd->set[1])) 842 return 1; 843 844 return 0; 845 } 846 847 static void block_delegations(struct knfsd_fh *fh) 848 { 849 u32 hash; 850 struct bloom_pair *bd = &blocked_delegations; 851 852 hash = jhash(&fh->fh_base, fh->fh_size, 0); 853 854 spin_lock(&blocked_delegations_lock); 855 __set_bit(hash&255, bd->set[bd->new]); 856 __set_bit((hash>>8)&255, bd->set[bd->new]); 857 __set_bit((hash>>16)&255, bd->set[bd->new]); 858 if (bd->entries == 0) 859 bd->swap_time = seconds_since_boot(); 860 bd->entries += 1; 861 spin_unlock(&blocked_delegations_lock); 862 } 863 864 static struct nfs4_delegation * 865 alloc_init_deleg(struct nfs4_client *clp, struct nfs4_file *fp, 866 struct svc_fh *current_fh, 867 struct nfs4_clnt_odstate *odstate) 868 { 869 struct nfs4_delegation *dp; 870 long n; 871 872 dprintk("NFSD alloc_init_deleg\n"); 873 n = atomic_long_inc_return(&num_delegations); 874 if (n < 0 || n > max_delegations) 875 goto out_dec; 876 if (delegation_blocked(¤t_fh->fh_handle)) 877 goto out_dec; 878 dp = delegstateid(nfs4_alloc_stid(clp, deleg_slab, nfs4_free_deleg)); 879 if (dp == NULL) 880 goto out_dec; 881 882 /* 883 * delegation seqid's are never incremented. The 4.1 special 884 * meaning of seqid 0 isn't meaningful, really, but let's avoid 885 * 0 anyway just for consistency and use 1: 886 */ 887 dp->dl_stid.sc_stateid.si_generation = 1; 888 INIT_LIST_HEAD(&dp->dl_perfile); 889 INIT_LIST_HEAD(&dp->dl_perclnt); 890 INIT_LIST_HEAD(&dp->dl_recall_lru); 891 dp->dl_clnt_odstate = odstate; 892 get_clnt_odstate(odstate); 893 dp->dl_type = NFS4_OPEN_DELEGATE_READ; 894 dp->dl_retries = 1; 895 nfsd4_init_cb(&dp->dl_recall, dp->dl_stid.sc_client, 896 &nfsd4_cb_recall_ops, NFSPROC4_CLNT_CB_RECALL); 897 get_nfs4_file(fp); 898 dp->dl_stid.sc_file = fp; 899 return dp; 900 out_dec: 901 atomic_long_dec(&num_delegations); 902 return NULL; 903 } 904 905 void 906 nfs4_put_stid(struct nfs4_stid *s) 907 { 908 struct nfs4_file *fp = s->sc_file; 909 struct nfs4_client *clp = s->sc_client; 910 911 might_lock(&clp->cl_lock); 912 913 if (!refcount_dec_and_lock(&s->sc_count, &clp->cl_lock)) { 914 wake_up_all(&close_wq); 915 return; 916 } 917 idr_remove(&clp->cl_stateids, s->sc_stateid.si_opaque.so_id); 918 spin_unlock(&clp->cl_lock); 919 s->sc_free(s); 920 if (fp) 921 put_nfs4_file(fp); 922 } 923 924 void 925 nfs4_inc_and_copy_stateid(stateid_t *dst, struct nfs4_stid *stid) 926 { 927 stateid_t *src = &stid->sc_stateid; 928 929 spin_lock(&stid->sc_lock); 930 if (unlikely(++src->si_generation == 0)) 931 src->si_generation = 1; 932 memcpy(dst, src, sizeof(*dst)); 933 spin_unlock(&stid->sc_lock); 934 } 935 936 static void put_deleg_file(struct nfs4_file *fp) 937 { 938 struct nfsd_file *nf = NULL; 939 940 spin_lock(&fp->fi_lock); 941 if (--fp->fi_delegees == 0) 942 swap(nf, fp->fi_deleg_file); 943 spin_unlock(&fp->fi_lock); 944 945 if (nf) 946 nfsd_file_put(nf); 947 } 948 949 static void nfs4_unlock_deleg_lease(struct nfs4_delegation *dp) 950 { 951 struct nfs4_file *fp = dp->dl_stid.sc_file; 952 struct nfsd_file *nf = fp->fi_deleg_file; 953 954 WARN_ON_ONCE(!fp->fi_delegees); 955 956 vfs_setlease(nf->nf_file, F_UNLCK, NULL, (void **)&dp); 957 put_deleg_file(fp); 958 } 959 960 static void destroy_unhashed_deleg(struct nfs4_delegation *dp) 961 { 962 put_clnt_odstate(dp->dl_clnt_odstate); 963 nfs4_unlock_deleg_lease(dp); 964 nfs4_put_stid(&dp->dl_stid); 965 } 966 967 void nfs4_unhash_stid(struct nfs4_stid *s) 968 { 969 s->sc_type = 0; 970 } 971 972 /** 973 * nfs4_delegation_exists - Discover if this delegation already exists 974 * @clp: a pointer to the nfs4_client we're granting a delegation to 975 * @fp: a pointer to the nfs4_file we're granting a delegation on 976 * 977 * Return: 978 * On success: true iff an existing delegation is found 979 */ 980 981 static bool 982 nfs4_delegation_exists(struct nfs4_client *clp, struct nfs4_file *fp) 983 { 984 struct nfs4_delegation *searchdp = NULL; 985 struct nfs4_client *searchclp = NULL; 986 987 lockdep_assert_held(&state_lock); 988 lockdep_assert_held(&fp->fi_lock); 989 990 list_for_each_entry(searchdp, &fp->fi_delegations, dl_perfile) { 991 searchclp = searchdp->dl_stid.sc_client; 992 if (clp == searchclp) { 993 return true; 994 } 995 } 996 return false; 997 } 998 999 /** 1000 * hash_delegation_locked - Add a delegation to the appropriate lists 1001 * @dp: a pointer to the nfs4_delegation we are adding. 1002 * @fp: a pointer to the nfs4_file we're granting a delegation on 1003 * 1004 * Return: 1005 * On success: NULL if the delegation was successfully hashed. 1006 * 1007 * On error: -EAGAIN if one was previously granted to this 1008 * nfs4_client for this nfs4_file. Delegation is not hashed. 1009 * 1010 */ 1011 1012 static int 1013 hash_delegation_locked(struct nfs4_delegation *dp, struct nfs4_file *fp) 1014 { 1015 struct nfs4_client *clp = dp->dl_stid.sc_client; 1016 1017 lockdep_assert_held(&state_lock); 1018 lockdep_assert_held(&fp->fi_lock); 1019 1020 if (nfs4_delegation_exists(clp, fp)) 1021 return -EAGAIN; 1022 refcount_inc(&dp->dl_stid.sc_count); 1023 dp->dl_stid.sc_type = NFS4_DELEG_STID; 1024 list_add(&dp->dl_perfile, &fp->fi_delegations); 1025 list_add(&dp->dl_perclnt, &clp->cl_delegations); 1026 return 0; 1027 } 1028 1029 static bool 1030 unhash_delegation_locked(struct nfs4_delegation *dp) 1031 { 1032 struct nfs4_file *fp = dp->dl_stid.sc_file; 1033 1034 lockdep_assert_held(&state_lock); 1035 1036 if (list_empty(&dp->dl_perfile)) 1037 return false; 1038 1039 dp->dl_stid.sc_type = NFS4_CLOSED_DELEG_STID; 1040 /* Ensure that deleg break won't try to requeue it */ 1041 ++dp->dl_time; 1042 spin_lock(&fp->fi_lock); 1043 list_del_init(&dp->dl_perclnt); 1044 list_del_init(&dp->dl_recall_lru); 1045 list_del_init(&dp->dl_perfile); 1046 spin_unlock(&fp->fi_lock); 1047 return true; 1048 } 1049 1050 static void destroy_delegation(struct nfs4_delegation *dp) 1051 { 1052 bool unhashed; 1053 1054 spin_lock(&state_lock); 1055 unhashed = unhash_delegation_locked(dp); 1056 spin_unlock(&state_lock); 1057 if (unhashed) 1058 destroy_unhashed_deleg(dp); 1059 } 1060 1061 static void revoke_delegation(struct nfs4_delegation *dp) 1062 { 1063 struct nfs4_client *clp = dp->dl_stid.sc_client; 1064 1065 WARN_ON(!list_empty(&dp->dl_recall_lru)); 1066 1067 if (clp->cl_minorversion) { 1068 dp->dl_stid.sc_type = NFS4_REVOKED_DELEG_STID; 1069 refcount_inc(&dp->dl_stid.sc_count); 1070 spin_lock(&clp->cl_lock); 1071 list_add(&dp->dl_recall_lru, &clp->cl_revoked); 1072 spin_unlock(&clp->cl_lock); 1073 } 1074 destroy_unhashed_deleg(dp); 1075 } 1076 1077 /* 1078 * SETCLIENTID state 1079 */ 1080 1081 static unsigned int clientid_hashval(u32 id) 1082 { 1083 return id & CLIENT_HASH_MASK; 1084 } 1085 1086 static unsigned int clientstr_hashval(struct xdr_netobj name) 1087 { 1088 return opaque_hashval(name.data, 8) & CLIENT_HASH_MASK; 1089 } 1090 1091 /* 1092 * We store the NONE, READ, WRITE, and BOTH bits separately in the 1093 * st_{access,deny}_bmap field of the stateid, in order to track not 1094 * only what share bits are currently in force, but also what 1095 * combinations of share bits previous opens have used. This allows us 1096 * to enforce the recommendation of rfc 3530 14.2.19 that the server 1097 * return an error if the client attempt to downgrade to a combination 1098 * of share bits not explicable by closing some of its previous opens. 1099 * 1100 * XXX: This enforcement is actually incomplete, since we don't keep 1101 * track of access/deny bit combinations; so, e.g., we allow: 1102 * 1103 * OPEN allow read, deny write 1104 * OPEN allow both, deny none 1105 * DOWNGRADE allow read, deny none 1106 * 1107 * which we should reject. 1108 */ 1109 static unsigned int 1110 bmap_to_share_mode(unsigned long bmap) { 1111 int i; 1112 unsigned int access = 0; 1113 1114 for (i = 1; i < 4; i++) { 1115 if (test_bit(i, &bmap)) 1116 access |= i; 1117 } 1118 return access; 1119 } 1120 1121 /* set share access for a given stateid */ 1122 static inline void 1123 set_access(u32 access, struct nfs4_ol_stateid *stp) 1124 { 1125 unsigned char mask = 1 << access; 1126 1127 WARN_ON_ONCE(access > NFS4_SHARE_ACCESS_BOTH); 1128 stp->st_access_bmap |= mask; 1129 } 1130 1131 /* clear share access for a given stateid */ 1132 static inline void 1133 clear_access(u32 access, struct nfs4_ol_stateid *stp) 1134 { 1135 unsigned char mask = 1 << access; 1136 1137 WARN_ON_ONCE(access > NFS4_SHARE_ACCESS_BOTH); 1138 stp->st_access_bmap &= ~mask; 1139 } 1140 1141 /* test whether a given stateid has access */ 1142 static inline bool 1143 test_access(u32 access, struct nfs4_ol_stateid *stp) 1144 { 1145 unsigned char mask = 1 << access; 1146 1147 return (bool)(stp->st_access_bmap & mask); 1148 } 1149 1150 /* set share deny for a given stateid */ 1151 static inline void 1152 set_deny(u32 deny, struct nfs4_ol_stateid *stp) 1153 { 1154 unsigned char mask = 1 << deny; 1155 1156 WARN_ON_ONCE(deny > NFS4_SHARE_DENY_BOTH); 1157 stp->st_deny_bmap |= mask; 1158 } 1159 1160 /* clear share deny for a given stateid */ 1161 static inline void 1162 clear_deny(u32 deny, struct nfs4_ol_stateid *stp) 1163 { 1164 unsigned char mask = 1 << deny; 1165 1166 WARN_ON_ONCE(deny > NFS4_SHARE_DENY_BOTH); 1167 stp->st_deny_bmap &= ~mask; 1168 } 1169 1170 /* test whether a given stateid is denying specific access */ 1171 static inline bool 1172 test_deny(u32 deny, struct nfs4_ol_stateid *stp) 1173 { 1174 unsigned char mask = 1 << deny; 1175 1176 return (bool)(stp->st_deny_bmap & mask); 1177 } 1178 1179 static int nfs4_access_to_omode(u32 access) 1180 { 1181 switch (access & NFS4_SHARE_ACCESS_BOTH) { 1182 case NFS4_SHARE_ACCESS_READ: 1183 return O_RDONLY; 1184 case NFS4_SHARE_ACCESS_WRITE: 1185 return O_WRONLY; 1186 case NFS4_SHARE_ACCESS_BOTH: 1187 return O_RDWR; 1188 } 1189 WARN_ON_ONCE(1); 1190 return O_RDONLY; 1191 } 1192 1193 /* 1194 * A stateid that had a deny mode associated with it is being released 1195 * or downgraded. Recalculate the deny mode on the file. 1196 */ 1197 static void 1198 recalculate_deny_mode(struct nfs4_file *fp) 1199 { 1200 struct nfs4_ol_stateid *stp; 1201 1202 spin_lock(&fp->fi_lock); 1203 fp->fi_share_deny = 0; 1204 list_for_each_entry(stp, &fp->fi_stateids, st_perfile) 1205 fp->fi_share_deny |= bmap_to_share_mode(stp->st_deny_bmap); 1206 spin_unlock(&fp->fi_lock); 1207 } 1208 1209 static void 1210 reset_union_bmap_deny(u32 deny, struct nfs4_ol_stateid *stp) 1211 { 1212 int i; 1213 bool change = false; 1214 1215 for (i = 1; i < 4; i++) { 1216 if ((i & deny) != i) { 1217 change = true; 1218 clear_deny(i, stp); 1219 } 1220 } 1221 1222 /* Recalculate per-file deny mode if there was a change */ 1223 if (change) 1224 recalculate_deny_mode(stp->st_stid.sc_file); 1225 } 1226 1227 /* release all access and file references for a given stateid */ 1228 static void 1229 release_all_access(struct nfs4_ol_stateid *stp) 1230 { 1231 int i; 1232 struct nfs4_file *fp = stp->st_stid.sc_file; 1233 1234 if (fp && stp->st_deny_bmap != 0) 1235 recalculate_deny_mode(fp); 1236 1237 for (i = 1; i < 4; i++) { 1238 if (test_access(i, stp)) 1239 nfs4_file_put_access(stp->st_stid.sc_file, i); 1240 clear_access(i, stp); 1241 } 1242 } 1243 1244 static inline void nfs4_free_stateowner(struct nfs4_stateowner *sop) 1245 { 1246 kfree(sop->so_owner.data); 1247 sop->so_ops->so_free(sop); 1248 } 1249 1250 static void nfs4_put_stateowner(struct nfs4_stateowner *sop) 1251 { 1252 struct nfs4_client *clp = sop->so_client; 1253 1254 might_lock(&clp->cl_lock); 1255 1256 if (!atomic_dec_and_lock(&sop->so_count, &clp->cl_lock)) 1257 return; 1258 sop->so_ops->so_unhash(sop); 1259 spin_unlock(&clp->cl_lock); 1260 nfs4_free_stateowner(sop); 1261 } 1262 1263 static bool unhash_ol_stateid(struct nfs4_ol_stateid *stp) 1264 { 1265 struct nfs4_file *fp = stp->st_stid.sc_file; 1266 1267 lockdep_assert_held(&stp->st_stateowner->so_client->cl_lock); 1268 1269 if (list_empty(&stp->st_perfile)) 1270 return false; 1271 1272 spin_lock(&fp->fi_lock); 1273 list_del_init(&stp->st_perfile); 1274 spin_unlock(&fp->fi_lock); 1275 list_del(&stp->st_perstateowner); 1276 return true; 1277 } 1278 1279 static void nfs4_free_ol_stateid(struct nfs4_stid *stid) 1280 { 1281 struct nfs4_ol_stateid *stp = openlockstateid(stid); 1282 1283 put_clnt_odstate(stp->st_clnt_odstate); 1284 release_all_access(stp); 1285 if (stp->st_stateowner) 1286 nfs4_put_stateowner(stp->st_stateowner); 1287 kmem_cache_free(stateid_slab, stid); 1288 } 1289 1290 static void nfs4_free_lock_stateid(struct nfs4_stid *stid) 1291 { 1292 struct nfs4_ol_stateid *stp = openlockstateid(stid); 1293 struct nfs4_lockowner *lo = lockowner(stp->st_stateowner); 1294 struct nfsd_file *nf; 1295 1296 nf = find_any_file(stp->st_stid.sc_file); 1297 if (nf) { 1298 get_file(nf->nf_file); 1299 filp_close(nf->nf_file, (fl_owner_t)lo); 1300 nfsd_file_put(nf); 1301 } 1302 nfs4_free_ol_stateid(stid); 1303 } 1304 1305 /* 1306 * Put the persistent reference to an already unhashed generic stateid, while 1307 * holding the cl_lock. If it's the last reference, then put it onto the 1308 * reaplist for later destruction. 1309 */ 1310 static void put_ol_stateid_locked(struct nfs4_ol_stateid *stp, 1311 struct list_head *reaplist) 1312 { 1313 struct nfs4_stid *s = &stp->st_stid; 1314 struct nfs4_client *clp = s->sc_client; 1315 1316 lockdep_assert_held(&clp->cl_lock); 1317 1318 WARN_ON_ONCE(!list_empty(&stp->st_locks)); 1319 1320 if (!refcount_dec_and_test(&s->sc_count)) { 1321 wake_up_all(&close_wq); 1322 return; 1323 } 1324 1325 idr_remove(&clp->cl_stateids, s->sc_stateid.si_opaque.so_id); 1326 list_add(&stp->st_locks, reaplist); 1327 } 1328 1329 static bool unhash_lock_stateid(struct nfs4_ol_stateid *stp) 1330 { 1331 lockdep_assert_held(&stp->st_stid.sc_client->cl_lock); 1332 1333 list_del_init(&stp->st_locks); 1334 nfs4_unhash_stid(&stp->st_stid); 1335 return unhash_ol_stateid(stp); 1336 } 1337 1338 static void release_lock_stateid(struct nfs4_ol_stateid *stp) 1339 { 1340 struct nfs4_client *clp = stp->st_stid.sc_client; 1341 bool unhashed; 1342 1343 spin_lock(&clp->cl_lock); 1344 unhashed = unhash_lock_stateid(stp); 1345 spin_unlock(&clp->cl_lock); 1346 if (unhashed) 1347 nfs4_put_stid(&stp->st_stid); 1348 } 1349 1350 static void unhash_lockowner_locked(struct nfs4_lockowner *lo) 1351 { 1352 struct nfs4_client *clp = lo->lo_owner.so_client; 1353 1354 lockdep_assert_held(&clp->cl_lock); 1355 1356 list_del_init(&lo->lo_owner.so_strhash); 1357 } 1358 1359 /* 1360 * Free a list of generic stateids that were collected earlier after being 1361 * fully unhashed. 1362 */ 1363 static void 1364 free_ol_stateid_reaplist(struct list_head *reaplist) 1365 { 1366 struct nfs4_ol_stateid *stp; 1367 struct nfs4_file *fp; 1368 1369 might_sleep(); 1370 1371 while (!list_empty(reaplist)) { 1372 stp = list_first_entry(reaplist, struct nfs4_ol_stateid, 1373 st_locks); 1374 list_del(&stp->st_locks); 1375 fp = stp->st_stid.sc_file; 1376 stp->st_stid.sc_free(&stp->st_stid); 1377 if (fp) 1378 put_nfs4_file(fp); 1379 } 1380 } 1381 1382 static void release_open_stateid_locks(struct nfs4_ol_stateid *open_stp, 1383 struct list_head *reaplist) 1384 { 1385 struct nfs4_ol_stateid *stp; 1386 1387 lockdep_assert_held(&open_stp->st_stid.sc_client->cl_lock); 1388 1389 while (!list_empty(&open_stp->st_locks)) { 1390 stp = list_entry(open_stp->st_locks.next, 1391 struct nfs4_ol_stateid, st_locks); 1392 WARN_ON(!unhash_lock_stateid(stp)); 1393 put_ol_stateid_locked(stp, reaplist); 1394 } 1395 } 1396 1397 static bool unhash_open_stateid(struct nfs4_ol_stateid *stp, 1398 struct list_head *reaplist) 1399 { 1400 bool unhashed; 1401 1402 lockdep_assert_held(&stp->st_stid.sc_client->cl_lock); 1403 1404 unhashed = unhash_ol_stateid(stp); 1405 release_open_stateid_locks(stp, reaplist); 1406 return unhashed; 1407 } 1408 1409 static void release_open_stateid(struct nfs4_ol_stateid *stp) 1410 { 1411 LIST_HEAD(reaplist); 1412 1413 spin_lock(&stp->st_stid.sc_client->cl_lock); 1414 if (unhash_open_stateid(stp, &reaplist)) 1415 put_ol_stateid_locked(stp, &reaplist); 1416 spin_unlock(&stp->st_stid.sc_client->cl_lock); 1417 free_ol_stateid_reaplist(&reaplist); 1418 } 1419 1420 static void unhash_openowner_locked(struct nfs4_openowner *oo) 1421 { 1422 struct nfs4_client *clp = oo->oo_owner.so_client; 1423 1424 lockdep_assert_held(&clp->cl_lock); 1425 1426 list_del_init(&oo->oo_owner.so_strhash); 1427 list_del_init(&oo->oo_perclient); 1428 } 1429 1430 static void release_last_closed_stateid(struct nfs4_openowner *oo) 1431 { 1432 struct nfsd_net *nn = net_generic(oo->oo_owner.so_client->net, 1433 nfsd_net_id); 1434 struct nfs4_ol_stateid *s; 1435 1436 spin_lock(&nn->client_lock); 1437 s = oo->oo_last_closed_stid; 1438 if (s) { 1439 list_del_init(&oo->oo_close_lru); 1440 oo->oo_last_closed_stid = NULL; 1441 } 1442 spin_unlock(&nn->client_lock); 1443 if (s) 1444 nfs4_put_stid(&s->st_stid); 1445 } 1446 1447 static void release_openowner(struct nfs4_openowner *oo) 1448 { 1449 struct nfs4_ol_stateid *stp; 1450 struct nfs4_client *clp = oo->oo_owner.so_client; 1451 struct list_head reaplist; 1452 1453 INIT_LIST_HEAD(&reaplist); 1454 1455 spin_lock(&clp->cl_lock); 1456 unhash_openowner_locked(oo); 1457 while (!list_empty(&oo->oo_owner.so_stateids)) { 1458 stp = list_first_entry(&oo->oo_owner.so_stateids, 1459 struct nfs4_ol_stateid, st_perstateowner); 1460 if (unhash_open_stateid(stp, &reaplist)) 1461 put_ol_stateid_locked(stp, &reaplist); 1462 } 1463 spin_unlock(&clp->cl_lock); 1464 free_ol_stateid_reaplist(&reaplist); 1465 release_last_closed_stateid(oo); 1466 nfs4_put_stateowner(&oo->oo_owner); 1467 } 1468 1469 static inline int 1470 hash_sessionid(struct nfs4_sessionid *sessionid) 1471 { 1472 struct nfsd4_sessionid *sid = (struct nfsd4_sessionid *)sessionid; 1473 1474 return sid->sequence % SESSION_HASH_SIZE; 1475 } 1476 1477 #ifdef CONFIG_SUNRPC_DEBUG 1478 static inline void 1479 dump_sessionid(const char *fn, struct nfs4_sessionid *sessionid) 1480 { 1481 u32 *ptr = (u32 *)(&sessionid->data[0]); 1482 dprintk("%s: %u:%u:%u:%u\n", fn, ptr[0], ptr[1], ptr[2], ptr[3]); 1483 } 1484 #else 1485 static inline void 1486 dump_sessionid(const char *fn, struct nfs4_sessionid *sessionid) 1487 { 1488 } 1489 #endif 1490 1491 /* 1492 * Bump the seqid on cstate->replay_owner, and clear replay_owner if it 1493 * won't be used for replay. 1494 */ 1495 void nfsd4_bump_seqid(struct nfsd4_compound_state *cstate, __be32 nfserr) 1496 { 1497 struct nfs4_stateowner *so = cstate->replay_owner; 1498 1499 if (nfserr == nfserr_replay_me) 1500 return; 1501 1502 if (!seqid_mutating_err(ntohl(nfserr))) { 1503 nfsd4_cstate_clear_replay(cstate); 1504 return; 1505 } 1506 if (!so) 1507 return; 1508 if (so->so_is_open_owner) 1509 release_last_closed_stateid(openowner(so)); 1510 so->so_seqid++; 1511 return; 1512 } 1513 1514 static void 1515 gen_sessionid(struct nfsd4_session *ses) 1516 { 1517 struct nfs4_client *clp = ses->se_client; 1518 struct nfsd4_sessionid *sid; 1519 1520 sid = (struct nfsd4_sessionid *)ses->se_sessionid.data; 1521 sid->clientid = clp->cl_clientid; 1522 sid->sequence = current_sessionid++; 1523 sid->reserved = 0; 1524 } 1525 1526 /* 1527 * The protocol defines ca_maxresponssize_cached to include the size of 1528 * the rpc header, but all we need to cache is the data starting after 1529 * the end of the initial SEQUENCE operation--the rest we regenerate 1530 * each time. Therefore we can advertise a ca_maxresponssize_cached 1531 * value that is the number of bytes in our cache plus a few additional 1532 * bytes. In order to stay on the safe side, and not promise more than 1533 * we can cache, those additional bytes must be the minimum possible: 24 1534 * bytes of rpc header (xid through accept state, with AUTH_NULL 1535 * verifier), 12 for the compound header (with zero-length tag), and 44 1536 * for the SEQUENCE op response: 1537 */ 1538 #define NFSD_MIN_HDR_SEQ_SZ (24 + 12 + 44) 1539 1540 static void 1541 free_session_slots(struct nfsd4_session *ses) 1542 { 1543 int i; 1544 1545 for (i = 0; i < ses->se_fchannel.maxreqs; i++) { 1546 free_svc_cred(&ses->se_slots[i]->sl_cred); 1547 kfree(ses->se_slots[i]); 1548 } 1549 } 1550 1551 /* 1552 * We don't actually need to cache the rpc and session headers, so we 1553 * can allocate a little less for each slot: 1554 */ 1555 static inline u32 slot_bytes(struct nfsd4_channel_attrs *ca) 1556 { 1557 u32 size; 1558 1559 if (ca->maxresp_cached < NFSD_MIN_HDR_SEQ_SZ) 1560 size = 0; 1561 else 1562 size = ca->maxresp_cached - NFSD_MIN_HDR_SEQ_SZ; 1563 return size + sizeof(struct nfsd4_slot); 1564 } 1565 1566 /* 1567 * XXX: If we run out of reserved DRC memory we could (up to a point) 1568 * re-negotiate active sessions and reduce their slot usage to make 1569 * room for new connections. For now we just fail the create session. 1570 */ 1571 static u32 nfsd4_get_drc_mem(struct nfsd4_channel_attrs *ca, struct nfsd_net *nn) 1572 { 1573 u32 slotsize = slot_bytes(ca); 1574 u32 num = ca->maxreqs; 1575 unsigned long avail, total_avail; 1576 unsigned int scale_factor; 1577 1578 spin_lock(&nfsd_drc_lock); 1579 if (nfsd_drc_max_mem > nfsd_drc_mem_used) 1580 total_avail = nfsd_drc_max_mem - nfsd_drc_mem_used; 1581 else 1582 /* We have handed out more space than we chose in 1583 * set_max_drc() to allow. That isn't really a 1584 * problem as long as that doesn't make us think we 1585 * have lots more due to integer overflow. 1586 */ 1587 total_avail = 0; 1588 avail = min((unsigned long)NFSD_MAX_MEM_PER_SESSION, total_avail); 1589 /* 1590 * Never use more than a fraction of the remaining memory, 1591 * unless it's the only way to give this client a slot. 1592 * The chosen fraction is either 1/8 or 1/number of threads, 1593 * whichever is smaller. This ensures there are adequate 1594 * slots to support multiple clients per thread. 1595 * Give the client one slot even if that would require 1596 * over-allocation--it is better than failure. 1597 */ 1598 scale_factor = max_t(unsigned int, 8, nn->nfsd_serv->sv_nrthreads); 1599 1600 avail = clamp_t(unsigned long, avail, slotsize, 1601 total_avail/scale_factor); 1602 num = min_t(int, num, avail / slotsize); 1603 num = max_t(int, num, 1); 1604 nfsd_drc_mem_used += num * slotsize; 1605 spin_unlock(&nfsd_drc_lock); 1606 1607 return num; 1608 } 1609 1610 static void nfsd4_put_drc_mem(struct nfsd4_channel_attrs *ca) 1611 { 1612 int slotsize = slot_bytes(ca); 1613 1614 spin_lock(&nfsd_drc_lock); 1615 nfsd_drc_mem_used -= slotsize * ca->maxreqs; 1616 spin_unlock(&nfsd_drc_lock); 1617 } 1618 1619 static struct nfsd4_session *alloc_session(struct nfsd4_channel_attrs *fattrs, 1620 struct nfsd4_channel_attrs *battrs) 1621 { 1622 int numslots = fattrs->maxreqs; 1623 int slotsize = slot_bytes(fattrs); 1624 struct nfsd4_session *new; 1625 int mem, i; 1626 1627 BUILD_BUG_ON(NFSD_MAX_SLOTS_PER_SESSION * sizeof(struct nfsd4_slot *) 1628 + sizeof(struct nfsd4_session) > PAGE_SIZE); 1629 mem = numslots * sizeof(struct nfsd4_slot *); 1630 1631 new = kzalloc(sizeof(*new) + mem, GFP_KERNEL); 1632 if (!new) 1633 return NULL; 1634 /* allocate each struct nfsd4_slot and data cache in one piece */ 1635 for (i = 0; i < numslots; i++) { 1636 new->se_slots[i] = kzalloc(slotsize, GFP_KERNEL); 1637 if (!new->se_slots[i]) 1638 goto out_free; 1639 } 1640 1641 memcpy(&new->se_fchannel, fattrs, sizeof(struct nfsd4_channel_attrs)); 1642 memcpy(&new->se_bchannel, battrs, sizeof(struct nfsd4_channel_attrs)); 1643 1644 return new; 1645 out_free: 1646 while (i--) 1647 kfree(new->se_slots[i]); 1648 kfree(new); 1649 return NULL; 1650 } 1651 1652 static void free_conn(struct nfsd4_conn *c) 1653 { 1654 svc_xprt_put(c->cn_xprt); 1655 kfree(c); 1656 } 1657 1658 static void nfsd4_conn_lost(struct svc_xpt_user *u) 1659 { 1660 struct nfsd4_conn *c = container_of(u, struct nfsd4_conn, cn_xpt_user); 1661 struct nfs4_client *clp = c->cn_session->se_client; 1662 1663 spin_lock(&clp->cl_lock); 1664 if (!list_empty(&c->cn_persession)) { 1665 list_del(&c->cn_persession); 1666 free_conn(c); 1667 } 1668 nfsd4_probe_callback(clp); 1669 spin_unlock(&clp->cl_lock); 1670 } 1671 1672 static struct nfsd4_conn *alloc_conn(struct svc_rqst *rqstp, u32 flags) 1673 { 1674 struct nfsd4_conn *conn; 1675 1676 conn = kmalloc(sizeof(struct nfsd4_conn), GFP_KERNEL); 1677 if (!conn) 1678 return NULL; 1679 svc_xprt_get(rqstp->rq_xprt); 1680 conn->cn_xprt = rqstp->rq_xprt; 1681 conn->cn_flags = flags; 1682 INIT_LIST_HEAD(&conn->cn_xpt_user.list); 1683 return conn; 1684 } 1685 1686 static void __nfsd4_hash_conn(struct nfsd4_conn *conn, struct nfsd4_session *ses) 1687 { 1688 conn->cn_session = ses; 1689 list_add(&conn->cn_persession, &ses->se_conns); 1690 } 1691 1692 static void nfsd4_hash_conn(struct nfsd4_conn *conn, struct nfsd4_session *ses) 1693 { 1694 struct nfs4_client *clp = ses->se_client; 1695 1696 spin_lock(&clp->cl_lock); 1697 __nfsd4_hash_conn(conn, ses); 1698 spin_unlock(&clp->cl_lock); 1699 } 1700 1701 static int nfsd4_register_conn(struct nfsd4_conn *conn) 1702 { 1703 conn->cn_xpt_user.callback = nfsd4_conn_lost; 1704 return register_xpt_user(conn->cn_xprt, &conn->cn_xpt_user); 1705 } 1706 1707 static void nfsd4_init_conn(struct svc_rqst *rqstp, struct nfsd4_conn *conn, struct nfsd4_session *ses) 1708 { 1709 int ret; 1710 1711 nfsd4_hash_conn(conn, ses); 1712 ret = nfsd4_register_conn(conn); 1713 if (ret) 1714 /* oops; xprt is already down: */ 1715 nfsd4_conn_lost(&conn->cn_xpt_user); 1716 /* We may have gained or lost a callback channel: */ 1717 nfsd4_probe_callback_sync(ses->se_client); 1718 } 1719 1720 static struct nfsd4_conn *alloc_conn_from_crses(struct svc_rqst *rqstp, struct nfsd4_create_session *cses) 1721 { 1722 u32 dir = NFS4_CDFC4_FORE; 1723 1724 if (cses->flags & SESSION4_BACK_CHAN) 1725 dir |= NFS4_CDFC4_BACK; 1726 return alloc_conn(rqstp, dir); 1727 } 1728 1729 /* must be called under client_lock */ 1730 static void nfsd4_del_conns(struct nfsd4_session *s) 1731 { 1732 struct nfs4_client *clp = s->se_client; 1733 struct nfsd4_conn *c; 1734 1735 spin_lock(&clp->cl_lock); 1736 while (!list_empty(&s->se_conns)) { 1737 c = list_first_entry(&s->se_conns, struct nfsd4_conn, cn_persession); 1738 list_del_init(&c->cn_persession); 1739 spin_unlock(&clp->cl_lock); 1740 1741 unregister_xpt_user(c->cn_xprt, &c->cn_xpt_user); 1742 free_conn(c); 1743 1744 spin_lock(&clp->cl_lock); 1745 } 1746 spin_unlock(&clp->cl_lock); 1747 } 1748 1749 static void __free_session(struct nfsd4_session *ses) 1750 { 1751 free_session_slots(ses); 1752 kfree(ses); 1753 } 1754 1755 static void free_session(struct nfsd4_session *ses) 1756 { 1757 nfsd4_del_conns(ses); 1758 nfsd4_put_drc_mem(&ses->se_fchannel); 1759 __free_session(ses); 1760 } 1761 1762 static void init_session(struct svc_rqst *rqstp, struct nfsd4_session *new, struct nfs4_client *clp, struct nfsd4_create_session *cses) 1763 { 1764 int idx; 1765 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 1766 1767 new->se_client = clp; 1768 gen_sessionid(new); 1769 1770 INIT_LIST_HEAD(&new->se_conns); 1771 1772 new->se_cb_seq_nr = 1; 1773 new->se_flags = cses->flags; 1774 new->se_cb_prog = cses->callback_prog; 1775 new->se_cb_sec = cses->cb_sec; 1776 atomic_set(&new->se_ref, 0); 1777 idx = hash_sessionid(&new->se_sessionid); 1778 list_add(&new->se_hash, &nn->sessionid_hashtbl[idx]); 1779 spin_lock(&clp->cl_lock); 1780 list_add(&new->se_perclnt, &clp->cl_sessions); 1781 spin_unlock(&clp->cl_lock); 1782 1783 { 1784 struct sockaddr *sa = svc_addr(rqstp); 1785 /* 1786 * This is a little silly; with sessions there's no real 1787 * use for the callback address. Use the peer address 1788 * as a reasonable default for now, but consider fixing 1789 * the rpc client not to require an address in the 1790 * future: 1791 */ 1792 rpc_copy_addr((struct sockaddr *)&clp->cl_cb_conn.cb_addr, sa); 1793 clp->cl_cb_conn.cb_addrlen = svc_addr_len(sa); 1794 } 1795 } 1796 1797 /* caller must hold client_lock */ 1798 static struct nfsd4_session * 1799 __find_in_sessionid_hashtbl(struct nfs4_sessionid *sessionid, struct net *net) 1800 { 1801 struct nfsd4_session *elem; 1802 int idx; 1803 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 1804 1805 lockdep_assert_held(&nn->client_lock); 1806 1807 dump_sessionid(__func__, sessionid); 1808 idx = hash_sessionid(sessionid); 1809 /* Search in the appropriate list */ 1810 list_for_each_entry(elem, &nn->sessionid_hashtbl[idx], se_hash) { 1811 if (!memcmp(elem->se_sessionid.data, sessionid->data, 1812 NFS4_MAX_SESSIONID_LEN)) { 1813 return elem; 1814 } 1815 } 1816 1817 dprintk("%s: session not found\n", __func__); 1818 return NULL; 1819 } 1820 1821 static struct nfsd4_session * 1822 find_in_sessionid_hashtbl(struct nfs4_sessionid *sessionid, struct net *net, 1823 __be32 *ret) 1824 { 1825 struct nfsd4_session *session; 1826 __be32 status = nfserr_badsession; 1827 1828 session = __find_in_sessionid_hashtbl(sessionid, net); 1829 if (!session) 1830 goto out; 1831 status = nfsd4_get_session_locked(session); 1832 if (status) 1833 session = NULL; 1834 out: 1835 *ret = status; 1836 return session; 1837 } 1838 1839 /* caller must hold client_lock */ 1840 static void 1841 unhash_session(struct nfsd4_session *ses) 1842 { 1843 struct nfs4_client *clp = ses->se_client; 1844 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 1845 1846 lockdep_assert_held(&nn->client_lock); 1847 1848 list_del(&ses->se_hash); 1849 spin_lock(&ses->se_client->cl_lock); 1850 list_del(&ses->se_perclnt); 1851 spin_unlock(&ses->se_client->cl_lock); 1852 } 1853 1854 /* SETCLIENTID and SETCLIENTID_CONFIRM Helper functions */ 1855 static int 1856 STALE_CLIENTID(clientid_t *clid, struct nfsd_net *nn) 1857 { 1858 /* 1859 * We're assuming the clid was not given out from a boot 1860 * precisely 2^32 (about 136 years) before this one. That seems 1861 * a safe assumption: 1862 */ 1863 if (clid->cl_boot == (u32)nn->boot_time) 1864 return 0; 1865 dprintk("NFSD stale clientid (%08x/%08x) boot_time %08lx\n", 1866 clid->cl_boot, clid->cl_id, nn->boot_time); 1867 return 1; 1868 } 1869 1870 /* 1871 * XXX Should we use a slab cache ? 1872 * This type of memory management is somewhat inefficient, but we use it 1873 * anyway since SETCLIENTID is not a common operation. 1874 */ 1875 static struct nfs4_client *alloc_client(struct xdr_netobj name) 1876 { 1877 struct nfs4_client *clp; 1878 int i; 1879 1880 clp = kmem_cache_zalloc(client_slab, GFP_KERNEL); 1881 if (clp == NULL) 1882 return NULL; 1883 xdr_netobj_dup(&clp->cl_name, &name, GFP_KERNEL); 1884 if (clp->cl_name.data == NULL) 1885 goto err_no_name; 1886 clp->cl_ownerstr_hashtbl = kmalloc_array(OWNER_HASH_SIZE, 1887 sizeof(struct list_head), 1888 GFP_KERNEL); 1889 if (!clp->cl_ownerstr_hashtbl) 1890 goto err_no_hashtbl; 1891 for (i = 0; i < OWNER_HASH_SIZE; i++) 1892 INIT_LIST_HEAD(&clp->cl_ownerstr_hashtbl[i]); 1893 INIT_LIST_HEAD(&clp->cl_sessions); 1894 idr_init(&clp->cl_stateids); 1895 atomic_set(&clp->cl_rpc_users, 0); 1896 clp->cl_cb_state = NFSD4_CB_UNKNOWN; 1897 INIT_LIST_HEAD(&clp->cl_idhash); 1898 INIT_LIST_HEAD(&clp->cl_openowners); 1899 INIT_LIST_HEAD(&clp->cl_delegations); 1900 INIT_LIST_HEAD(&clp->cl_lru); 1901 INIT_LIST_HEAD(&clp->cl_revoked); 1902 #ifdef CONFIG_NFSD_PNFS 1903 INIT_LIST_HEAD(&clp->cl_lo_states); 1904 #endif 1905 INIT_LIST_HEAD(&clp->async_copies); 1906 spin_lock_init(&clp->async_lock); 1907 spin_lock_init(&clp->cl_lock); 1908 rpc_init_wait_queue(&clp->cl_cb_waitq, "Backchannel slot table"); 1909 return clp; 1910 err_no_hashtbl: 1911 kfree(clp->cl_name.data); 1912 err_no_name: 1913 kmem_cache_free(client_slab, clp); 1914 return NULL; 1915 } 1916 1917 static void __free_client(struct kref *k) 1918 { 1919 struct nfsdfs_client *c = container_of(k, struct nfsdfs_client, cl_ref); 1920 struct nfs4_client *clp = container_of(c, struct nfs4_client, cl_nfsdfs); 1921 1922 free_svc_cred(&clp->cl_cred); 1923 kfree(clp->cl_ownerstr_hashtbl); 1924 kfree(clp->cl_name.data); 1925 kfree(clp->cl_nii_domain.data); 1926 kfree(clp->cl_nii_name.data); 1927 idr_destroy(&clp->cl_stateids); 1928 kmem_cache_free(client_slab, clp); 1929 } 1930 1931 static void drop_client(struct nfs4_client *clp) 1932 { 1933 kref_put(&clp->cl_nfsdfs.cl_ref, __free_client); 1934 } 1935 1936 static void 1937 free_client(struct nfs4_client *clp) 1938 { 1939 while (!list_empty(&clp->cl_sessions)) { 1940 struct nfsd4_session *ses; 1941 ses = list_entry(clp->cl_sessions.next, struct nfsd4_session, 1942 se_perclnt); 1943 list_del(&ses->se_perclnt); 1944 WARN_ON_ONCE(atomic_read(&ses->se_ref)); 1945 free_session(ses); 1946 } 1947 rpc_destroy_wait_queue(&clp->cl_cb_waitq); 1948 if (clp->cl_nfsd_dentry) { 1949 nfsd_client_rmdir(clp->cl_nfsd_dentry); 1950 clp->cl_nfsd_dentry = NULL; 1951 wake_up_all(&expiry_wq); 1952 } 1953 drop_client(clp); 1954 } 1955 1956 /* must be called under the client_lock */ 1957 static void 1958 unhash_client_locked(struct nfs4_client *clp) 1959 { 1960 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 1961 struct nfsd4_session *ses; 1962 1963 lockdep_assert_held(&nn->client_lock); 1964 1965 /* Mark the client as expired! */ 1966 clp->cl_time = 0; 1967 /* Make it invisible */ 1968 if (!list_empty(&clp->cl_idhash)) { 1969 list_del_init(&clp->cl_idhash); 1970 if (test_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags)) 1971 rb_erase(&clp->cl_namenode, &nn->conf_name_tree); 1972 else 1973 rb_erase(&clp->cl_namenode, &nn->unconf_name_tree); 1974 } 1975 list_del_init(&clp->cl_lru); 1976 spin_lock(&clp->cl_lock); 1977 list_for_each_entry(ses, &clp->cl_sessions, se_perclnt) 1978 list_del_init(&ses->se_hash); 1979 spin_unlock(&clp->cl_lock); 1980 } 1981 1982 static void 1983 unhash_client(struct nfs4_client *clp) 1984 { 1985 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 1986 1987 spin_lock(&nn->client_lock); 1988 unhash_client_locked(clp); 1989 spin_unlock(&nn->client_lock); 1990 } 1991 1992 static __be32 mark_client_expired_locked(struct nfs4_client *clp) 1993 { 1994 if (atomic_read(&clp->cl_rpc_users)) 1995 return nfserr_jukebox; 1996 unhash_client_locked(clp); 1997 return nfs_ok; 1998 } 1999 2000 static void 2001 __destroy_client(struct nfs4_client *clp) 2002 { 2003 int i; 2004 struct nfs4_openowner *oo; 2005 struct nfs4_delegation *dp; 2006 struct list_head reaplist; 2007 2008 INIT_LIST_HEAD(&reaplist); 2009 spin_lock(&state_lock); 2010 while (!list_empty(&clp->cl_delegations)) { 2011 dp = list_entry(clp->cl_delegations.next, struct nfs4_delegation, dl_perclnt); 2012 WARN_ON(!unhash_delegation_locked(dp)); 2013 list_add(&dp->dl_recall_lru, &reaplist); 2014 } 2015 spin_unlock(&state_lock); 2016 while (!list_empty(&reaplist)) { 2017 dp = list_entry(reaplist.next, struct nfs4_delegation, dl_recall_lru); 2018 list_del_init(&dp->dl_recall_lru); 2019 destroy_unhashed_deleg(dp); 2020 } 2021 while (!list_empty(&clp->cl_revoked)) { 2022 dp = list_entry(clp->cl_revoked.next, struct nfs4_delegation, dl_recall_lru); 2023 list_del_init(&dp->dl_recall_lru); 2024 nfs4_put_stid(&dp->dl_stid); 2025 } 2026 while (!list_empty(&clp->cl_openowners)) { 2027 oo = list_entry(clp->cl_openowners.next, struct nfs4_openowner, oo_perclient); 2028 nfs4_get_stateowner(&oo->oo_owner); 2029 release_openowner(oo); 2030 } 2031 for (i = 0; i < OWNER_HASH_SIZE; i++) { 2032 struct nfs4_stateowner *so, *tmp; 2033 2034 list_for_each_entry_safe(so, tmp, &clp->cl_ownerstr_hashtbl[i], 2035 so_strhash) { 2036 /* Should be no openowners at this point */ 2037 WARN_ON_ONCE(so->so_is_open_owner); 2038 remove_blocked_locks(lockowner(so)); 2039 } 2040 } 2041 nfsd4_return_all_client_layouts(clp); 2042 nfsd4_shutdown_copy(clp); 2043 nfsd4_shutdown_callback(clp); 2044 if (clp->cl_cb_conn.cb_xprt) 2045 svc_xprt_put(clp->cl_cb_conn.cb_xprt); 2046 free_client(clp); 2047 wake_up_all(&expiry_wq); 2048 } 2049 2050 static void 2051 destroy_client(struct nfs4_client *clp) 2052 { 2053 unhash_client(clp); 2054 __destroy_client(clp); 2055 } 2056 2057 static void inc_reclaim_complete(struct nfs4_client *clp) 2058 { 2059 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 2060 2061 if (!nn->track_reclaim_completes) 2062 return; 2063 if (!nfsd4_find_reclaim_client(clp->cl_name, nn)) 2064 return; 2065 if (atomic_inc_return(&nn->nr_reclaim_complete) == 2066 nn->reclaim_str_hashtbl_size) { 2067 printk(KERN_INFO "NFSD: all clients done reclaiming, ending NFSv4 grace period (net %x)\n", 2068 clp->net->ns.inum); 2069 nfsd4_end_grace(nn); 2070 } 2071 } 2072 2073 static void expire_client(struct nfs4_client *clp) 2074 { 2075 unhash_client(clp); 2076 nfsd4_client_record_remove(clp); 2077 __destroy_client(clp); 2078 } 2079 2080 static void copy_verf(struct nfs4_client *target, nfs4_verifier *source) 2081 { 2082 memcpy(target->cl_verifier.data, source->data, 2083 sizeof(target->cl_verifier.data)); 2084 } 2085 2086 static void copy_clid(struct nfs4_client *target, struct nfs4_client *source) 2087 { 2088 target->cl_clientid.cl_boot = source->cl_clientid.cl_boot; 2089 target->cl_clientid.cl_id = source->cl_clientid.cl_id; 2090 } 2091 2092 static int copy_cred(struct svc_cred *target, struct svc_cred *source) 2093 { 2094 target->cr_principal = kstrdup(source->cr_principal, GFP_KERNEL); 2095 target->cr_raw_principal = kstrdup(source->cr_raw_principal, 2096 GFP_KERNEL); 2097 target->cr_targ_princ = kstrdup(source->cr_targ_princ, GFP_KERNEL); 2098 if ((source->cr_principal && !target->cr_principal) || 2099 (source->cr_raw_principal && !target->cr_raw_principal) || 2100 (source->cr_targ_princ && !target->cr_targ_princ)) 2101 return -ENOMEM; 2102 2103 target->cr_flavor = source->cr_flavor; 2104 target->cr_uid = source->cr_uid; 2105 target->cr_gid = source->cr_gid; 2106 target->cr_group_info = source->cr_group_info; 2107 get_group_info(target->cr_group_info); 2108 target->cr_gss_mech = source->cr_gss_mech; 2109 if (source->cr_gss_mech) 2110 gss_mech_get(source->cr_gss_mech); 2111 return 0; 2112 } 2113 2114 static int 2115 compare_blob(const struct xdr_netobj *o1, const struct xdr_netobj *o2) 2116 { 2117 if (o1->len < o2->len) 2118 return -1; 2119 if (o1->len > o2->len) 2120 return 1; 2121 return memcmp(o1->data, o2->data, o1->len); 2122 } 2123 2124 static int 2125 same_verf(nfs4_verifier *v1, nfs4_verifier *v2) 2126 { 2127 return 0 == memcmp(v1->data, v2->data, sizeof(v1->data)); 2128 } 2129 2130 static int 2131 same_clid(clientid_t *cl1, clientid_t *cl2) 2132 { 2133 return (cl1->cl_boot == cl2->cl_boot) && (cl1->cl_id == cl2->cl_id); 2134 } 2135 2136 static bool groups_equal(struct group_info *g1, struct group_info *g2) 2137 { 2138 int i; 2139 2140 if (g1->ngroups != g2->ngroups) 2141 return false; 2142 for (i=0; i<g1->ngroups; i++) 2143 if (!gid_eq(g1->gid[i], g2->gid[i])) 2144 return false; 2145 return true; 2146 } 2147 2148 /* 2149 * RFC 3530 language requires clid_inuse be returned when the 2150 * "principal" associated with a requests differs from that previously 2151 * used. We use uid, gid's, and gss principal string as our best 2152 * approximation. We also don't want to allow non-gss use of a client 2153 * established using gss: in theory cr_principal should catch that 2154 * change, but in practice cr_principal can be null even in the gss case 2155 * since gssd doesn't always pass down a principal string. 2156 */ 2157 static bool is_gss_cred(struct svc_cred *cr) 2158 { 2159 /* Is cr_flavor one of the gss "pseudoflavors"?: */ 2160 return (cr->cr_flavor > RPC_AUTH_MAXFLAVOR); 2161 } 2162 2163 2164 static bool 2165 same_creds(struct svc_cred *cr1, struct svc_cred *cr2) 2166 { 2167 if ((is_gss_cred(cr1) != is_gss_cred(cr2)) 2168 || (!uid_eq(cr1->cr_uid, cr2->cr_uid)) 2169 || (!gid_eq(cr1->cr_gid, cr2->cr_gid)) 2170 || !groups_equal(cr1->cr_group_info, cr2->cr_group_info)) 2171 return false; 2172 /* XXX: check that cr_targ_princ fields match ? */ 2173 if (cr1->cr_principal == cr2->cr_principal) 2174 return true; 2175 if (!cr1->cr_principal || !cr2->cr_principal) 2176 return false; 2177 return 0 == strcmp(cr1->cr_principal, cr2->cr_principal); 2178 } 2179 2180 static bool svc_rqst_integrity_protected(struct svc_rqst *rqstp) 2181 { 2182 struct svc_cred *cr = &rqstp->rq_cred; 2183 u32 service; 2184 2185 if (!cr->cr_gss_mech) 2186 return false; 2187 service = gss_pseudoflavor_to_service(cr->cr_gss_mech, cr->cr_flavor); 2188 return service == RPC_GSS_SVC_INTEGRITY || 2189 service == RPC_GSS_SVC_PRIVACY; 2190 } 2191 2192 bool nfsd4_mach_creds_match(struct nfs4_client *cl, struct svc_rqst *rqstp) 2193 { 2194 struct svc_cred *cr = &rqstp->rq_cred; 2195 2196 if (!cl->cl_mach_cred) 2197 return true; 2198 if (cl->cl_cred.cr_gss_mech != cr->cr_gss_mech) 2199 return false; 2200 if (!svc_rqst_integrity_protected(rqstp)) 2201 return false; 2202 if (cl->cl_cred.cr_raw_principal) 2203 return 0 == strcmp(cl->cl_cred.cr_raw_principal, 2204 cr->cr_raw_principal); 2205 if (!cr->cr_principal) 2206 return false; 2207 return 0 == strcmp(cl->cl_cred.cr_principal, cr->cr_principal); 2208 } 2209 2210 static void gen_confirm(struct nfs4_client *clp, struct nfsd_net *nn) 2211 { 2212 __be32 verf[2]; 2213 2214 /* 2215 * This is opaque to client, so no need to byte-swap. Use 2216 * __force to keep sparse happy 2217 */ 2218 verf[0] = (__force __be32)get_seconds(); 2219 verf[1] = (__force __be32)nn->clverifier_counter++; 2220 memcpy(clp->cl_confirm.data, verf, sizeof(clp->cl_confirm.data)); 2221 } 2222 2223 static void gen_clid(struct nfs4_client *clp, struct nfsd_net *nn) 2224 { 2225 clp->cl_clientid.cl_boot = nn->boot_time; 2226 clp->cl_clientid.cl_id = nn->clientid_counter++; 2227 gen_confirm(clp, nn); 2228 } 2229 2230 static struct nfs4_stid * 2231 find_stateid_locked(struct nfs4_client *cl, stateid_t *t) 2232 { 2233 struct nfs4_stid *ret; 2234 2235 ret = idr_find(&cl->cl_stateids, t->si_opaque.so_id); 2236 if (!ret || !ret->sc_type) 2237 return NULL; 2238 return ret; 2239 } 2240 2241 static struct nfs4_stid * 2242 find_stateid_by_type(struct nfs4_client *cl, stateid_t *t, char typemask) 2243 { 2244 struct nfs4_stid *s; 2245 2246 spin_lock(&cl->cl_lock); 2247 s = find_stateid_locked(cl, t); 2248 if (s != NULL) { 2249 if (typemask & s->sc_type) 2250 refcount_inc(&s->sc_count); 2251 else 2252 s = NULL; 2253 } 2254 spin_unlock(&cl->cl_lock); 2255 return s; 2256 } 2257 2258 static struct nfs4_client *get_nfsdfs_clp(struct inode *inode) 2259 { 2260 struct nfsdfs_client *nc; 2261 nc = get_nfsdfs_client(inode); 2262 if (!nc) 2263 return NULL; 2264 return container_of(nc, struct nfs4_client, cl_nfsdfs); 2265 } 2266 2267 static void seq_quote_mem(struct seq_file *m, char *data, int len) 2268 { 2269 seq_printf(m, "\""); 2270 seq_escape_mem_ascii(m, data, len); 2271 seq_printf(m, "\""); 2272 } 2273 2274 static int client_info_show(struct seq_file *m, void *v) 2275 { 2276 struct inode *inode = m->private; 2277 struct nfs4_client *clp; 2278 u64 clid; 2279 2280 clp = get_nfsdfs_clp(inode); 2281 if (!clp) 2282 return -ENXIO; 2283 memcpy(&clid, &clp->cl_clientid, sizeof(clid)); 2284 seq_printf(m, "clientid: 0x%llx\n", clid); 2285 seq_printf(m, "address: \"%pISpc\"\n", (struct sockaddr *)&clp->cl_addr); 2286 seq_printf(m, "name: "); 2287 seq_quote_mem(m, clp->cl_name.data, clp->cl_name.len); 2288 seq_printf(m, "\nminor version: %d\n", clp->cl_minorversion); 2289 if (clp->cl_nii_domain.data) { 2290 seq_printf(m, "Implementation domain: "); 2291 seq_quote_mem(m, clp->cl_nii_domain.data, 2292 clp->cl_nii_domain.len); 2293 seq_printf(m, "\nImplementation name: "); 2294 seq_quote_mem(m, clp->cl_nii_name.data, clp->cl_nii_name.len); 2295 seq_printf(m, "\nImplementation time: [%ld, %ld]\n", 2296 clp->cl_nii_time.tv_sec, clp->cl_nii_time.tv_nsec); 2297 } 2298 drop_client(clp); 2299 2300 return 0; 2301 } 2302 2303 static int client_info_open(struct inode *inode, struct file *file) 2304 { 2305 return single_open(file, client_info_show, inode); 2306 } 2307 2308 static const struct file_operations client_info_fops = { 2309 .open = client_info_open, 2310 .read = seq_read, 2311 .llseek = seq_lseek, 2312 .release = single_release, 2313 }; 2314 2315 static void *states_start(struct seq_file *s, loff_t *pos) 2316 __acquires(&clp->cl_lock) 2317 { 2318 struct nfs4_client *clp = s->private; 2319 unsigned long id = *pos; 2320 void *ret; 2321 2322 spin_lock(&clp->cl_lock); 2323 ret = idr_get_next_ul(&clp->cl_stateids, &id); 2324 *pos = id; 2325 return ret; 2326 } 2327 2328 static void *states_next(struct seq_file *s, void *v, loff_t *pos) 2329 { 2330 struct nfs4_client *clp = s->private; 2331 unsigned long id = *pos; 2332 void *ret; 2333 2334 id = *pos; 2335 id++; 2336 ret = idr_get_next_ul(&clp->cl_stateids, &id); 2337 *pos = id; 2338 return ret; 2339 } 2340 2341 static void states_stop(struct seq_file *s, void *v) 2342 __releases(&clp->cl_lock) 2343 { 2344 struct nfs4_client *clp = s->private; 2345 2346 spin_unlock(&clp->cl_lock); 2347 } 2348 2349 static void nfs4_show_superblock(struct seq_file *s, struct nfsd_file *f) 2350 { 2351 struct inode *inode = f->nf_inode; 2352 2353 seq_printf(s, "superblock: \"%02x:%02x:%ld\"", 2354 MAJOR(inode->i_sb->s_dev), 2355 MINOR(inode->i_sb->s_dev), 2356 inode->i_ino); 2357 } 2358 2359 static void nfs4_show_owner(struct seq_file *s, struct nfs4_stateowner *oo) 2360 { 2361 seq_printf(s, "owner: "); 2362 seq_quote_mem(s, oo->so_owner.data, oo->so_owner.len); 2363 } 2364 2365 static int nfs4_show_open(struct seq_file *s, struct nfs4_stid *st) 2366 { 2367 struct nfs4_ol_stateid *ols; 2368 struct nfs4_file *nf; 2369 struct nfsd_file *file; 2370 struct nfs4_stateowner *oo; 2371 unsigned int access, deny; 2372 2373 if (st->sc_type != NFS4_OPEN_STID && st->sc_type != NFS4_LOCK_STID) 2374 return 0; /* XXX: or SEQ_SKIP? */ 2375 ols = openlockstateid(st); 2376 oo = ols->st_stateowner; 2377 nf = st->sc_file; 2378 file = find_any_file(nf); 2379 2380 seq_printf(s, "- 0x%16phN: { type: open, ", &st->sc_stateid); 2381 2382 access = bmap_to_share_mode(ols->st_access_bmap); 2383 deny = bmap_to_share_mode(ols->st_deny_bmap); 2384 2385 seq_printf(s, "access: \%s\%s, ", 2386 access & NFS4_SHARE_ACCESS_READ ? "r" : "-", 2387 access & NFS4_SHARE_ACCESS_WRITE ? "w" : "-"); 2388 seq_printf(s, "deny: \%s\%s, ", 2389 deny & NFS4_SHARE_ACCESS_READ ? "r" : "-", 2390 deny & NFS4_SHARE_ACCESS_WRITE ? "w" : "-"); 2391 2392 nfs4_show_superblock(s, file); 2393 seq_printf(s, ", "); 2394 nfs4_show_owner(s, oo); 2395 seq_printf(s, " }\n"); 2396 nfsd_file_put(file); 2397 2398 return 0; 2399 } 2400 2401 static int nfs4_show_lock(struct seq_file *s, struct nfs4_stid *st) 2402 { 2403 struct nfs4_ol_stateid *ols; 2404 struct nfs4_file *nf; 2405 struct nfsd_file *file; 2406 struct nfs4_stateowner *oo; 2407 2408 ols = openlockstateid(st); 2409 oo = ols->st_stateowner; 2410 nf = st->sc_file; 2411 file = find_any_file(nf); 2412 2413 seq_printf(s, "- 0x%16phN: { type: lock, ", &st->sc_stateid); 2414 2415 /* 2416 * Note: a lock stateid isn't really the same thing as a lock, 2417 * it's the locking state held by one owner on a file, and there 2418 * may be multiple (or no) lock ranges associated with it. 2419 * (Same for the matter is true of open stateids.) 2420 */ 2421 2422 nfs4_show_superblock(s, file); 2423 /* XXX: open stateid? */ 2424 seq_printf(s, ", "); 2425 nfs4_show_owner(s, oo); 2426 seq_printf(s, " }\n"); 2427 nfsd_file_put(file); 2428 2429 return 0; 2430 } 2431 2432 static int nfs4_show_deleg(struct seq_file *s, struct nfs4_stid *st) 2433 { 2434 struct nfs4_delegation *ds; 2435 struct nfs4_file *nf; 2436 struct nfsd_file *file; 2437 2438 ds = delegstateid(st); 2439 nf = st->sc_file; 2440 file = nf->fi_deleg_file; 2441 2442 seq_printf(s, "- 0x%16phN: { type: deleg, ", &st->sc_stateid); 2443 2444 /* Kinda dead code as long as we only support read delegs: */ 2445 seq_printf(s, "access: %s, ", 2446 ds->dl_type == NFS4_OPEN_DELEGATE_READ ? "r" : "w"); 2447 2448 /* XXX: lease time, whether it's being recalled. */ 2449 2450 nfs4_show_superblock(s, file); 2451 seq_printf(s, " }\n"); 2452 2453 return 0; 2454 } 2455 2456 static int nfs4_show_layout(struct seq_file *s, struct nfs4_stid *st) 2457 { 2458 struct nfs4_layout_stateid *ls; 2459 struct nfsd_file *file; 2460 2461 ls = container_of(st, struct nfs4_layout_stateid, ls_stid); 2462 file = ls->ls_file; 2463 2464 seq_printf(s, "- 0x%16phN: { type: layout, ", &st->sc_stateid); 2465 2466 /* XXX: What else would be useful? */ 2467 2468 nfs4_show_superblock(s, file); 2469 seq_printf(s, " }\n"); 2470 2471 return 0; 2472 } 2473 2474 static int states_show(struct seq_file *s, void *v) 2475 { 2476 struct nfs4_stid *st = v; 2477 2478 switch (st->sc_type) { 2479 case NFS4_OPEN_STID: 2480 return nfs4_show_open(s, st); 2481 case NFS4_LOCK_STID: 2482 return nfs4_show_lock(s, st); 2483 case NFS4_DELEG_STID: 2484 return nfs4_show_deleg(s, st); 2485 case NFS4_LAYOUT_STID: 2486 return nfs4_show_layout(s, st); 2487 default: 2488 return 0; /* XXX: or SEQ_SKIP? */ 2489 } 2490 /* XXX: copy stateids? */ 2491 } 2492 2493 static struct seq_operations states_seq_ops = { 2494 .start = states_start, 2495 .next = states_next, 2496 .stop = states_stop, 2497 .show = states_show 2498 }; 2499 2500 static int client_states_open(struct inode *inode, struct file *file) 2501 { 2502 struct seq_file *s; 2503 struct nfs4_client *clp; 2504 int ret; 2505 2506 clp = get_nfsdfs_clp(inode); 2507 if (!clp) 2508 return -ENXIO; 2509 2510 ret = seq_open(file, &states_seq_ops); 2511 if (ret) 2512 return ret; 2513 s = file->private_data; 2514 s->private = clp; 2515 return 0; 2516 } 2517 2518 static int client_opens_release(struct inode *inode, struct file *file) 2519 { 2520 struct seq_file *m = file->private_data; 2521 struct nfs4_client *clp = m->private; 2522 2523 /* XXX: alternatively, we could get/drop in seq start/stop */ 2524 drop_client(clp); 2525 return 0; 2526 } 2527 2528 static const struct file_operations client_states_fops = { 2529 .open = client_states_open, 2530 .read = seq_read, 2531 .llseek = seq_lseek, 2532 .release = client_opens_release, 2533 }; 2534 2535 /* 2536 * Normally we refuse to destroy clients that are in use, but here the 2537 * administrator is telling us to just do it. We also want to wait 2538 * so the caller has a guarantee that the client's locks are gone by 2539 * the time the write returns: 2540 */ 2541 static void force_expire_client(struct nfs4_client *clp) 2542 { 2543 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 2544 bool already_expired; 2545 2546 spin_lock(&clp->cl_lock); 2547 clp->cl_time = 0; 2548 spin_unlock(&clp->cl_lock); 2549 2550 wait_event(expiry_wq, atomic_read(&clp->cl_rpc_users) == 0); 2551 spin_lock(&nn->client_lock); 2552 already_expired = list_empty(&clp->cl_lru); 2553 if (!already_expired) 2554 unhash_client_locked(clp); 2555 spin_unlock(&nn->client_lock); 2556 2557 if (!already_expired) 2558 expire_client(clp); 2559 else 2560 wait_event(expiry_wq, clp->cl_nfsd_dentry == NULL); 2561 } 2562 2563 static ssize_t client_ctl_write(struct file *file, const char __user *buf, 2564 size_t size, loff_t *pos) 2565 { 2566 char *data; 2567 struct nfs4_client *clp; 2568 2569 data = simple_transaction_get(file, buf, size); 2570 if (IS_ERR(data)) 2571 return PTR_ERR(data); 2572 if (size != 7 || 0 != memcmp(data, "expire\n", 7)) 2573 return -EINVAL; 2574 clp = get_nfsdfs_clp(file_inode(file)); 2575 if (!clp) 2576 return -ENXIO; 2577 force_expire_client(clp); 2578 drop_client(clp); 2579 return 7; 2580 } 2581 2582 static const struct file_operations client_ctl_fops = { 2583 .write = client_ctl_write, 2584 .release = simple_transaction_release, 2585 }; 2586 2587 static const struct tree_descr client_files[] = { 2588 [0] = {"info", &client_info_fops, S_IRUSR}, 2589 [1] = {"states", &client_states_fops, S_IRUSR}, 2590 [2] = {"ctl", &client_ctl_fops, S_IRUSR|S_IWUSR}, 2591 [3] = {""}, 2592 }; 2593 2594 static struct nfs4_client *create_client(struct xdr_netobj name, 2595 struct svc_rqst *rqstp, nfs4_verifier *verf) 2596 { 2597 struct nfs4_client *clp; 2598 struct sockaddr *sa = svc_addr(rqstp); 2599 int ret; 2600 struct net *net = SVC_NET(rqstp); 2601 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 2602 2603 clp = alloc_client(name); 2604 if (clp == NULL) 2605 return NULL; 2606 2607 ret = copy_cred(&clp->cl_cred, &rqstp->rq_cred); 2608 if (ret) { 2609 free_client(clp); 2610 return NULL; 2611 } 2612 gen_clid(clp, nn); 2613 kref_init(&clp->cl_nfsdfs.cl_ref); 2614 nfsd4_init_cb(&clp->cl_cb_null, clp, NULL, NFSPROC4_CLNT_CB_NULL); 2615 clp->cl_time = get_seconds(); 2616 clear_bit(0, &clp->cl_cb_slot_busy); 2617 copy_verf(clp, verf); 2618 memcpy(&clp->cl_addr, sa, sizeof(struct sockaddr_storage)); 2619 clp->cl_cb_session = NULL; 2620 clp->net = net; 2621 clp->cl_nfsd_dentry = nfsd_client_mkdir(nn, &clp->cl_nfsdfs, 2622 clp->cl_clientid.cl_id - nn->clientid_base, 2623 client_files); 2624 if (!clp->cl_nfsd_dentry) { 2625 free_client(clp); 2626 return NULL; 2627 } 2628 return clp; 2629 } 2630 2631 static void 2632 add_clp_to_name_tree(struct nfs4_client *new_clp, struct rb_root *root) 2633 { 2634 struct rb_node **new = &(root->rb_node), *parent = NULL; 2635 struct nfs4_client *clp; 2636 2637 while (*new) { 2638 clp = rb_entry(*new, struct nfs4_client, cl_namenode); 2639 parent = *new; 2640 2641 if (compare_blob(&clp->cl_name, &new_clp->cl_name) > 0) 2642 new = &((*new)->rb_left); 2643 else 2644 new = &((*new)->rb_right); 2645 } 2646 2647 rb_link_node(&new_clp->cl_namenode, parent, new); 2648 rb_insert_color(&new_clp->cl_namenode, root); 2649 } 2650 2651 static struct nfs4_client * 2652 find_clp_in_name_tree(struct xdr_netobj *name, struct rb_root *root) 2653 { 2654 int cmp; 2655 struct rb_node *node = root->rb_node; 2656 struct nfs4_client *clp; 2657 2658 while (node) { 2659 clp = rb_entry(node, struct nfs4_client, cl_namenode); 2660 cmp = compare_blob(&clp->cl_name, name); 2661 if (cmp > 0) 2662 node = node->rb_left; 2663 else if (cmp < 0) 2664 node = node->rb_right; 2665 else 2666 return clp; 2667 } 2668 return NULL; 2669 } 2670 2671 static void 2672 add_to_unconfirmed(struct nfs4_client *clp) 2673 { 2674 unsigned int idhashval; 2675 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 2676 2677 lockdep_assert_held(&nn->client_lock); 2678 2679 clear_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags); 2680 add_clp_to_name_tree(clp, &nn->unconf_name_tree); 2681 idhashval = clientid_hashval(clp->cl_clientid.cl_id); 2682 list_add(&clp->cl_idhash, &nn->unconf_id_hashtbl[idhashval]); 2683 renew_client_locked(clp); 2684 } 2685 2686 static void 2687 move_to_confirmed(struct nfs4_client *clp) 2688 { 2689 unsigned int idhashval = clientid_hashval(clp->cl_clientid.cl_id); 2690 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); 2691 2692 lockdep_assert_held(&nn->client_lock); 2693 2694 dprintk("NFSD: move_to_confirm nfs4_client %p\n", clp); 2695 list_move(&clp->cl_idhash, &nn->conf_id_hashtbl[idhashval]); 2696 rb_erase(&clp->cl_namenode, &nn->unconf_name_tree); 2697 add_clp_to_name_tree(clp, &nn->conf_name_tree); 2698 set_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags); 2699 renew_client_locked(clp); 2700 } 2701 2702 static struct nfs4_client * 2703 find_client_in_id_table(struct list_head *tbl, clientid_t *clid, bool sessions) 2704 { 2705 struct nfs4_client *clp; 2706 unsigned int idhashval = clientid_hashval(clid->cl_id); 2707 2708 list_for_each_entry(clp, &tbl[idhashval], cl_idhash) { 2709 if (same_clid(&clp->cl_clientid, clid)) { 2710 if ((bool)clp->cl_minorversion != sessions) 2711 return NULL; 2712 renew_client_locked(clp); 2713 return clp; 2714 } 2715 } 2716 return NULL; 2717 } 2718 2719 static struct nfs4_client * 2720 find_confirmed_client(clientid_t *clid, bool sessions, struct nfsd_net *nn) 2721 { 2722 struct list_head *tbl = nn->conf_id_hashtbl; 2723 2724 lockdep_assert_held(&nn->client_lock); 2725 return find_client_in_id_table(tbl, clid, sessions); 2726 } 2727 2728 static struct nfs4_client * 2729 find_unconfirmed_client(clientid_t *clid, bool sessions, struct nfsd_net *nn) 2730 { 2731 struct list_head *tbl = nn->unconf_id_hashtbl; 2732 2733 lockdep_assert_held(&nn->client_lock); 2734 return find_client_in_id_table(tbl, clid, sessions); 2735 } 2736 2737 static bool clp_used_exchangeid(struct nfs4_client *clp) 2738 { 2739 return clp->cl_exchange_flags != 0; 2740 } 2741 2742 static struct nfs4_client * 2743 find_confirmed_client_by_name(struct xdr_netobj *name, struct nfsd_net *nn) 2744 { 2745 lockdep_assert_held(&nn->client_lock); 2746 return find_clp_in_name_tree(name, &nn->conf_name_tree); 2747 } 2748 2749 static struct nfs4_client * 2750 find_unconfirmed_client_by_name(struct xdr_netobj *name, struct nfsd_net *nn) 2751 { 2752 lockdep_assert_held(&nn->client_lock); 2753 return find_clp_in_name_tree(name, &nn->unconf_name_tree); 2754 } 2755 2756 static void 2757 gen_callback(struct nfs4_client *clp, struct nfsd4_setclientid *se, struct svc_rqst *rqstp) 2758 { 2759 struct nfs4_cb_conn *conn = &clp->cl_cb_conn; 2760 struct sockaddr *sa = svc_addr(rqstp); 2761 u32 scopeid = rpc_get_scope_id(sa); 2762 unsigned short expected_family; 2763 2764 /* Currently, we only support tcp and tcp6 for the callback channel */ 2765 if (se->se_callback_netid_len == 3 && 2766 !memcmp(se->se_callback_netid_val, "tcp", 3)) 2767 expected_family = AF_INET; 2768 else if (se->se_callback_netid_len == 4 && 2769 !memcmp(se->se_callback_netid_val, "tcp6", 4)) 2770 expected_family = AF_INET6; 2771 else 2772 goto out_err; 2773 2774 conn->cb_addrlen = rpc_uaddr2sockaddr(clp->net, se->se_callback_addr_val, 2775 se->se_callback_addr_len, 2776 (struct sockaddr *)&conn->cb_addr, 2777 sizeof(conn->cb_addr)); 2778 2779 if (!conn->cb_addrlen || conn->cb_addr.ss_family != expected_family) 2780 goto out_err; 2781 2782 if (conn->cb_addr.ss_family == AF_INET6) 2783 ((struct sockaddr_in6 *)&conn->cb_addr)->sin6_scope_id = scopeid; 2784 2785 conn->cb_prog = se->se_callback_prog; 2786 conn->cb_ident = se->se_callback_ident; 2787 memcpy(&conn->cb_saddr, &rqstp->rq_daddr, rqstp->rq_daddrlen); 2788 return; 2789 out_err: 2790 conn->cb_addr.ss_family = AF_UNSPEC; 2791 conn->cb_addrlen = 0; 2792 dprintk("NFSD: this client (clientid %08x/%08x) " 2793 "will not receive delegations\n", 2794 clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id); 2795 2796 return; 2797 } 2798 2799 /* 2800 * Cache a reply. nfsd4_check_resp_size() has bounded the cache size. 2801 */ 2802 static void 2803 nfsd4_store_cache_entry(struct nfsd4_compoundres *resp) 2804 { 2805 struct xdr_buf *buf = resp->xdr.buf; 2806 struct nfsd4_slot *slot = resp->cstate.slot; 2807 unsigned int base; 2808 2809 dprintk("--> %s slot %p\n", __func__, slot); 2810 2811 slot->sl_flags |= NFSD4_SLOT_INITIALIZED; 2812 slot->sl_opcnt = resp->opcnt; 2813 slot->sl_status = resp->cstate.status; 2814 free_svc_cred(&slot->sl_cred); 2815 copy_cred(&slot->sl_cred, &resp->rqstp->rq_cred); 2816 2817 if (!nfsd4_cache_this(resp)) { 2818 slot->sl_flags &= ~NFSD4_SLOT_CACHED; 2819 return; 2820 } 2821 slot->sl_flags |= NFSD4_SLOT_CACHED; 2822 2823 base = resp->cstate.data_offset; 2824 slot->sl_datalen = buf->len - base; 2825 if (read_bytes_from_xdr_buf(buf, base, slot->sl_data, slot->sl_datalen)) 2826 WARN(1, "%s: sessions DRC could not cache compound\n", 2827 __func__); 2828 return; 2829 } 2830 2831 /* 2832 * Encode the replay sequence operation from the slot values. 2833 * If cachethis is FALSE encode the uncached rep error on the next 2834 * operation which sets resp->p and increments resp->opcnt for 2835 * nfs4svc_encode_compoundres. 2836 * 2837 */ 2838 static __be32 2839 nfsd4_enc_sequence_replay(struct nfsd4_compoundargs *args, 2840 struct nfsd4_compoundres *resp) 2841 { 2842 struct nfsd4_op *op; 2843 struct nfsd4_slot *slot = resp->cstate.slot; 2844 2845 /* Encode the replayed sequence operation */ 2846 op = &args->ops[resp->opcnt - 1]; 2847 nfsd4_encode_operation(resp, op); 2848 2849 if (slot->sl_flags & NFSD4_SLOT_CACHED) 2850 return op->status; 2851 if (args->opcnt == 1) { 2852 /* 2853 * The original operation wasn't a solo sequence--we 2854 * always cache those--so this retry must not match the 2855 * original: 2856 */ 2857 op->status = nfserr_seq_false_retry; 2858 } else { 2859 op = &args->ops[resp->opcnt++]; 2860 op->status = nfserr_retry_uncached_rep; 2861 nfsd4_encode_operation(resp, op); 2862 } 2863 return op->status; 2864 } 2865 2866 /* 2867 * The sequence operation is not cached because we can use the slot and 2868 * session values. 2869 */ 2870 static __be32 2871 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp, 2872 struct nfsd4_sequence *seq) 2873 { 2874 struct nfsd4_slot *slot = resp->cstate.slot; 2875 struct xdr_stream *xdr = &resp->xdr; 2876 __be32 *p; 2877 __be32 status; 2878 2879 dprintk("--> %s slot %p\n", __func__, slot); 2880 2881 status = nfsd4_enc_sequence_replay(resp->rqstp->rq_argp, resp); 2882 if (status) 2883 return status; 2884 2885 p = xdr_reserve_space(xdr, slot->sl_datalen); 2886 if (!p) { 2887 WARN_ON_ONCE(1); 2888 return nfserr_serverfault; 2889 } 2890 xdr_encode_opaque_fixed(p, slot->sl_data, slot->sl_datalen); 2891 xdr_commit_encode(xdr); 2892 2893 resp->opcnt = slot->sl_opcnt; 2894 return slot->sl_status; 2895 } 2896 2897 /* 2898 * Set the exchange_id flags returned by the server. 2899 */ 2900 static void 2901 nfsd4_set_ex_flags(struct nfs4_client *new, struct nfsd4_exchange_id *clid) 2902 { 2903 #ifdef CONFIG_NFSD_PNFS 2904 new->cl_exchange_flags |= EXCHGID4_FLAG_USE_PNFS_MDS; 2905 #else 2906 new->cl_exchange_flags |= EXCHGID4_FLAG_USE_NON_PNFS; 2907 #endif 2908 2909 /* Referrals are supported, Migration is not. */ 2910 new->cl_exchange_flags |= EXCHGID4_FLAG_SUPP_MOVED_REFER; 2911 2912 /* set the wire flags to return to client. */ 2913 clid->flags = new->cl_exchange_flags; 2914 } 2915 2916 static bool client_has_openowners(struct nfs4_client *clp) 2917 { 2918 struct nfs4_openowner *oo; 2919 2920 list_for_each_entry(oo, &clp->cl_openowners, oo_perclient) { 2921 if (!list_empty(&oo->oo_owner.so_stateids)) 2922 return true; 2923 } 2924 return false; 2925 } 2926 2927 static bool client_has_state(struct nfs4_client *clp) 2928 { 2929 return client_has_openowners(clp) 2930 #ifdef CONFIG_NFSD_PNFS 2931 || !list_empty(&clp->cl_lo_states) 2932 #endif 2933 || !list_empty(&clp->cl_delegations) 2934 || !list_empty(&clp->cl_sessions) 2935 || !list_empty(&clp->async_copies); 2936 } 2937 2938 static __be32 copy_impl_id(struct nfs4_client *clp, 2939 struct nfsd4_exchange_id *exid) 2940 { 2941 if (!exid->nii_domain.data) 2942 return 0; 2943 xdr_netobj_dup(&clp->cl_nii_domain, &exid->nii_domain, GFP_KERNEL); 2944 if (!clp->cl_nii_domain.data) 2945 return nfserr_jukebox; 2946 xdr_netobj_dup(&clp->cl_nii_name, &exid->nii_name, GFP_KERNEL); 2947 if (!clp->cl_nii_name.data) 2948 return nfserr_jukebox; 2949 clp->cl_nii_time.tv_sec = exid->nii_time.tv_sec; 2950 clp->cl_nii_time.tv_nsec = exid->nii_time.tv_nsec; 2951 return 0; 2952 } 2953 2954 __be32 2955 nfsd4_exchange_id(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 2956 union nfsd4_op_u *u) 2957 { 2958 struct nfsd4_exchange_id *exid = &u->exchange_id; 2959 struct nfs4_client *conf, *new; 2960 struct nfs4_client *unconf = NULL; 2961 __be32 status; 2962 char addr_str[INET6_ADDRSTRLEN]; 2963 nfs4_verifier verf = exid->verifier; 2964 struct sockaddr *sa = svc_addr(rqstp); 2965 bool update = exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A; 2966 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 2967 2968 rpc_ntop(sa, addr_str, sizeof(addr_str)); 2969 dprintk("%s rqstp=%p exid=%p clname.len=%u clname.data=%p " 2970 "ip_addr=%s flags %x, spa_how %d\n", 2971 __func__, rqstp, exid, exid->clname.len, exid->clname.data, 2972 addr_str, exid->flags, exid->spa_how); 2973 2974 if (exid->flags & ~EXCHGID4_FLAG_MASK_A) 2975 return nfserr_inval; 2976 2977 new = create_client(exid->clname, rqstp, &verf); 2978 if (new == NULL) 2979 return nfserr_jukebox; 2980 status = copy_impl_id(new, exid); 2981 if (status) 2982 goto out_nolock; 2983 2984 switch (exid->spa_how) { 2985 case SP4_MACH_CRED: 2986 exid->spo_must_enforce[0] = 0; 2987 exid->spo_must_enforce[1] = ( 2988 1 << (OP_BIND_CONN_TO_SESSION - 32) | 2989 1 << (OP_EXCHANGE_ID - 32) | 2990 1 << (OP_CREATE_SESSION - 32) | 2991 1 << (OP_DESTROY_SESSION - 32) | 2992 1 << (OP_DESTROY_CLIENTID - 32)); 2993 2994 exid->spo_must_allow[0] &= (1 << (OP_CLOSE) | 2995 1 << (OP_OPEN_DOWNGRADE) | 2996 1 << (OP_LOCKU) | 2997 1 << (OP_DELEGRETURN)); 2998 2999 exid->spo_must_allow[1] &= ( 3000 1 << (OP_TEST_STATEID - 32) | 3001 1 << (OP_FREE_STATEID - 32)); 3002 if (!svc_rqst_integrity_protected(rqstp)) { 3003 status = nfserr_inval; 3004 goto out_nolock; 3005 } 3006 /* 3007 * Sometimes userspace doesn't give us a principal. 3008 * Which is a bug, really. Anyway, we can't enforce 3009 * MACH_CRED in that case, better to give up now: 3010 */ 3011 if (!new->cl_cred.cr_principal && 3012 !new->cl_cred.cr_raw_principal) { 3013 status = nfserr_serverfault; 3014 goto out_nolock; 3015 } 3016 new->cl_mach_cred = true; 3017 case SP4_NONE: 3018 break; 3019 default: /* checked by xdr code */ 3020 WARN_ON_ONCE(1); 3021 /* fall through */ 3022 case SP4_SSV: 3023 status = nfserr_encr_alg_unsupp; 3024 goto out_nolock; 3025 } 3026 3027 /* Cases below refer to rfc 5661 section 18.35.4: */ 3028 spin_lock(&nn->client_lock); 3029 conf = find_confirmed_client_by_name(&exid->clname, nn); 3030 if (conf) { 3031 bool creds_match = same_creds(&conf->cl_cred, &rqstp->rq_cred); 3032 bool verfs_match = same_verf(&verf, &conf->cl_verifier); 3033 3034 if (update) { 3035 if (!clp_used_exchangeid(conf)) { /* buggy client */ 3036 status = nfserr_inval; 3037 goto out; 3038 } 3039 if (!nfsd4_mach_creds_match(conf, rqstp)) { 3040 status = nfserr_wrong_cred; 3041 goto out; 3042 } 3043 if (!creds_match) { /* case 9 */ 3044 status = nfserr_perm; 3045 goto out; 3046 } 3047 if (!verfs_match) { /* case 8 */ 3048 status = nfserr_not_same; 3049 goto out; 3050 } 3051 /* case 6 */ 3052 exid->flags |= EXCHGID4_FLAG_CONFIRMED_R; 3053 goto out_copy; 3054 } 3055 if (!creds_match) { /* case 3 */ 3056 if (client_has_state(conf)) { 3057 status = nfserr_clid_inuse; 3058 goto out; 3059 } 3060 goto out_new; 3061 } 3062 if (verfs_match) { /* case 2 */ 3063 conf->cl_exchange_flags |= EXCHGID4_FLAG_CONFIRMED_R; 3064 goto out_copy; 3065 } 3066 /* case 5, client reboot */ 3067 conf = NULL; 3068 goto out_new; 3069 } 3070 3071 if (update) { /* case 7 */ 3072 status = nfserr_noent; 3073 goto out; 3074 } 3075 3076 unconf = find_unconfirmed_client_by_name(&exid->clname, nn); 3077 if (unconf) /* case 4, possible retry or client restart */ 3078 unhash_client_locked(unconf); 3079 3080 /* case 1 (normal case) */ 3081 out_new: 3082 if (conf) { 3083 status = mark_client_expired_locked(conf); 3084 if (status) 3085 goto out; 3086 } 3087 new->cl_minorversion = cstate->minorversion; 3088 new->cl_spo_must_allow.u.words[0] = exid->spo_must_allow[0]; 3089 new->cl_spo_must_allow.u.words[1] = exid->spo_must_allow[1]; 3090 3091 add_to_unconfirmed(new); 3092 swap(new, conf); 3093 out_copy: 3094 exid->clientid.cl_boot = conf->cl_clientid.cl_boot; 3095 exid->clientid.cl_id = conf->cl_clientid.cl_id; 3096 3097 exid->seqid = conf->cl_cs_slot.sl_seqid + 1; 3098 nfsd4_set_ex_flags(conf, exid); 3099 3100 dprintk("nfsd4_exchange_id seqid %d flags %x\n", 3101 conf->cl_cs_slot.sl_seqid, conf->cl_exchange_flags); 3102 status = nfs_ok; 3103 3104 out: 3105 spin_unlock(&nn->client_lock); 3106 out_nolock: 3107 if (new) 3108 expire_client(new); 3109 if (unconf) 3110 expire_client(unconf); 3111 return status; 3112 } 3113 3114 static __be32 3115 check_slot_seqid(u32 seqid, u32 slot_seqid, int slot_inuse) 3116 { 3117 dprintk("%s enter. seqid %d slot_seqid %d\n", __func__, seqid, 3118 slot_seqid); 3119 3120 /* The slot is in use, and no response has been sent. */ 3121 if (slot_inuse) { 3122 if (seqid == slot_seqid) 3123 return nfserr_jukebox; 3124 else 3125 return nfserr_seq_misordered; 3126 } 3127 /* Note unsigned 32-bit arithmetic handles wraparound: */ 3128 if (likely(seqid == slot_seqid + 1)) 3129 return nfs_ok; 3130 if (seqid == slot_seqid) 3131 return nfserr_replay_cache; 3132 return nfserr_seq_misordered; 3133 } 3134 3135 /* 3136 * Cache the create session result into the create session single DRC 3137 * slot cache by saving the xdr structure. sl_seqid has been set. 3138 * Do this for solo or embedded create session operations. 3139 */ 3140 static void 3141 nfsd4_cache_create_session(struct nfsd4_create_session *cr_ses, 3142 struct nfsd4_clid_slot *slot, __be32 nfserr) 3143 { 3144 slot->sl_status = nfserr; 3145 memcpy(&slot->sl_cr_ses, cr_ses, sizeof(*cr_ses)); 3146 } 3147 3148 static __be32 3149 nfsd4_replay_create_session(struct nfsd4_create_session *cr_ses, 3150 struct nfsd4_clid_slot *slot) 3151 { 3152 memcpy(cr_ses, &slot->sl_cr_ses, sizeof(*cr_ses)); 3153 return slot->sl_status; 3154 } 3155 3156 #define NFSD_MIN_REQ_HDR_SEQ_SZ ((\ 3157 2 * 2 + /* credential,verifier: AUTH_NULL, length 0 */ \ 3158 1 + /* MIN tag is length with zero, only length */ \ 3159 3 + /* version, opcount, opcode */ \ 3160 XDR_QUADLEN(NFS4_MAX_SESSIONID_LEN) + \ 3161 /* seqid, slotID, slotID, cache */ \ 3162 4 ) * sizeof(__be32)) 3163 3164 #define NFSD_MIN_RESP_HDR_SEQ_SZ ((\ 3165 2 + /* verifier: AUTH_NULL, length 0 */\ 3166 1 + /* status */ \ 3167 1 + /* MIN tag is length with zero, only length */ \ 3168 3 + /* opcount, opcode, opstatus*/ \ 3169 XDR_QUADLEN(NFS4_MAX_SESSIONID_LEN) + \ 3170 /* seqid, slotID, slotID, slotID, status */ \ 3171 5 ) * sizeof(__be32)) 3172 3173 static __be32 check_forechannel_attrs(struct nfsd4_channel_attrs *ca, struct nfsd_net *nn) 3174 { 3175 u32 maxrpc = nn->nfsd_serv->sv_max_mesg; 3176 3177 if (ca->maxreq_sz < NFSD_MIN_REQ_HDR_SEQ_SZ) 3178 return nfserr_toosmall; 3179 if (ca->maxresp_sz < NFSD_MIN_RESP_HDR_SEQ_SZ) 3180 return nfserr_toosmall; 3181 ca->headerpadsz = 0; 3182 ca->maxreq_sz = min_t(u32, ca->maxreq_sz, maxrpc); 3183 ca->maxresp_sz = min_t(u32, ca->maxresp_sz, maxrpc); 3184 ca->maxops = min_t(u32, ca->maxops, NFSD_MAX_OPS_PER_COMPOUND); 3185 ca->maxresp_cached = min_t(u32, ca->maxresp_cached, 3186 NFSD_SLOT_CACHE_SIZE + NFSD_MIN_HDR_SEQ_SZ); 3187 ca->maxreqs = min_t(u32, ca->maxreqs, NFSD_MAX_SLOTS_PER_SESSION); 3188 /* 3189 * Note decreasing slot size below client's request may make it 3190 * difficult for client to function correctly, whereas 3191 * decreasing the number of slots will (just?) affect 3192 * performance. When short on memory we therefore prefer to 3193 * decrease number of slots instead of their size. Clients that 3194 * request larger slots than they need will get poor results: 3195 * Note that we always allow at least one slot, because our 3196 * accounting is soft and provides no guarantees either way. 3197 */ 3198 ca->maxreqs = nfsd4_get_drc_mem(ca, nn); 3199 3200 return nfs_ok; 3201 } 3202 3203 /* 3204 * Server's NFSv4.1 backchannel support is AUTH_SYS-only for now. 3205 * These are based on similar macros in linux/sunrpc/msg_prot.h . 3206 */ 3207 #define RPC_MAX_HEADER_WITH_AUTH_SYS \ 3208 (RPC_CALLHDRSIZE + 2 * (2 + UNX_CALLSLACK)) 3209 3210 #define RPC_MAX_REPHEADER_WITH_AUTH_SYS \ 3211 (RPC_REPHDRSIZE + (2 + NUL_REPLYSLACK)) 3212 3213 #define NFSD_CB_MAX_REQ_SZ ((NFS4_enc_cb_recall_sz + \ 3214 RPC_MAX_HEADER_WITH_AUTH_SYS) * sizeof(__be32)) 3215 #define NFSD_CB_MAX_RESP_SZ ((NFS4_dec_cb_recall_sz + \ 3216 RPC_MAX_REPHEADER_WITH_AUTH_SYS) * \ 3217 sizeof(__be32)) 3218 3219 static __be32 check_backchannel_attrs(struct nfsd4_channel_attrs *ca) 3220 { 3221 ca->headerpadsz = 0; 3222 3223 if (ca->maxreq_sz < NFSD_CB_MAX_REQ_SZ) 3224 return nfserr_toosmall; 3225 if (ca->maxresp_sz < NFSD_CB_MAX_RESP_SZ) 3226 return nfserr_toosmall; 3227 ca->maxresp_cached = 0; 3228 if (ca->maxops < 2) 3229 return nfserr_toosmall; 3230 3231 return nfs_ok; 3232 } 3233 3234 static __be32 nfsd4_check_cb_sec(struct nfsd4_cb_sec *cbs) 3235 { 3236 switch (cbs->flavor) { 3237 case RPC_AUTH_NULL: 3238 case RPC_AUTH_UNIX: 3239 return nfs_ok; 3240 default: 3241 /* 3242 * GSS case: the spec doesn't allow us to return this 3243 * error. But it also doesn't allow us not to support 3244 * GSS. 3245 * I'd rather this fail hard than return some error the 3246 * client might think it can already handle: 3247 */ 3248 return nfserr_encr_alg_unsupp; 3249 } 3250 } 3251 3252 __be32 3253 nfsd4_create_session(struct svc_rqst *rqstp, 3254 struct nfsd4_compound_state *cstate, union nfsd4_op_u *u) 3255 { 3256 struct nfsd4_create_session *cr_ses = &u->create_session; 3257 struct sockaddr *sa = svc_addr(rqstp); 3258 struct nfs4_client *conf, *unconf; 3259 struct nfs4_client *old = NULL; 3260 struct nfsd4_session *new; 3261 struct nfsd4_conn *conn; 3262 struct nfsd4_clid_slot *cs_slot = NULL; 3263 __be32 status = 0; 3264 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 3265 3266 if (cr_ses->flags & ~SESSION4_FLAG_MASK_A) 3267 return nfserr_inval; 3268 status = nfsd4_check_cb_sec(&cr_ses->cb_sec); 3269 if (status) 3270 return status; 3271 status = check_forechannel_attrs(&cr_ses->fore_channel, nn); 3272 if (status) 3273 return status; 3274 status = check_backchannel_attrs(&cr_ses->back_channel); 3275 if (status) 3276 goto out_release_drc_mem; 3277 status = nfserr_jukebox; 3278 new = alloc_session(&cr_ses->fore_channel, &cr_ses->back_channel); 3279 if (!new) 3280 goto out_release_drc_mem; 3281 conn = alloc_conn_from_crses(rqstp, cr_ses); 3282 if (!conn) 3283 goto out_free_session; 3284 3285 spin_lock(&nn->client_lock); 3286 unconf = find_unconfirmed_client(&cr_ses->clientid, true, nn); 3287 conf = find_confirmed_client(&cr_ses->clientid, true, nn); 3288 WARN_ON_ONCE(conf && unconf); 3289 3290 if (conf) { 3291 status = nfserr_wrong_cred; 3292 if (!nfsd4_mach_creds_match(conf, rqstp)) 3293 goto out_free_conn; 3294 cs_slot = &conf->cl_cs_slot; 3295 status = check_slot_seqid(cr_ses->seqid, cs_slot->sl_seqid, 0); 3296 if (status) { 3297 if (status == nfserr_replay_cache) 3298 status = nfsd4_replay_create_session(cr_ses, cs_slot); 3299 goto out_free_conn; 3300 } 3301 } else if (unconf) { 3302 if (!same_creds(&unconf->cl_cred, &rqstp->rq_cred) || 3303 !rpc_cmp_addr(sa, (struct sockaddr *) &unconf->cl_addr)) { 3304 status = nfserr_clid_inuse; 3305 goto out_free_conn; 3306 } 3307 status = nfserr_wrong_cred; 3308 if (!nfsd4_mach_creds_match(unconf, rqstp)) 3309 goto out_free_conn; 3310 cs_slot = &unconf->cl_cs_slot; 3311 status = check_slot_seqid(cr_ses->seqid, cs_slot->sl_seqid, 0); 3312 if (status) { 3313 /* an unconfirmed replay returns misordered */ 3314 status = nfserr_seq_misordered; 3315 goto out_free_conn; 3316 } 3317 old = find_confirmed_client_by_name(&unconf->cl_name, nn); 3318 if (old) { 3319 status = mark_client_expired_locked(old); 3320 if (status) { 3321 old = NULL; 3322 goto out_free_conn; 3323 } 3324 } 3325 move_to_confirmed(unconf); 3326 conf = unconf; 3327 } else { 3328 status = nfserr_stale_clientid; 3329 goto out_free_conn; 3330 } 3331 status = nfs_ok; 3332 /* Persistent sessions are not supported */ 3333 cr_ses->flags &= ~SESSION4_PERSIST; 3334 /* Upshifting from TCP to RDMA is not supported */ 3335 cr_ses->flags &= ~SESSION4_RDMA; 3336 3337 init_session(rqstp, new, conf, cr_ses); 3338 nfsd4_get_session_locked(new); 3339 3340 memcpy(cr_ses->sessionid.data, new->se_sessionid.data, 3341 NFS4_MAX_SESSIONID_LEN); 3342 cs_slot->sl_seqid++; 3343 cr_ses->seqid = cs_slot->sl_seqid; 3344 3345 /* cache solo and embedded create sessions under the client_lock */ 3346 nfsd4_cache_create_session(cr_ses, cs_slot, status); 3347 spin_unlock(&nn->client_lock); 3348 /* init connection and backchannel */ 3349 nfsd4_init_conn(rqstp, conn, new); 3350 nfsd4_put_session(new); 3351 if (old) 3352 expire_client(old); 3353 return status; 3354 out_free_conn: 3355 spin_unlock(&nn->client_lock); 3356 free_conn(conn); 3357 if (old) 3358 expire_client(old); 3359 out_free_session: 3360 __free_session(new); 3361 out_release_drc_mem: 3362 nfsd4_put_drc_mem(&cr_ses->fore_channel); 3363 return status; 3364 } 3365 3366 static __be32 nfsd4_map_bcts_dir(u32 *dir) 3367 { 3368 switch (*dir) { 3369 case NFS4_CDFC4_FORE: 3370 case NFS4_CDFC4_BACK: 3371 return nfs_ok; 3372 case NFS4_CDFC4_FORE_OR_BOTH: 3373 case NFS4_CDFC4_BACK_OR_BOTH: 3374 *dir = NFS4_CDFC4_BOTH; 3375 return nfs_ok; 3376 }; 3377 return nfserr_inval; 3378 } 3379 3380 __be32 nfsd4_backchannel_ctl(struct svc_rqst *rqstp, 3381 struct nfsd4_compound_state *cstate, 3382 union nfsd4_op_u *u) 3383 { 3384 struct nfsd4_backchannel_ctl *bc = &u->backchannel_ctl; 3385 struct nfsd4_session *session = cstate->session; 3386 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 3387 __be32 status; 3388 3389 status = nfsd4_check_cb_sec(&bc->bc_cb_sec); 3390 if (status) 3391 return status; 3392 spin_lock(&nn->client_lock); 3393 session->se_cb_prog = bc->bc_cb_program; 3394 session->se_cb_sec = bc->bc_cb_sec; 3395 spin_unlock(&nn->client_lock); 3396 3397 nfsd4_probe_callback(session->se_client); 3398 3399 return nfs_ok; 3400 } 3401 3402 __be32 nfsd4_bind_conn_to_session(struct svc_rqst *rqstp, 3403 struct nfsd4_compound_state *cstate, 3404 union nfsd4_op_u *u) 3405 { 3406 struct nfsd4_bind_conn_to_session *bcts = &u->bind_conn_to_session; 3407 __be32 status; 3408 struct nfsd4_conn *conn; 3409 struct nfsd4_session *session; 3410 struct net *net = SVC_NET(rqstp); 3411 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 3412 3413 if (!nfsd4_last_compound_op(rqstp)) 3414 return nfserr_not_only_op; 3415 spin_lock(&nn->client_lock); 3416 session = find_in_sessionid_hashtbl(&bcts->sessionid, net, &status); 3417 spin_unlock(&nn->client_lock); 3418 if (!session) 3419 goto out_no_session; 3420 status = nfserr_wrong_cred; 3421 if (!nfsd4_mach_creds_match(session->se_client, rqstp)) 3422 goto out; 3423 status = nfsd4_map_bcts_dir(&bcts->dir); 3424 if (status) 3425 goto out; 3426 conn = alloc_conn(rqstp, bcts->dir); 3427 status = nfserr_jukebox; 3428 if (!conn) 3429 goto out; 3430 nfsd4_init_conn(rqstp, conn, session); 3431 status = nfs_ok; 3432 out: 3433 nfsd4_put_session(session); 3434 out_no_session: 3435 return status; 3436 } 3437 3438 static bool nfsd4_compound_in_session(struct nfsd4_compound_state *cstate, struct nfs4_sessionid *sid) 3439 { 3440 if (!cstate->session) 3441 return false; 3442 return !memcmp(sid, &cstate->session->se_sessionid, sizeof(*sid)); 3443 } 3444 3445 __be32 3446 nfsd4_destroy_session(struct svc_rqst *r, struct nfsd4_compound_state *cstate, 3447 union nfsd4_op_u *u) 3448 { 3449 struct nfs4_sessionid *sessionid = &u->destroy_session.sessionid; 3450 struct nfsd4_session *ses; 3451 __be32 status; 3452 int ref_held_by_me = 0; 3453 struct net *net = SVC_NET(r); 3454 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 3455 3456 status = nfserr_not_only_op; 3457 if (nfsd4_compound_in_session(cstate, sessionid)) { 3458 if (!nfsd4_last_compound_op(r)) 3459 goto out; 3460 ref_held_by_me++; 3461 } 3462 dump_sessionid(__func__, sessionid); 3463 spin_lock(&nn->client_lock); 3464 ses = find_in_sessionid_hashtbl(sessionid, net, &status); 3465 if (!ses) 3466 goto out_client_lock; 3467 status = nfserr_wrong_cred; 3468 if (!nfsd4_mach_creds_match(ses->se_client, r)) 3469 goto out_put_session; 3470 status = mark_session_dead_locked(ses, 1 + ref_held_by_me); 3471 if (status) 3472 goto out_put_session; 3473 unhash_session(ses); 3474 spin_unlock(&nn->client_lock); 3475 3476 nfsd4_probe_callback_sync(ses->se_client); 3477 3478 spin_lock(&nn->client_lock); 3479 status = nfs_ok; 3480 out_put_session: 3481 nfsd4_put_session_locked(ses); 3482 out_client_lock: 3483 spin_unlock(&nn->client_lock); 3484 out: 3485 return status; 3486 } 3487 3488 static struct nfsd4_conn *__nfsd4_find_conn(struct svc_xprt *xpt, struct nfsd4_session *s) 3489 { 3490 struct nfsd4_conn *c; 3491 3492 list_for_each_entry(c, &s->se_conns, cn_persession) { 3493 if (c->cn_xprt == xpt) { 3494 return c; 3495 } 3496 } 3497 return NULL; 3498 } 3499 3500 static __be32 nfsd4_sequence_check_conn(struct nfsd4_conn *new, struct nfsd4_session *ses) 3501 { 3502 struct nfs4_client *clp = ses->se_client; 3503 struct nfsd4_conn *c; 3504 __be32 status = nfs_ok; 3505 int ret; 3506 3507 spin_lock(&clp->cl_lock); 3508 c = __nfsd4_find_conn(new->cn_xprt, ses); 3509 if (c) 3510 goto out_free; 3511 status = nfserr_conn_not_bound_to_session; 3512 if (clp->cl_mach_cred) 3513 goto out_free; 3514 __nfsd4_hash_conn(new, ses); 3515 spin_unlock(&clp->cl_lock); 3516 ret = nfsd4_register_conn(new); 3517 if (ret) 3518 /* oops; xprt is already down: */ 3519 nfsd4_conn_lost(&new->cn_xpt_user); 3520 return nfs_ok; 3521 out_free: 3522 spin_unlock(&clp->cl_lock); 3523 free_conn(new); 3524 return status; 3525 } 3526 3527 static bool nfsd4_session_too_many_ops(struct svc_rqst *rqstp, struct nfsd4_session *session) 3528 { 3529 struct nfsd4_compoundargs *args = rqstp->rq_argp; 3530 3531 return args->opcnt > session->se_fchannel.maxops; 3532 } 3533 3534 static bool nfsd4_request_too_big(struct svc_rqst *rqstp, 3535 struct nfsd4_session *session) 3536 { 3537 struct xdr_buf *xb = &rqstp->rq_arg; 3538 3539 return xb->len > session->se_fchannel.maxreq_sz; 3540 } 3541 3542 static bool replay_matches_cache(struct svc_rqst *rqstp, 3543 struct nfsd4_sequence *seq, struct nfsd4_slot *slot) 3544 { 3545 struct nfsd4_compoundargs *argp = rqstp->rq_argp; 3546 3547 if ((bool)(slot->sl_flags & NFSD4_SLOT_CACHETHIS) != 3548 (bool)seq->cachethis) 3549 return false; 3550 /* 3551 * If there's an error than the reply can have fewer ops than 3552 * the call. But if we cached a reply with *more* ops than the 3553 * call you're sending us now, then this new call is clearly not 3554 * really a replay of the old one: 3555 */ 3556 if (slot->sl_opcnt < argp->opcnt) 3557 return false; 3558 /* This is the only check explicitly called by spec: */ 3559 if (!same_creds(&rqstp->rq_cred, &slot->sl_cred)) 3560 return false; 3561 /* 3562 * There may be more comparisons we could actually do, but the 3563 * spec doesn't require us to catch every case where the calls 3564 * don't match (that would require caching the call as well as 3565 * the reply), so we don't bother. 3566 */ 3567 return true; 3568 } 3569 3570 __be32 3571 nfsd4_sequence(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 3572 union nfsd4_op_u *u) 3573 { 3574 struct nfsd4_sequence *seq = &u->sequence; 3575 struct nfsd4_compoundres *resp = rqstp->rq_resp; 3576 struct xdr_stream *xdr = &resp->xdr; 3577 struct nfsd4_session *session; 3578 struct nfs4_client *clp; 3579 struct nfsd4_slot *slot; 3580 struct nfsd4_conn *conn; 3581 __be32 status; 3582 int buflen; 3583 struct net *net = SVC_NET(rqstp); 3584 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 3585 3586 if (resp->opcnt != 1) 3587 return nfserr_sequence_pos; 3588 3589 /* 3590 * Will be either used or freed by nfsd4_sequence_check_conn 3591 * below. 3592 */ 3593 conn = alloc_conn(rqstp, NFS4_CDFC4_FORE); 3594 if (!conn) 3595 return nfserr_jukebox; 3596 3597 spin_lock(&nn->client_lock); 3598 session = find_in_sessionid_hashtbl(&seq->sessionid, net, &status); 3599 if (!session) 3600 goto out_no_session; 3601 clp = session->se_client; 3602 3603 status = nfserr_too_many_ops; 3604 if (nfsd4_session_too_many_ops(rqstp, session)) 3605 goto out_put_session; 3606 3607 status = nfserr_req_too_big; 3608 if (nfsd4_request_too_big(rqstp, session)) 3609 goto out_put_session; 3610 3611 status = nfserr_badslot; 3612 if (seq->slotid >= session->se_fchannel.maxreqs) 3613 goto out_put_session; 3614 3615 slot = session->se_slots[seq->slotid]; 3616 dprintk("%s: slotid %d\n", __func__, seq->slotid); 3617 3618 /* We do not negotiate the number of slots yet, so set the 3619 * maxslots to the session maxreqs which is used to encode 3620 * sr_highest_slotid and the sr_target_slot id to maxslots */ 3621 seq->maxslots = session->se_fchannel.maxreqs; 3622 3623 status = check_slot_seqid(seq->seqid, slot->sl_seqid, 3624 slot->sl_flags & NFSD4_SLOT_INUSE); 3625 if (status == nfserr_replay_cache) { 3626 status = nfserr_seq_misordered; 3627 if (!(slot->sl_flags & NFSD4_SLOT_INITIALIZED)) 3628 goto out_put_session; 3629 status = nfserr_seq_false_retry; 3630 if (!replay_matches_cache(rqstp, seq, slot)) 3631 goto out_put_session; 3632 cstate->slot = slot; 3633 cstate->session = session; 3634 cstate->clp = clp; 3635 /* Return the cached reply status and set cstate->status 3636 * for nfsd4_proc_compound processing */ 3637 status = nfsd4_replay_cache_entry(resp, seq); 3638 cstate->status = nfserr_replay_cache; 3639 goto out; 3640 } 3641 if (status) 3642 goto out_put_session; 3643 3644 status = nfsd4_sequence_check_conn(conn, session); 3645 conn = NULL; 3646 if (status) 3647 goto out_put_session; 3648 3649 buflen = (seq->cachethis) ? 3650 session->se_fchannel.maxresp_cached : 3651 session->se_fchannel.maxresp_sz; 3652 status = (seq->cachethis) ? nfserr_rep_too_big_to_cache : 3653 nfserr_rep_too_big; 3654 if (xdr_restrict_buflen(xdr, buflen - rqstp->rq_auth_slack)) 3655 goto out_put_session; 3656 svc_reserve(rqstp, buflen); 3657 3658 status = nfs_ok; 3659 /* Success! bump slot seqid */ 3660 slot->sl_seqid = seq->seqid; 3661 slot->sl_flags |= NFSD4_SLOT_INUSE; 3662 if (seq->cachethis) 3663 slot->sl_flags |= NFSD4_SLOT_CACHETHIS; 3664 else 3665 slot->sl_flags &= ~NFSD4_SLOT_CACHETHIS; 3666 3667 cstate->slot = slot; 3668 cstate->session = session; 3669 cstate->clp = clp; 3670 3671 out: 3672 switch (clp->cl_cb_state) { 3673 case NFSD4_CB_DOWN: 3674 seq->status_flags = SEQ4_STATUS_CB_PATH_DOWN; 3675 break; 3676 case NFSD4_CB_FAULT: 3677 seq->status_flags = SEQ4_STATUS_BACKCHANNEL_FAULT; 3678 break; 3679 default: 3680 seq->status_flags = 0; 3681 } 3682 if (!list_empty(&clp->cl_revoked)) 3683 seq->status_flags |= SEQ4_STATUS_RECALLABLE_STATE_REVOKED; 3684 out_no_session: 3685 if (conn) 3686 free_conn(conn); 3687 spin_unlock(&nn->client_lock); 3688 return status; 3689 out_put_session: 3690 nfsd4_put_session_locked(session); 3691 goto out_no_session; 3692 } 3693 3694 void 3695 nfsd4_sequence_done(struct nfsd4_compoundres *resp) 3696 { 3697 struct nfsd4_compound_state *cs = &resp->cstate; 3698 3699 if (nfsd4_has_session(cs)) { 3700 if (cs->status != nfserr_replay_cache) { 3701 nfsd4_store_cache_entry(resp); 3702 cs->slot->sl_flags &= ~NFSD4_SLOT_INUSE; 3703 } 3704 /* Drop session reference that was taken in nfsd4_sequence() */ 3705 nfsd4_put_session(cs->session); 3706 } else if (cs->clp) 3707 put_client_renew(cs->clp); 3708 } 3709 3710 __be32 3711 nfsd4_destroy_clientid(struct svc_rqst *rqstp, 3712 struct nfsd4_compound_state *cstate, 3713 union nfsd4_op_u *u) 3714 { 3715 struct nfsd4_destroy_clientid *dc = &u->destroy_clientid; 3716 struct nfs4_client *conf, *unconf; 3717 struct nfs4_client *clp = NULL; 3718 __be32 status = 0; 3719 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 3720 3721 spin_lock(&nn->client_lock); 3722 unconf = find_unconfirmed_client(&dc->clientid, true, nn); 3723 conf = find_confirmed_client(&dc->clientid, true, nn); 3724 WARN_ON_ONCE(conf && unconf); 3725 3726 if (conf) { 3727 if (client_has_state(conf)) { 3728 status = nfserr_clientid_busy; 3729 goto out; 3730 } 3731 status = mark_client_expired_locked(conf); 3732 if (status) 3733 goto out; 3734 clp = conf; 3735 } else if (unconf) 3736 clp = unconf; 3737 else { 3738 status = nfserr_stale_clientid; 3739 goto out; 3740 } 3741 if (!nfsd4_mach_creds_match(clp, rqstp)) { 3742 clp = NULL; 3743 status = nfserr_wrong_cred; 3744 goto out; 3745 } 3746 unhash_client_locked(clp); 3747 out: 3748 spin_unlock(&nn->client_lock); 3749 if (clp) 3750 expire_client(clp); 3751 return status; 3752 } 3753 3754 __be32 3755 nfsd4_reclaim_complete(struct svc_rqst *rqstp, 3756 struct nfsd4_compound_state *cstate, union nfsd4_op_u *u) 3757 { 3758 struct nfsd4_reclaim_complete *rc = &u->reclaim_complete; 3759 __be32 status = 0; 3760 3761 if (rc->rca_one_fs) { 3762 if (!cstate->current_fh.fh_dentry) 3763 return nfserr_nofilehandle; 3764 /* 3765 * We don't take advantage of the rca_one_fs case. 3766 * That's OK, it's optional, we can safely ignore it. 3767 */ 3768 return nfs_ok; 3769 } 3770 3771 status = nfserr_complete_already; 3772 if (test_and_set_bit(NFSD4_CLIENT_RECLAIM_COMPLETE, 3773 &cstate->session->se_client->cl_flags)) 3774 goto out; 3775 3776 status = nfserr_stale_clientid; 3777 if (is_client_expired(cstate->session->se_client)) 3778 /* 3779 * The following error isn't really legal. 3780 * But we only get here if the client just explicitly 3781 * destroyed the client. Surely it no longer cares what 3782 * error it gets back on an operation for the dead 3783 * client. 3784 */ 3785 goto out; 3786 3787 status = nfs_ok; 3788 nfsd4_client_record_create(cstate->session->se_client); 3789 inc_reclaim_complete(cstate->session->se_client); 3790 out: 3791 return status; 3792 } 3793 3794 __be32 3795 nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 3796 union nfsd4_op_u *u) 3797 { 3798 struct nfsd4_setclientid *setclid = &u->setclientid; 3799 struct xdr_netobj clname = setclid->se_name; 3800 nfs4_verifier clverifier = setclid->se_verf; 3801 struct nfs4_client *conf, *new; 3802 struct nfs4_client *unconf = NULL; 3803 __be32 status; 3804 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 3805 3806 new = create_client(clname, rqstp, &clverifier); 3807 if (new == NULL) 3808 return nfserr_jukebox; 3809 /* Cases below refer to rfc 3530 section 14.2.33: */ 3810 spin_lock(&nn->client_lock); 3811 conf = find_confirmed_client_by_name(&clname, nn); 3812 if (conf && client_has_state(conf)) { 3813 /* case 0: */ 3814 status = nfserr_clid_inuse; 3815 if (clp_used_exchangeid(conf)) 3816 goto out; 3817 if (!same_creds(&conf->cl_cred, &rqstp->rq_cred)) { 3818 char addr_str[INET6_ADDRSTRLEN]; 3819 rpc_ntop((struct sockaddr *) &conf->cl_addr, addr_str, 3820 sizeof(addr_str)); 3821 dprintk("NFSD: setclientid: string in use by client " 3822 "at %s\n", addr_str); 3823 goto out; 3824 } 3825 } 3826 unconf = find_unconfirmed_client_by_name(&clname, nn); 3827 if (unconf) 3828 unhash_client_locked(unconf); 3829 if (conf && same_verf(&conf->cl_verifier, &clverifier)) { 3830 /* case 1: probable callback update */ 3831 copy_clid(new, conf); 3832 gen_confirm(new, nn); 3833 } else /* case 4 (new client) or cases 2, 3 (client reboot): */ 3834 ; 3835 new->cl_minorversion = 0; 3836 gen_callback(new, setclid, rqstp); 3837 add_to_unconfirmed(new); 3838 setclid->se_clientid.cl_boot = new->cl_clientid.cl_boot; 3839 setclid->se_clientid.cl_id = new->cl_clientid.cl_id; 3840 memcpy(setclid->se_confirm.data, new->cl_confirm.data, sizeof(setclid->se_confirm.data)); 3841 new = NULL; 3842 status = nfs_ok; 3843 out: 3844 spin_unlock(&nn->client_lock); 3845 if (new) 3846 free_client(new); 3847 if (unconf) 3848 expire_client(unconf); 3849 return status; 3850 } 3851 3852 3853 __be32 3854 nfsd4_setclientid_confirm(struct svc_rqst *rqstp, 3855 struct nfsd4_compound_state *cstate, 3856 union nfsd4_op_u *u) 3857 { 3858 struct nfsd4_setclientid_confirm *setclientid_confirm = 3859 &u->setclientid_confirm; 3860 struct nfs4_client *conf, *unconf; 3861 struct nfs4_client *old = NULL; 3862 nfs4_verifier confirm = setclientid_confirm->sc_confirm; 3863 clientid_t * clid = &setclientid_confirm->sc_clientid; 3864 __be32 status; 3865 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 3866 3867 if (STALE_CLIENTID(clid, nn)) 3868 return nfserr_stale_clientid; 3869 3870 spin_lock(&nn->client_lock); 3871 conf = find_confirmed_client(clid, false, nn); 3872 unconf = find_unconfirmed_client(clid, false, nn); 3873 /* 3874 * We try hard to give out unique clientid's, so if we get an 3875 * attempt to confirm the same clientid with a different cred, 3876 * the client may be buggy; this should never happen. 3877 * 3878 * Nevertheless, RFC 7530 recommends INUSE for this case: 3879 */ 3880 status = nfserr_clid_inuse; 3881 if (unconf && !same_creds(&unconf->cl_cred, &rqstp->rq_cred)) 3882 goto out; 3883 if (conf && !same_creds(&conf->cl_cred, &rqstp->rq_cred)) 3884 goto out; 3885 /* cases below refer to rfc 3530 section 14.2.34: */ 3886 if (!unconf || !same_verf(&confirm, &unconf->cl_confirm)) { 3887 if (conf && same_verf(&confirm, &conf->cl_confirm)) { 3888 /* case 2: probable retransmit */ 3889 status = nfs_ok; 3890 } else /* case 4: client hasn't noticed we rebooted yet? */ 3891 status = nfserr_stale_clientid; 3892 goto out; 3893 } 3894 status = nfs_ok; 3895 if (conf) { /* case 1: callback update */ 3896 old = unconf; 3897 unhash_client_locked(old); 3898 nfsd4_change_callback(conf, &unconf->cl_cb_conn); 3899 } else { /* case 3: normal case; new or rebooted client */ 3900 old = find_confirmed_client_by_name(&unconf->cl_name, nn); 3901 if (old) { 3902 status = nfserr_clid_inuse; 3903 if (client_has_state(old) 3904 && !same_creds(&unconf->cl_cred, 3905 &old->cl_cred)) 3906 goto out; 3907 status = mark_client_expired_locked(old); 3908 if (status) { 3909 old = NULL; 3910 goto out; 3911 } 3912 } 3913 move_to_confirmed(unconf); 3914 conf = unconf; 3915 } 3916 get_client_locked(conf); 3917 spin_unlock(&nn->client_lock); 3918 nfsd4_probe_callback(conf); 3919 spin_lock(&nn->client_lock); 3920 put_client_renew_locked(conf); 3921 out: 3922 spin_unlock(&nn->client_lock); 3923 if (old) 3924 expire_client(old); 3925 return status; 3926 } 3927 3928 static struct nfs4_file *nfsd4_alloc_file(void) 3929 { 3930 return kmem_cache_alloc(file_slab, GFP_KERNEL); 3931 } 3932 3933 /* OPEN Share state helper functions */ 3934 static void nfsd4_init_file(struct knfsd_fh *fh, unsigned int hashval, 3935 struct nfs4_file *fp) 3936 { 3937 lockdep_assert_held(&state_lock); 3938 3939 refcount_set(&fp->fi_ref, 1); 3940 spin_lock_init(&fp->fi_lock); 3941 INIT_LIST_HEAD(&fp->fi_stateids); 3942 INIT_LIST_HEAD(&fp->fi_delegations); 3943 INIT_LIST_HEAD(&fp->fi_clnt_odstate); 3944 fh_copy_shallow(&fp->fi_fhandle, fh); 3945 fp->fi_deleg_file = NULL; 3946 fp->fi_had_conflict = false; 3947 fp->fi_share_deny = 0; 3948 memset(fp->fi_fds, 0, sizeof(fp->fi_fds)); 3949 memset(fp->fi_access, 0, sizeof(fp->fi_access)); 3950 #ifdef CONFIG_NFSD_PNFS 3951 INIT_LIST_HEAD(&fp->fi_lo_states); 3952 atomic_set(&fp->fi_lo_recalls, 0); 3953 #endif 3954 hlist_add_head_rcu(&fp->fi_hash, &file_hashtbl[hashval]); 3955 } 3956 3957 void 3958 nfsd4_free_slabs(void) 3959 { 3960 kmem_cache_destroy(client_slab); 3961 kmem_cache_destroy(openowner_slab); 3962 kmem_cache_destroy(lockowner_slab); 3963 kmem_cache_destroy(file_slab); 3964 kmem_cache_destroy(stateid_slab); 3965 kmem_cache_destroy(deleg_slab); 3966 kmem_cache_destroy(odstate_slab); 3967 } 3968 3969 int 3970 nfsd4_init_slabs(void) 3971 { 3972 client_slab = kmem_cache_create("nfsd4_clients", 3973 sizeof(struct nfs4_client), 0, 0, NULL); 3974 if (client_slab == NULL) 3975 goto out; 3976 openowner_slab = kmem_cache_create("nfsd4_openowners", 3977 sizeof(struct nfs4_openowner), 0, 0, NULL); 3978 if (openowner_slab == NULL) 3979 goto out_free_client_slab; 3980 lockowner_slab = kmem_cache_create("nfsd4_lockowners", 3981 sizeof(struct nfs4_lockowner), 0, 0, NULL); 3982 if (lockowner_slab == NULL) 3983 goto out_free_openowner_slab; 3984 file_slab = kmem_cache_create("nfsd4_files", 3985 sizeof(struct nfs4_file), 0, 0, NULL); 3986 if (file_slab == NULL) 3987 goto out_free_lockowner_slab; 3988 stateid_slab = kmem_cache_create("nfsd4_stateids", 3989 sizeof(struct nfs4_ol_stateid), 0, 0, NULL); 3990 if (stateid_slab == NULL) 3991 goto out_free_file_slab; 3992 deleg_slab = kmem_cache_create("nfsd4_delegations", 3993 sizeof(struct nfs4_delegation), 0, 0, NULL); 3994 if (deleg_slab == NULL) 3995 goto out_free_stateid_slab; 3996 odstate_slab = kmem_cache_create("nfsd4_odstate", 3997 sizeof(struct nfs4_clnt_odstate), 0, 0, NULL); 3998 if (odstate_slab == NULL) 3999 goto out_free_deleg_slab; 4000 return 0; 4001 4002 out_free_deleg_slab: 4003 kmem_cache_destroy(deleg_slab); 4004 out_free_stateid_slab: 4005 kmem_cache_destroy(stateid_slab); 4006 out_free_file_slab: 4007 kmem_cache_destroy(file_slab); 4008 out_free_lockowner_slab: 4009 kmem_cache_destroy(lockowner_slab); 4010 out_free_openowner_slab: 4011 kmem_cache_destroy(openowner_slab); 4012 out_free_client_slab: 4013 kmem_cache_destroy(client_slab); 4014 out: 4015 dprintk("nfsd4: out of memory while initializing nfsv4\n"); 4016 return -ENOMEM; 4017 } 4018 4019 static void init_nfs4_replay(struct nfs4_replay *rp) 4020 { 4021 rp->rp_status = nfserr_serverfault; 4022 rp->rp_buflen = 0; 4023 rp->rp_buf = rp->rp_ibuf; 4024 mutex_init(&rp->rp_mutex); 4025 } 4026 4027 static void nfsd4_cstate_assign_replay(struct nfsd4_compound_state *cstate, 4028 struct nfs4_stateowner *so) 4029 { 4030 if (!nfsd4_has_session(cstate)) { 4031 mutex_lock(&so->so_replay.rp_mutex); 4032 cstate->replay_owner = nfs4_get_stateowner(so); 4033 } 4034 } 4035 4036 void nfsd4_cstate_clear_replay(struct nfsd4_compound_state *cstate) 4037 { 4038 struct nfs4_stateowner *so = cstate->replay_owner; 4039 4040 if (so != NULL) { 4041 cstate->replay_owner = NULL; 4042 mutex_unlock(&so->so_replay.rp_mutex); 4043 nfs4_put_stateowner(so); 4044 } 4045 } 4046 4047 static inline void *alloc_stateowner(struct kmem_cache *slab, struct xdr_netobj *owner, struct nfs4_client *clp) 4048 { 4049 struct nfs4_stateowner *sop; 4050 4051 sop = kmem_cache_alloc(slab, GFP_KERNEL); 4052 if (!sop) 4053 return NULL; 4054 4055 xdr_netobj_dup(&sop->so_owner, owner, GFP_KERNEL); 4056 if (!sop->so_owner.data) { 4057 kmem_cache_free(slab, sop); 4058 return NULL; 4059 } 4060 4061 INIT_LIST_HEAD(&sop->so_stateids); 4062 sop->so_client = clp; 4063 init_nfs4_replay(&sop->so_replay); 4064 atomic_set(&sop->so_count, 1); 4065 return sop; 4066 } 4067 4068 static void hash_openowner(struct nfs4_openowner *oo, struct nfs4_client *clp, unsigned int strhashval) 4069 { 4070 lockdep_assert_held(&clp->cl_lock); 4071 4072 list_add(&oo->oo_owner.so_strhash, 4073 &clp->cl_ownerstr_hashtbl[strhashval]); 4074 list_add(&oo->oo_perclient, &clp->cl_openowners); 4075 } 4076 4077 static void nfs4_unhash_openowner(struct nfs4_stateowner *so) 4078 { 4079 unhash_openowner_locked(openowner(so)); 4080 } 4081 4082 static void nfs4_free_openowner(struct nfs4_stateowner *so) 4083 { 4084 struct nfs4_openowner *oo = openowner(so); 4085 4086 kmem_cache_free(openowner_slab, oo); 4087 } 4088 4089 static const struct nfs4_stateowner_operations openowner_ops = { 4090 .so_unhash = nfs4_unhash_openowner, 4091 .so_free = nfs4_free_openowner, 4092 }; 4093 4094 static struct nfs4_ol_stateid * 4095 nfsd4_find_existing_open(struct nfs4_file *fp, struct nfsd4_open *open) 4096 { 4097 struct nfs4_ol_stateid *local, *ret = NULL; 4098 struct nfs4_openowner *oo = open->op_openowner; 4099 4100 lockdep_assert_held(&fp->fi_lock); 4101 4102 list_for_each_entry(local, &fp->fi_stateids, st_perfile) { 4103 /* ignore lock owners */ 4104 if (local->st_stateowner->so_is_open_owner == 0) 4105 continue; 4106 if (local->st_stateowner != &oo->oo_owner) 4107 continue; 4108 if (local->st_stid.sc_type == NFS4_OPEN_STID) { 4109 ret = local; 4110 refcount_inc(&ret->st_stid.sc_count); 4111 break; 4112 } 4113 } 4114 return ret; 4115 } 4116 4117 static __be32 4118 nfsd4_verify_open_stid(struct nfs4_stid *s) 4119 { 4120 __be32 ret = nfs_ok; 4121 4122 switch (s->sc_type) { 4123 default: 4124 break; 4125 case 0: 4126 case NFS4_CLOSED_STID: 4127 case NFS4_CLOSED_DELEG_STID: 4128 ret = nfserr_bad_stateid; 4129 break; 4130 case NFS4_REVOKED_DELEG_STID: 4131 ret = nfserr_deleg_revoked; 4132 } 4133 return ret; 4134 } 4135 4136 /* Lock the stateid st_mutex, and deal with races with CLOSE */ 4137 static __be32 4138 nfsd4_lock_ol_stateid(struct nfs4_ol_stateid *stp) 4139 { 4140 __be32 ret; 4141 4142 mutex_lock_nested(&stp->st_mutex, LOCK_STATEID_MUTEX); 4143 ret = nfsd4_verify_open_stid(&stp->st_stid); 4144 if (ret != nfs_ok) 4145 mutex_unlock(&stp->st_mutex); 4146 return ret; 4147 } 4148 4149 static struct nfs4_ol_stateid * 4150 nfsd4_find_and_lock_existing_open(struct nfs4_file *fp, struct nfsd4_open *open) 4151 { 4152 struct nfs4_ol_stateid *stp; 4153 for (;;) { 4154 spin_lock(&fp->fi_lock); 4155 stp = nfsd4_find_existing_open(fp, open); 4156 spin_unlock(&fp->fi_lock); 4157 if (!stp || nfsd4_lock_ol_stateid(stp) == nfs_ok) 4158 break; 4159 nfs4_put_stid(&stp->st_stid); 4160 } 4161 return stp; 4162 } 4163 4164 static struct nfs4_openowner * 4165 alloc_init_open_stateowner(unsigned int strhashval, struct nfsd4_open *open, 4166 struct nfsd4_compound_state *cstate) 4167 { 4168 struct nfs4_client *clp = cstate->clp; 4169 struct nfs4_openowner *oo, *ret; 4170 4171 oo = alloc_stateowner(openowner_slab, &open->op_owner, clp); 4172 if (!oo) 4173 return NULL; 4174 oo->oo_owner.so_ops = &openowner_ops; 4175 oo->oo_owner.so_is_open_owner = 1; 4176 oo->oo_owner.so_seqid = open->op_seqid; 4177 oo->oo_flags = 0; 4178 if (nfsd4_has_session(cstate)) 4179 oo->oo_flags |= NFS4_OO_CONFIRMED; 4180 oo->oo_time = 0; 4181 oo->oo_last_closed_stid = NULL; 4182 INIT_LIST_HEAD(&oo->oo_close_lru); 4183 spin_lock(&clp->cl_lock); 4184 ret = find_openstateowner_str_locked(strhashval, open, clp); 4185 if (ret == NULL) { 4186 hash_openowner(oo, clp, strhashval); 4187 ret = oo; 4188 } else 4189 nfs4_free_stateowner(&oo->oo_owner); 4190 4191 spin_unlock(&clp->cl_lock); 4192 return ret; 4193 } 4194 4195 static struct nfs4_ol_stateid * 4196 init_open_stateid(struct nfs4_file *fp, struct nfsd4_open *open) 4197 { 4198 4199 struct nfs4_openowner *oo = open->op_openowner; 4200 struct nfs4_ol_stateid *retstp = NULL; 4201 struct nfs4_ol_stateid *stp; 4202 4203 stp = open->op_stp; 4204 /* We are moving these outside of the spinlocks to avoid the warnings */ 4205 mutex_init(&stp->st_mutex); 4206 mutex_lock_nested(&stp->st_mutex, OPEN_STATEID_MUTEX); 4207 4208 retry: 4209 spin_lock(&oo->oo_owner.so_client->cl_lock); 4210 spin_lock(&fp->fi_lock); 4211 4212 retstp = nfsd4_find_existing_open(fp, open); 4213 if (retstp) 4214 goto out_unlock; 4215 4216 open->op_stp = NULL; 4217 refcount_inc(&stp->st_stid.sc_count); 4218 stp->st_stid.sc_type = NFS4_OPEN_STID; 4219 INIT_LIST_HEAD(&stp->st_locks); 4220 stp->st_stateowner = nfs4_get_stateowner(&oo->oo_owner); 4221 get_nfs4_file(fp); 4222 stp->st_stid.sc_file = fp; 4223 stp->st_access_bmap = 0; 4224 stp->st_deny_bmap = 0; 4225 stp->st_openstp = NULL; 4226 list_add(&stp->st_perstateowner, &oo->oo_owner.so_stateids); 4227 list_add(&stp->st_perfile, &fp->fi_stateids); 4228 4229 out_unlock: 4230 spin_unlock(&fp->fi_lock); 4231 spin_unlock(&oo->oo_owner.so_client->cl_lock); 4232 if (retstp) { 4233 /* Handle races with CLOSE */ 4234 if (nfsd4_lock_ol_stateid(retstp) != nfs_ok) { 4235 nfs4_put_stid(&retstp->st_stid); 4236 goto retry; 4237 } 4238 /* To keep mutex tracking happy */ 4239 mutex_unlock(&stp->st_mutex); 4240 stp = retstp; 4241 } 4242 return stp; 4243 } 4244 4245 /* 4246 * In the 4.0 case we need to keep the owners around a little while to handle 4247 * CLOSE replay. We still do need to release any file access that is held by 4248 * them before returning however. 4249 */ 4250 static void 4251 move_to_close_lru(struct nfs4_ol_stateid *s, struct net *net) 4252 { 4253 struct nfs4_ol_stateid *last; 4254 struct nfs4_openowner *oo = openowner(s->st_stateowner); 4255 struct nfsd_net *nn = net_generic(s->st_stid.sc_client->net, 4256 nfsd_net_id); 4257 4258 dprintk("NFSD: move_to_close_lru nfs4_openowner %p\n", oo); 4259 4260 /* 4261 * We know that we hold one reference via nfsd4_close, and another 4262 * "persistent" reference for the client. If the refcount is higher 4263 * than 2, then there are still calls in progress that are using this 4264 * stateid. We can't put the sc_file reference until they are finished. 4265 * Wait for the refcount to drop to 2. Since it has been unhashed, 4266 * there should be no danger of the refcount going back up again at 4267 * this point. 4268 */ 4269 wait_event(close_wq, refcount_read(&s->st_stid.sc_count) == 2); 4270 4271 release_all_access(s); 4272 if (s->st_stid.sc_file) { 4273 put_nfs4_file(s->st_stid.sc_file); 4274 s->st_stid.sc_file = NULL; 4275 } 4276 4277 spin_lock(&nn->client_lock); 4278 last = oo->oo_last_closed_stid; 4279 oo->oo_last_closed_stid = s; 4280 list_move_tail(&oo->oo_close_lru, &nn->close_lru); 4281 oo->oo_time = get_seconds(); 4282 spin_unlock(&nn->client_lock); 4283 if (last) 4284 nfs4_put_stid(&last->st_stid); 4285 } 4286 4287 /* search file_hashtbl[] for file */ 4288 static struct nfs4_file * 4289 find_file_locked(struct knfsd_fh *fh, unsigned int hashval) 4290 { 4291 struct nfs4_file *fp; 4292 4293 hlist_for_each_entry_rcu(fp, &file_hashtbl[hashval], fi_hash) { 4294 if (fh_match(&fp->fi_fhandle, fh)) { 4295 if (refcount_inc_not_zero(&fp->fi_ref)) 4296 return fp; 4297 } 4298 } 4299 return NULL; 4300 } 4301 4302 struct nfs4_file * 4303 find_file(struct knfsd_fh *fh) 4304 { 4305 struct nfs4_file *fp; 4306 unsigned int hashval = file_hashval(fh); 4307 4308 rcu_read_lock(); 4309 fp = find_file_locked(fh, hashval); 4310 rcu_read_unlock(); 4311 return fp; 4312 } 4313 4314 static struct nfs4_file * 4315 find_or_add_file(struct nfs4_file *new, struct knfsd_fh *fh) 4316 { 4317 struct nfs4_file *fp; 4318 unsigned int hashval = file_hashval(fh); 4319 4320 rcu_read_lock(); 4321 fp = find_file_locked(fh, hashval); 4322 rcu_read_unlock(); 4323 if (fp) 4324 return fp; 4325 4326 spin_lock(&state_lock); 4327 fp = find_file_locked(fh, hashval); 4328 if (likely(fp == NULL)) { 4329 nfsd4_init_file(fh, hashval, new); 4330 fp = new; 4331 } 4332 spin_unlock(&state_lock); 4333 4334 return fp; 4335 } 4336 4337 /* 4338 * Called to check deny when READ with all zero stateid or 4339 * WRITE with all zero or all one stateid 4340 */ 4341 static __be32 4342 nfs4_share_conflict(struct svc_fh *current_fh, unsigned int deny_type) 4343 { 4344 struct nfs4_file *fp; 4345 __be32 ret = nfs_ok; 4346 4347 fp = find_file(¤t_fh->fh_handle); 4348 if (!fp) 4349 return ret; 4350 /* Check for conflicting share reservations */ 4351 spin_lock(&fp->fi_lock); 4352 if (fp->fi_share_deny & deny_type) 4353 ret = nfserr_locked; 4354 spin_unlock(&fp->fi_lock); 4355 put_nfs4_file(fp); 4356 return ret; 4357 } 4358 4359 static void nfsd4_cb_recall_prepare(struct nfsd4_callback *cb) 4360 { 4361 struct nfs4_delegation *dp = cb_to_delegation(cb); 4362 struct nfsd_net *nn = net_generic(dp->dl_stid.sc_client->net, 4363 nfsd_net_id); 4364 4365 block_delegations(&dp->dl_stid.sc_file->fi_fhandle); 4366 4367 /* 4368 * We can't do this in nfsd_break_deleg_cb because it is 4369 * already holding inode->i_lock. 4370 * 4371 * If the dl_time != 0, then we know that it has already been 4372 * queued for a lease break. Don't queue it again. 4373 */ 4374 spin_lock(&state_lock); 4375 if (dp->dl_time == 0) { 4376 dp->dl_time = get_seconds(); 4377 list_add_tail(&dp->dl_recall_lru, &nn->del_recall_lru); 4378 } 4379 spin_unlock(&state_lock); 4380 } 4381 4382 static int nfsd4_cb_recall_done(struct nfsd4_callback *cb, 4383 struct rpc_task *task) 4384 { 4385 struct nfs4_delegation *dp = cb_to_delegation(cb); 4386 4387 if (dp->dl_stid.sc_type == NFS4_CLOSED_DELEG_STID) 4388 return 1; 4389 4390 switch (task->tk_status) { 4391 case 0: 4392 return 1; 4393 case -NFS4ERR_DELAY: 4394 rpc_delay(task, 2 * HZ); 4395 return 0; 4396 case -EBADHANDLE: 4397 case -NFS4ERR_BAD_STATEID: 4398 /* 4399 * Race: client probably got cb_recall before open reply 4400 * granting delegation. 4401 */ 4402 if (dp->dl_retries--) { 4403 rpc_delay(task, 2 * HZ); 4404 return 0; 4405 } 4406 /*FALLTHRU*/ 4407 default: 4408 return 1; 4409 } 4410 } 4411 4412 static void nfsd4_cb_recall_release(struct nfsd4_callback *cb) 4413 { 4414 struct nfs4_delegation *dp = cb_to_delegation(cb); 4415 4416 nfs4_put_stid(&dp->dl_stid); 4417 } 4418 4419 static const struct nfsd4_callback_ops nfsd4_cb_recall_ops = { 4420 .prepare = nfsd4_cb_recall_prepare, 4421 .done = nfsd4_cb_recall_done, 4422 .release = nfsd4_cb_recall_release, 4423 }; 4424 4425 static void nfsd_break_one_deleg(struct nfs4_delegation *dp) 4426 { 4427 /* 4428 * We're assuming the state code never drops its reference 4429 * without first removing the lease. Since we're in this lease 4430 * callback (and since the lease code is serialized by the 4431 * i_lock) we know the server hasn't removed the lease yet, and 4432 * we know it's safe to take a reference. 4433 */ 4434 refcount_inc(&dp->dl_stid.sc_count); 4435 nfsd4_run_cb(&dp->dl_recall); 4436 } 4437 4438 /* Called from break_lease() with i_lock held. */ 4439 static bool 4440 nfsd_break_deleg_cb(struct file_lock *fl) 4441 { 4442 bool ret = false; 4443 struct nfs4_delegation *dp = (struct nfs4_delegation *)fl->fl_owner; 4444 struct nfs4_file *fp = dp->dl_stid.sc_file; 4445 4446 /* 4447 * We don't want the locks code to timeout the lease for us; 4448 * we'll remove it ourself if a delegation isn't returned 4449 * in time: 4450 */ 4451 fl->fl_break_time = 0; 4452 4453 spin_lock(&fp->fi_lock); 4454 fp->fi_had_conflict = true; 4455 nfsd_break_one_deleg(dp); 4456 spin_unlock(&fp->fi_lock); 4457 return ret; 4458 } 4459 4460 static int 4461 nfsd_change_deleg_cb(struct file_lock *onlist, int arg, 4462 struct list_head *dispose) 4463 { 4464 if (arg & F_UNLCK) 4465 return lease_modify(onlist, arg, dispose); 4466 else 4467 return -EAGAIN; 4468 } 4469 4470 static const struct lock_manager_operations nfsd_lease_mng_ops = { 4471 .lm_break = nfsd_break_deleg_cb, 4472 .lm_change = nfsd_change_deleg_cb, 4473 }; 4474 4475 static __be32 nfsd4_check_seqid(struct nfsd4_compound_state *cstate, struct nfs4_stateowner *so, u32 seqid) 4476 { 4477 if (nfsd4_has_session(cstate)) 4478 return nfs_ok; 4479 if (seqid == so->so_seqid - 1) 4480 return nfserr_replay_me; 4481 if (seqid == so->so_seqid) 4482 return nfs_ok; 4483 return nfserr_bad_seqid; 4484 } 4485 4486 static __be32 lookup_clientid(clientid_t *clid, 4487 struct nfsd4_compound_state *cstate, 4488 struct nfsd_net *nn) 4489 { 4490 struct nfs4_client *found; 4491 4492 if (cstate->clp) { 4493 found = cstate->clp; 4494 if (!same_clid(&found->cl_clientid, clid)) 4495 return nfserr_stale_clientid; 4496 return nfs_ok; 4497 } 4498 4499 if (STALE_CLIENTID(clid, nn)) 4500 return nfserr_stale_clientid; 4501 4502 /* 4503 * For v4.1+ we get the client in the SEQUENCE op. If we don't have one 4504 * cached already then we know this is for is for v4.0 and "sessions" 4505 * will be false. 4506 */ 4507 WARN_ON_ONCE(cstate->session); 4508 spin_lock(&nn->client_lock); 4509 found = find_confirmed_client(clid, false, nn); 4510 if (!found) { 4511 spin_unlock(&nn->client_lock); 4512 return nfserr_expired; 4513 } 4514 atomic_inc(&found->cl_rpc_users); 4515 spin_unlock(&nn->client_lock); 4516 4517 /* Cache the nfs4_client in cstate! */ 4518 cstate->clp = found; 4519 return nfs_ok; 4520 } 4521 4522 __be32 4523 nfsd4_process_open1(struct nfsd4_compound_state *cstate, 4524 struct nfsd4_open *open, struct nfsd_net *nn) 4525 { 4526 clientid_t *clientid = &open->op_clientid; 4527 struct nfs4_client *clp = NULL; 4528 unsigned int strhashval; 4529 struct nfs4_openowner *oo = NULL; 4530 __be32 status; 4531 4532 if (STALE_CLIENTID(&open->op_clientid, nn)) 4533 return nfserr_stale_clientid; 4534 /* 4535 * In case we need it later, after we've already created the 4536 * file and don't want to risk a further failure: 4537 */ 4538 open->op_file = nfsd4_alloc_file(); 4539 if (open->op_file == NULL) 4540 return nfserr_jukebox; 4541 4542 status = lookup_clientid(clientid, cstate, nn); 4543 if (status) 4544 return status; 4545 clp = cstate->clp; 4546 4547 strhashval = ownerstr_hashval(&open->op_owner); 4548 oo = find_openstateowner_str(strhashval, open, clp); 4549 open->op_openowner = oo; 4550 if (!oo) { 4551 goto new_owner; 4552 } 4553 if (!(oo->oo_flags & NFS4_OO_CONFIRMED)) { 4554 /* Replace unconfirmed owners without checking for replay. */ 4555 release_openowner(oo); 4556 open->op_openowner = NULL; 4557 goto new_owner; 4558 } 4559 status = nfsd4_check_seqid(cstate, &oo->oo_owner, open->op_seqid); 4560 if (status) 4561 return status; 4562 goto alloc_stateid; 4563 new_owner: 4564 oo = alloc_init_open_stateowner(strhashval, open, cstate); 4565 if (oo == NULL) 4566 return nfserr_jukebox; 4567 open->op_openowner = oo; 4568 alloc_stateid: 4569 open->op_stp = nfs4_alloc_open_stateid(clp); 4570 if (!open->op_stp) 4571 return nfserr_jukebox; 4572 4573 if (nfsd4_has_session(cstate) && 4574 (cstate->current_fh.fh_export->ex_flags & NFSEXP_PNFS)) { 4575 open->op_odstate = alloc_clnt_odstate(clp); 4576 if (!open->op_odstate) 4577 return nfserr_jukebox; 4578 } 4579 4580 return nfs_ok; 4581 } 4582 4583 static inline __be32 4584 nfs4_check_delegmode(struct nfs4_delegation *dp, int flags) 4585 { 4586 if ((flags & WR_STATE) && (dp->dl_type == NFS4_OPEN_DELEGATE_READ)) 4587 return nfserr_openmode; 4588 else 4589 return nfs_ok; 4590 } 4591 4592 static int share_access_to_flags(u32 share_access) 4593 { 4594 return share_access == NFS4_SHARE_ACCESS_READ ? RD_STATE : WR_STATE; 4595 } 4596 4597 static struct nfs4_delegation *find_deleg_stateid(struct nfs4_client *cl, stateid_t *s) 4598 { 4599 struct nfs4_stid *ret; 4600 4601 ret = find_stateid_by_type(cl, s, 4602 NFS4_DELEG_STID|NFS4_REVOKED_DELEG_STID); 4603 if (!ret) 4604 return NULL; 4605 return delegstateid(ret); 4606 } 4607 4608 static bool nfsd4_is_deleg_cur(struct nfsd4_open *open) 4609 { 4610 return open->op_claim_type == NFS4_OPEN_CLAIM_DELEGATE_CUR || 4611 open->op_claim_type == NFS4_OPEN_CLAIM_DELEG_CUR_FH; 4612 } 4613 4614 static __be32 4615 nfs4_check_deleg(struct nfs4_client *cl, struct nfsd4_open *open, 4616 struct nfs4_delegation **dp) 4617 { 4618 int flags; 4619 __be32 status = nfserr_bad_stateid; 4620 struct nfs4_delegation *deleg; 4621 4622 deleg = find_deleg_stateid(cl, &open->op_delegate_stateid); 4623 if (deleg == NULL) 4624 goto out; 4625 if (deleg->dl_stid.sc_type == NFS4_REVOKED_DELEG_STID) { 4626 nfs4_put_stid(&deleg->dl_stid); 4627 if (cl->cl_minorversion) 4628 status = nfserr_deleg_revoked; 4629 goto out; 4630 } 4631 flags = share_access_to_flags(open->op_share_access); 4632 status = nfs4_check_delegmode(deleg, flags); 4633 if (status) { 4634 nfs4_put_stid(&deleg->dl_stid); 4635 goto out; 4636 } 4637 *dp = deleg; 4638 out: 4639 if (!nfsd4_is_deleg_cur(open)) 4640 return nfs_ok; 4641 if (status) 4642 return status; 4643 open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED; 4644 return nfs_ok; 4645 } 4646 4647 static inline int nfs4_access_to_access(u32 nfs4_access) 4648 { 4649 int flags = 0; 4650 4651 if (nfs4_access & NFS4_SHARE_ACCESS_READ) 4652 flags |= NFSD_MAY_READ; 4653 if (nfs4_access & NFS4_SHARE_ACCESS_WRITE) 4654 flags |= NFSD_MAY_WRITE; 4655 return flags; 4656 } 4657 4658 static inline __be32 4659 nfsd4_truncate(struct svc_rqst *rqstp, struct svc_fh *fh, 4660 struct nfsd4_open *open) 4661 { 4662 struct iattr iattr = { 4663 .ia_valid = ATTR_SIZE, 4664 .ia_size = 0, 4665 }; 4666 if (!open->op_truncate) 4667 return 0; 4668 if (!(open->op_share_access & NFS4_SHARE_ACCESS_WRITE)) 4669 return nfserr_inval; 4670 return nfsd_setattr(rqstp, fh, &iattr, 0, (time_t)0); 4671 } 4672 4673 static __be32 nfs4_get_vfs_file(struct svc_rqst *rqstp, struct nfs4_file *fp, 4674 struct svc_fh *cur_fh, struct nfs4_ol_stateid *stp, 4675 struct nfsd4_open *open) 4676 { 4677 struct nfsd_file *nf = NULL; 4678 __be32 status; 4679 int oflag = nfs4_access_to_omode(open->op_share_access); 4680 int access = nfs4_access_to_access(open->op_share_access); 4681 unsigned char old_access_bmap, old_deny_bmap; 4682 4683 spin_lock(&fp->fi_lock); 4684 4685 /* 4686 * Are we trying to set a deny mode that would conflict with 4687 * current access? 4688 */ 4689 status = nfs4_file_check_deny(fp, open->op_share_deny); 4690 if (status != nfs_ok) { 4691 spin_unlock(&fp->fi_lock); 4692 goto out; 4693 } 4694 4695 /* set access to the file */ 4696 status = nfs4_file_get_access(fp, open->op_share_access); 4697 if (status != nfs_ok) { 4698 spin_unlock(&fp->fi_lock); 4699 goto out; 4700 } 4701 4702 /* Set access bits in stateid */ 4703 old_access_bmap = stp->st_access_bmap; 4704 set_access(open->op_share_access, stp); 4705 4706 /* Set new deny mask */ 4707 old_deny_bmap = stp->st_deny_bmap; 4708 set_deny(open->op_share_deny, stp); 4709 fp->fi_share_deny |= (open->op_share_deny & NFS4_SHARE_DENY_BOTH); 4710 4711 if (!fp->fi_fds[oflag]) { 4712 spin_unlock(&fp->fi_lock); 4713 status = nfsd_file_acquire(rqstp, cur_fh, access, &nf); 4714 if (status) 4715 goto out_put_access; 4716 spin_lock(&fp->fi_lock); 4717 if (!fp->fi_fds[oflag]) { 4718 fp->fi_fds[oflag] = nf; 4719 nf = NULL; 4720 } 4721 } 4722 spin_unlock(&fp->fi_lock); 4723 if (nf) 4724 nfsd_file_put(nf); 4725 4726 status = nfsd4_truncate(rqstp, cur_fh, open); 4727 if (status) 4728 goto out_put_access; 4729 out: 4730 return status; 4731 out_put_access: 4732 stp->st_access_bmap = old_access_bmap; 4733 nfs4_file_put_access(fp, open->op_share_access); 4734 reset_union_bmap_deny(bmap_to_share_mode(old_deny_bmap), stp); 4735 goto out; 4736 } 4737 4738 static __be32 4739 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) 4740 { 4741 __be32 status; 4742 unsigned char old_deny_bmap = stp->st_deny_bmap; 4743 4744 if (!test_access(open->op_share_access, stp)) 4745 return nfs4_get_vfs_file(rqstp, fp, cur_fh, stp, open); 4746 4747 /* test and set deny mode */ 4748 spin_lock(&fp->fi_lock); 4749 status = nfs4_file_check_deny(fp, open->op_share_deny); 4750 if (status == nfs_ok) { 4751 set_deny(open->op_share_deny, stp); 4752 fp->fi_share_deny |= 4753 (open->op_share_deny & NFS4_SHARE_DENY_BOTH); 4754 } 4755 spin_unlock(&fp->fi_lock); 4756 4757 if (status != nfs_ok) 4758 return status; 4759 4760 status = nfsd4_truncate(rqstp, cur_fh, open); 4761 if (status != nfs_ok) 4762 reset_union_bmap_deny(old_deny_bmap, stp); 4763 return status; 4764 } 4765 4766 /* Should we give out recallable state?: */ 4767 static bool nfsd4_cb_channel_good(struct nfs4_client *clp) 4768 { 4769 if (clp->cl_cb_state == NFSD4_CB_UP) 4770 return true; 4771 /* 4772 * In the sessions case, since we don't have to establish a 4773 * separate connection for callbacks, we assume it's OK 4774 * until we hear otherwise: 4775 */ 4776 return clp->cl_minorversion && clp->cl_cb_state == NFSD4_CB_UNKNOWN; 4777 } 4778 4779 static struct file_lock *nfs4_alloc_init_lease(struct nfs4_delegation *dp, 4780 int flag) 4781 { 4782 struct file_lock *fl; 4783 4784 fl = locks_alloc_lock(); 4785 if (!fl) 4786 return NULL; 4787 fl->fl_lmops = &nfsd_lease_mng_ops; 4788 fl->fl_flags = FL_DELEG; 4789 fl->fl_type = flag == NFS4_OPEN_DELEGATE_READ? F_RDLCK: F_WRLCK; 4790 fl->fl_end = OFFSET_MAX; 4791 fl->fl_owner = (fl_owner_t)dp; 4792 fl->fl_pid = current->tgid; 4793 fl->fl_file = dp->dl_stid.sc_file->fi_deleg_file->nf_file; 4794 return fl; 4795 } 4796 4797 static struct nfs4_delegation * 4798 nfs4_set_delegation(struct nfs4_client *clp, struct svc_fh *fh, 4799 struct nfs4_file *fp, struct nfs4_clnt_odstate *odstate) 4800 { 4801 int status = 0; 4802 struct nfs4_delegation *dp; 4803 struct nfsd_file *nf; 4804 struct file_lock *fl; 4805 4806 /* 4807 * The fi_had_conflict and nfs_get_existing_delegation checks 4808 * here are just optimizations; we'll need to recheck them at 4809 * the end: 4810 */ 4811 if (fp->fi_had_conflict) 4812 return ERR_PTR(-EAGAIN); 4813 4814 nf = find_readable_file(fp); 4815 if (!nf) { 4816 /* We should always have a readable file here */ 4817 WARN_ON_ONCE(1); 4818 return ERR_PTR(-EBADF); 4819 } 4820 spin_lock(&state_lock); 4821 spin_lock(&fp->fi_lock); 4822 if (nfs4_delegation_exists(clp, fp)) 4823 status = -EAGAIN; 4824 else if (!fp->fi_deleg_file) { 4825 fp->fi_deleg_file = nf; 4826 /* increment early to prevent fi_deleg_file from being 4827 * cleared */ 4828 fp->fi_delegees = 1; 4829 nf = NULL; 4830 } else 4831 fp->fi_delegees++; 4832 spin_unlock(&fp->fi_lock); 4833 spin_unlock(&state_lock); 4834 if (nf) 4835 nfsd_file_put(nf); 4836 if (status) 4837 return ERR_PTR(status); 4838 4839 status = -ENOMEM; 4840 dp = alloc_init_deleg(clp, fp, fh, odstate); 4841 if (!dp) 4842 goto out_delegees; 4843 4844 fl = nfs4_alloc_init_lease(dp, NFS4_OPEN_DELEGATE_READ); 4845 if (!fl) 4846 goto out_clnt_odstate; 4847 4848 status = vfs_setlease(fp->fi_deleg_file->nf_file, fl->fl_type, &fl, NULL); 4849 if (fl) 4850 locks_free_lock(fl); 4851 if (status) 4852 goto out_clnt_odstate; 4853 4854 spin_lock(&state_lock); 4855 spin_lock(&fp->fi_lock); 4856 if (fp->fi_had_conflict) 4857 status = -EAGAIN; 4858 else 4859 status = hash_delegation_locked(dp, fp); 4860 spin_unlock(&fp->fi_lock); 4861 spin_unlock(&state_lock); 4862 4863 if (status) 4864 goto out_unlock; 4865 4866 return dp; 4867 out_unlock: 4868 vfs_setlease(fp->fi_deleg_file->nf_file, F_UNLCK, NULL, (void **)&dp); 4869 out_clnt_odstate: 4870 put_clnt_odstate(dp->dl_clnt_odstate); 4871 nfs4_put_stid(&dp->dl_stid); 4872 out_delegees: 4873 put_deleg_file(fp); 4874 return ERR_PTR(status); 4875 } 4876 4877 static void nfsd4_open_deleg_none_ext(struct nfsd4_open *open, int status) 4878 { 4879 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; 4880 if (status == -EAGAIN) 4881 open->op_why_no_deleg = WND4_CONTENTION; 4882 else { 4883 open->op_why_no_deleg = WND4_RESOURCE; 4884 switch (open->op_deleg_want) { 4885 case NFS4_SHARE_WANT_READ_DELEG: 4886 case NFS4_SHARE_WANT_WRITE_DELEG: 4887 case NFS4_SHARE_WANT_ANY_DELEG: 4888 break; 4889 case NFS4_SHARE_WANT_CANCEL: 4890 open->op_why_no_deleg = WND4_CANCELLED; 4891 break; 4892 case NFS4_SHARE_WANT_NO_DELEG: 4893 WARN_ON_ONCE(1); 4894 } 4895 } 4896 } 4897 4898 /* 4899 * Attempt to hand out a delegation. 4900 * 4901 * Note we don't support write delegations, and won't until the vfs has 4902 * proper support for them. 4903 */ 4904 static void 4905 nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, 4906 struct nfs4_ol_stateid *stp) 4907 { 4908 struct nfs4_delegation *dp; 4909 struct nfs4_openowner *oo = openowner(stp->st_stateowner); 4910 struct nfs4_client *clp = stp->st_stid.sc_client; 4911 int cb_up; 4912 int status = 0; 4913 4914 cb_up = nfsd4_cb_channel_good(oo->oo_owner.so_client); 4915 open->op_recall = 0; 4916 switch (open->op_claim_type) { 4917 case NFS4_OPEN_CLAIM_PREVIOUS: 4918 if (!cb_up) 4919 open->op_recall = 1; 4920 if (open->op_delegate_type != NFS4_OPEN_DELEGATE_READ) 4921 goto out_no_deleg; 4922 break; 4923 case NFS4_OPEN_CLAIM_NULL: 4924 case NFS4_OPEN_CLAIM_FH: 4925 /* 4926 * Let's not give out any delegations till everyone's 4927 * had the chance to reclaim theirs, *and* until 4928 * NLM locks have all been reclaimed: 4929 */ 4930 if (locks_in_grace(clp->net)) 4931 goto out_no_deleg; 4932 if (!cb_up || !(oo->oo_flags & NFS4_OO_CONFIRMED)) 4933 goto out_no_deleg; 4934 /* 4935 * Also, if the file was opened for write or 4936 * create, there's a good chance the client's 4937 * about to write to it, resulting in an 4938 * immediate recall (since we don't support 4939 * write delegations): 4940 */ 4941 if (open->op_share_access & NFS4_SHARE_ACCESS_WRITE) 4942 goto out_no_deleg; 4943 if (open->op_create == NFS4_OPEN_CREATE) 4944 goto out_no_deleg; 4945 break; 4946 default: 4947 goto out_no_deleg; 4948 } 4949 dp = nfs4_set_delegation(clp, fh, stp->st_stid.sc_file, stp->st_clnt_odstate); 4950 if (IS_ERR(dp)) 4951 goto out_no_deleg; 4952 4953 memcpy(&open->op_delegate_stateid, &dp->dl_stid.sc_stateid, sizeof(dp->dl_stid.sc_stateid)); 4954 4955 dprintk("NFSD: delegation stateid=" STATEID_FMT "\n", 4956 STATEID_VAL(&dp->dl_stid.sc_stateid)); 4957 open->op_delegate_type = NFS4_OPEN_DELEGATE_READ; 4958 nfs4_put_stid(&dp->dl_stid); 4959 return; 4960 out_no_deleg: 4961 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE; 4962 if (open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS && 4963 open->op_delegate_type != NFS4_OPEN_DELEGATE_NONE) { 4964 dprintk("NFSD: WARNING: refusing delegation reclaim\n"); 4965 open->op_recall = 1; 4966 } 4967 4968 /* 4.1 client asking for a delegation? */ 4969 if (open->op_deleg_want) 4970 nfsd4_open_deleg_none_ext(open, status); 4971 return; 4972 } 4973 4974 static void nfsd4_deleg_xgrade_none_ext(struct nfsd4_open *open, 4975 struct nfs4_delegation *dp) 4976 { 4977 if (open->op_deleg_want == NFS4_SHARE_WANT_READ_DELEG && 4978 dp->dl_type == NFS4_OPEN_DELEGATE_WRITE) { 4979 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; 4980 open->op_why_no_deleg = WND4_NOT_SUPP_DOWNGRADE; 4981 } else if (open->op_deleg_want == NFS4_SHARE_WANT_WRITE_DELEG && 4982 dp->dl_type == NFS4_OPEN_DELEGATE_WRITE) { 4983 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; 4984 open->op_why_no_deleg = WND4_NOT_SUPP_UPGRADE; 4985 } 4986 /* Otherwise the client must be confused wanting a delegation 4987 * it already has, therefore we don't return 4988 * NFS4_OPEN_DELEGATE_NONE_EXT and reason. 4989 */ 4990 } 4991 4992 __be32 4993 nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open) 4994 { 4995 struct nfsd4_compoundres *resp = rqstp->rq_resp; 4996 struct nfs4_client *cl = open->op_openowner->oo_owner.so_client; 4997 struct nfs4_file *fp = NULL; 4998 struct nfs4_ol_stateid *stp = NULL; 4999 struct nfs4_delegation *dp = NULL; 5000 __be32 status; 5001 bool new_stp = false; 5002 5003 /* 5004 * Lookup file; if found, lookup stateid and check open request, 5005 * and check for delegations in the process of being recalled. 5006 * If not found, create the nfs4_file struct 5007 */ 5008 fp = find_or_add_file(open->op_file, ¤t_fh->fh_handle); 5009 if (fp != open->op_file) { 5010 status = nfs4_check_deleg(cl, open, &dp); 5011 if (status) 5012 goto out; 5013 stp = nfsd4_find_and_lock_existing_open(fp, open); 5014 } else { 5015 open->op_file = NULL; 5016 status = nfserr_bad_stateid; 5017 if (nfsd4_is_deleg_cur(open)) 5018 goto out; 5019 } 5020 5021 if (!stp) { 5022 stp = init_open_stateid(fp, open); 5023 if (!open->op_stp) 5024 new_stp = true; 5025 } 5026 5027 /* 5028 * OPEN the file, or upgrade an existing OPEN. 5029 * If truncate fails, the OPEN fails. 5030 * 5031 * stp is already locked. 5032 */ 5033 if (!new_stp) { 5034 /* Stateid was found, this is an OPEN upgrade */ 5035 status = nfs4_upgrade_open(rqstp, fp, current_fh, stp, open); 5036 if (status) { 5037 mutex_unlock(&stp->st_mutex); 5038 goto out; 5039 } 5040 } else { 5041 status = nfs4_get_vfs_file(rqstp, fp, current_fh, stp, open); 5042 if (status) { 5043 stp->st_stid.sc_type = NFS4_CLOSED_STID; 5044 release_open_stateid(stp); 5045 mutex_unlock(&stp->st_mutex); 5046 goto out; 5047 } 5048 5049 stp->st_clnt_odstate = find_or_hash_clnt_odstate(fp, 5050 open->op_odstate); 5051 if (stp->st_clnt_odstate == open->op_odstate) 5052 open->op_odstate = NULL; 5053 } 5054 5055 nfs4_inc_and_copy_stateid(&open->op_stateid, &stp->st_stid); 5056 mutex_unlock(&stp->st_mutex); 5057 5058 if (nfsd4_has_session(&resp->cstate)) { 5059 if (open->op_deleg_want & NFS4_SHARE_WANT_NO_DELEG) { 5060 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; 5061 open->op_why_no_deleg = WND4_NOT_WANTED; 5062 goto nodeleg; 5063 } 5064 } 5065 5066 /* 5067 * Attempt to hand out a delegation. No error return, because the 5068 * OPEN succeeds even if we fail. 5069 */ 5070 nfs4_open_delegation(current_fh, open, stp); 5071 nodeleg: 5072 status = nfs_ok; 5073 5074 dprintk("%s: stateid=" STATEID_FMT "\n", __func__, 5075 STATEID_VAL(&stp->st_stid.sc_stateid)); 5076 out: 5077 /* 4.1 client trying to upgrade/downgrade delegation? */ 5078 if (open->op_delegate_type == NFS4_OPEN_DELEGATE_NONE && dp && 5079 open->op_deleg_want) 5080 nfsd4_deleg_xgrade_none_ext(open, dp); 5081 5082 if (fp) 5083 put_nfs4_file(fp); 5084 if (status == 0 && open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS) 5085 open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED; 5086 /* 5087 * To finish the open response, we just need to set the rflags. 5088 */ 5089 open->op_rflags = NFS4_OPEN_RESULT_LOCKTYPE_POSIX; 5090 if (nfsd4_has_session(&resp->cstate)) 5091 open->op_rflags |= NFS4_OPEN_RESULT_MAY_NOTIFY_LOCK; 5092 else if (!(open->op_openowner->oo_flags & NFS4_OO_CONFIRMED)) 5093 open->op_rflags |= NFS4_OPEN_RESULT_CONFIRM; 5094 5095 if (dp) 5096 nfs4_put_stid(&dp->dl_stid); 5097 if (stp) 5098 nfs4_put_stid(&stp->st_stid); 5099 5100 return status; 5101 } 5102 5103 void nfsd4_cleanup_open_state(struct nfsd4_compound_state *cstate, 5104 struct nfsd4_open *open) 5105 { 5106 if (open->op_openowner) { 5107 struct nfs4_stateowner *so = &open->op_openowner->oo_owner; 5108 5109 nfsd4_cstate_assign_replay(cstate, so); 5110 nfs4_put_stateowner(so); 5111 } 5112 if (open->op_file) 5113 kmem_cache_free(file_slab, open->op_file); 5114 if (open->op_stp) 5115 nfs4_put_stid(&open->op_stp->st_stid); 5116 if (open->op_odstate) 5117 kmem_cache_free(odstate_slab, open->op_odstate); 5118 } 5119 5120 __be32 5121 nfsd4_renew(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 5122 union nfsd4_op_u *u) 5123 { 5124 clientid_t *clid = &u->renew; 5125 struct nfs4_client *clp; 5126 __be32 status; 5127 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 5128 5129 dprintk("process_renew(%08x/%08x): starting\n", 5130 clid->cl_boot, clid->cl_id); 5131 status = lookup_clientid(clid, cstate, nn); 5132 if (status) 5133 goto out; 5134 clp = cstate->clp; 5135 status = nfserr_cb_path_down; 5136 if (!list_empty(&clp->cl_delegations) 5137 && clp->cl_cb_state != NFSD4_CB_UP) 5138 goto out; 5139 status = nfs_ok; 5140 out: 5141 return status; 5142 } 5143 5144 void 5145 nfsd4_end_grace(struct nfsd_net *nn) 5146 { 5147 /* do nothing if grace period already ended */ 5148 if (nn->grace_ended) 5149 return; 5150 5151 nn->grace_ended = true; 5152 /* 5153 * If the server goes down again right now, an NFSv4 5154 * client will still be allowed to reclaim after it comes back up, 5155 * even if it hasn't yet had a chance to reclaim state this time. 5156 * 5157 */ 5158 nfsd4_record_grace_done(nn); 5159 /* 5160 * At this point, NFSv4 clients can still reclaim. But if the 5161 * server crashes, any that have not yet reclaimed will be out 5162 * of luck on the next boot. 5163 * 5164 * (NFSv4.1+ clients are considered to have reclaimed once they 5165 * call RECLAIM_COMPLETE. NFSv4.0 clients are considered to 5166 * have reclaimed after their first OPEN.) 5167 */ 5168 locks_end_grace(&nn->nfsd4_manager); 5169 /* 5170 * At this point, and once lockd and/or any other containers 5171 * exit their grace period, further reclaims will fail and 5172 * regular locking can resume. 5173 */ 5174 } 5175 5176 /* 5177 * If we've waited a lease period but there are still clients trying to 5178 * reclaim, wait a little longer to give them a chance to finish. 5179 */ 5180 static bool clients_still_reclaiming(struct nfsd_net *nn) 5181 { 5182 unsigned long now = get_seconds(); 5183 unsigned long double_grace_period_end = nn->boot_time + 5184 2 * nn->nfsd4_lease; 5185 5186 if (nn->track_reclaim_completes && 5187 atomic_read(&nn->nr_reclaim_complete) == 5188 nn->reclaim_str_hashtbl_size) 5189 return false; 5190 if (!nn->somebody_reclaimed) 5191 return false; 5192 nn->somebody_reclaimed = false; 5193 /* 5194 * If we've given them *two* lease times to reclaim, and they're 5195 * still not done, give up: 5196 */ 5197 if (time_after(now, double_grace_period_end)) 5198 return false; 5199 return true; 5200 } 5201 5202 static time_t 5203 nfs4_laundromat(struct nfsd_net *nn) 5204 { 5205 struct nfs4_client *clp; 5206 struct nfs4_openowner *oo; 5207 struct nfs4_delegation *dp; 5208 struct nfs4_ol_stateid *stp; 5209 struct nfsd4_blocked_lock *nbl; 5210 struct list_head *pos, *next, reaplist; 5211 time_t cutoff = get_seconds() - nn->nfsd4_lease; 5212 time_t t, new_timeo = nn->nfsd4_lease; 5213 5214 dprintk("NFSD: laundromat service - starting\n"); 5215 5216 if (clients_still_reclaiming(nn)) { 5217 new_timeo = 0; 5218 goto out; 5219 } 5220 dprintk("NFSD: end of grace period\n"); 5221 nfsd4_end_grace(nn); 5222 INIT_LIST_HEAD(&reaplist); 5223 spin_lock(&nn->client_lock); 5224 list_for_each_safe(pos, next, &nn->client_lru) { 5225 clp = list_entry(pos, struct nfs4_client, cl_lru); 5226 if (time_after((unsigned long)clp->cl_time, (unsigned long)cutoff)) { 5227 t = clp->cl_time - cutoff; 5228 new_timeo = min(new_timeo, t); 5229 break; 5230 } 5231 if (mark_client_expired_locked(clp)) { 5232 dprintk("NFSD: client in use (clientid %08x)\n", 5233 clp->cl_clientid.cl_id); 5234 continue; 5235 } 5236 list_add(&clp->cl_lru, &reaplist); 5237 } 5238 spin_unlock(&nn->client_lock); 5239 list_for_each_safe(pos, next, &reaplist) { 5240 clp = list_entry(pos, struct nfs4_client, cl_lru); 5241 dprintk("NFSD: purging unused client (clientid %08x)\n", 5242 clp->cl_clientid.cl_id); 5243 list_del_init(&clp->cl_lru); 5244 expire_client(clp); 5245 } 5246 spin_lock(&state_lock); 5247 list_for_each_safe(pos, next, &nn->del_recall_lru) { 5248 dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru); 5249 if (time_after((unsigned long)dp->dl_time, (unsigned long)cutoff)) { 5250 t = dp->dl_time - cutoff; 5251 new_timeo = min(new_timeo, t); 5252 break; 5253 } 5254 WARN_ON(!unhash_delegation_locked(dp)); 5255 list_add(&dp->dl_recall_lru, &reaplist); 5256 } 5257 spin_unlock(&state_lock); 5258 while (!list_empty(&reaplist)) { 5259 dp = list_first_entry(&reaplist, struct nfs4_delegation, 5260 dl_recall_lru); 5261 list_del_init(&dp->dl_recall_lru); 5262 revoke_delegation(dp); 5263 } 5264 5265 spin_lock(&nn->client_lock); 5266 while (!list_empty(&nn->close_lru)) { 5267 oo = list_first_entry(&nn->close_lru, struct nfs4_openowner, 5268 oo_close_lru); 5269 if (time_after((unsigned long)oo->oo_time, 5270 (unsigned long)cutoff)) { 5271 t = oo->oo_time - cutoff; 5272 new_timeo = min(new_timeo, t); 5273 break; 5274 } 5275 list_del_init(&oo->oo_close_lru); 5276 stp = oo->oo_last_closed_stid; 5277 oo->oo_last_closed_stid = NULL; 5278 spin_unlock(&nn->client_lock); 5279 nfs4_put_stid(&stp->st_stid); 5280 spin_lock(&nn->client_lock); 5281 } 5282 spin_unlock(&nn->client_lock); 5283 5284 /* 5285 * It's possible for a client to try and acquire an already held lock 5286 * that is being held for a long time, and then lose interest in it. 5287 * So, we clean out any un-revisited request after a lease period 5288 * under the assumption that the client is no longer interested. 5289 * 5290 * RFC5661, sec. 9.6 states that the client must not rely on getting 5291 * notifications and must continue to poll for locks, even when the 5292 * server supports them. Thus this shouldn't lead to clients blocking 5293 * indefinitely once the lock does become free. 5294 */ 5295 BUG_ON(!list_empty(&reaplist)); 5296 spin_lock(&nn->blocked_locks_lock); 5297 while (!list_empty(&nn->blocked_locks_lru)) { 5298 nbl = list_first_entry(&nn->blocked_locks_lru, 5299 struct nfsd4_blocked_lock, nbl_lru); 5300 if (time_after((unsigned long)nbl->nbl_time, 5301 (unsigned long)cutoff)) { 5302 t = nbl->nbl_time - cutoff; 5303 new_timeo = min(new_timeo, t); 5304 break; 5305 } 5306 list_move(&nbl->nbl_lru, &reaplist); 5307 list_del_init(&nbl->nbl_list); 5308 } 5309 spin_unlock(&nn->blocked_locks_lock); 5310 5311 while (!list_empty(&reaplist)) { 5312 nbl = list_first_entry(&reaplist, 5313 struct nfsd4_blocked_lock, nbl_lru); 5314 list_del_init(&nbl->nbl_lru); 5315 free_blocked_lock(nbl); 5316 } 5317 out: 5318 new_timeo = max_t(time_t, new_timeo, NFSD_LAUNDROMAT_MINTIMEOUT); 5319 return new_timeo; 5320 } 5321 5322 static struct workqueue_struct *laundry_wq; 5323 static void laundromat_main(struct work_struct *); 5324 5325 static void 5326 laundromat_main(struct work_struct *laundry) 5327 { 5328 time_t t; 5329 struct delayed_work *dwork = to_delayed_work(laundry); 5330 struct nfsd_net *nn = container_of(dwork, struct nfsd_net, 5331 laundromat_work); 5332 5333 t = nfs4_laundromat(nn); 5334 dprintk("NFSD: laundromat_main - sleeping for %ld seconds\n", t); 5335 queue_delayed_work(laundry_wq, &nn->laundromat_work, t*HZ); 5336 } 5337 5338 static inline __be32 nfs4_check_fh(struct svc_fh *fhp, struct nfs4_stid *stp) 5339 { 5340 if (!fh_match(&fhp->fh_handle, &stp->sc_file->fi_fhandle)) 5341 return nfserr_bad_stateid; 5342 return nfs_ok; 5343 } 5344 5345 static inline int 5346 access_permit_read(struct nfs4_ol_stateid *stp) 5347 { 5348 return test_access(NFS4_SHARE_ACCESS_READ, stp) || 5349 test_access(NFS4_SHARE_ACCESS_BOTH, stp) || 5350 test_access(NFS4_SHARE_ACCESS_WRITE, stp); 5351 } 5352 5353 static inline int 5354 access_permit_write(struct nfs4_ol_stateid *stp) 5355 { 5356 return test_access(NFS4_SHARE_ACCESS_WRITE, stp) || 5357 test_access(NFS4_SHARE_ACCESS_BOTH, stp); 5358 } 5359 5360 static 5361 __be32 nfs4_check_openmode(struct nfs4_ol_stateid *stp, int flags) 5362 { 5363 __be32 status = nfserr_openmode; 5364 5365 /* For lock stateid's, we test the parent open, not the lock: */ 5366 if (stp->st_openstp) 5367 stp = stp->st_openstp; 5368 if ((flags & WR_STATE) && !access_permit_write(stp)) 5369 goto out; 5370 if ((flags & RD_STATE) && !access_permit_read(stp)) 5371 goto out; 5372 status = nfs_ok; 5373 out: 5374 return status; 5375 } 5376 5377 static inline __be32 5378 check_special_stateids(struct net *net, svc_fh *current_fh, stateid_t *stateid, int flags) 5379 { 5380 if (ONE_STATEID(stateid) && (flags & RD_STATE)) 5381 return nfs_ok; 5382 else if (opens_in_grace(net)) { 5383 /* Answer in remaining cases depends on existence of 5384 * conflicting state; so we must wait out the grace period. */ 5385 return nfserr_grace; 5386 } else if (flags & WR_STATE) 5387 return nfs4_share_conflict(current_fh, 5388 NFS4_SHARE_DENY_WRITE); 5389 else /* (flags & RD_STATE) && ZERO_STATEID(stateid) */ 5390 return nfs4_share_conflict(current_fh, 5391 NFS4_SHARE_DENY_READ); 5392 } 5393 5394 /* 5395 * Allow READ/WRITE during grace period on recovered state only for files 5396 * that are not able to provide mandatory locking. 5397 */ 5398 static inline int 5399 grace_disallows_io(struct net *net, struct inode *inode) 5400 { 5401 return opens_in_grace(net) && mandatory_lock(inode); 5402 } 5403 5404 static __be32 check_stateid_generation(stateid_t *in, stateid_t *ref, bool has_session) 5405 { 5406 /* 5407 * When sessions are used the stateid generation number is ignored 5408 * when it is zero. 5409 */ 5410 if (has_session && in->si_generation == 0) 5411 return nfs_ok; 5412 5413 if (in->si_generation == ref->si_generation) 5414 return nfs_ok; 5415 5416 /* If the client sends us a stateid from the future, it's buggy: */ 5417 if (nfsd4_stateid_generation_after(in, ref)) 5418 return nfserr_bad_stateid; 5419 /* 5420 * However, we could see a stateid from the past, even from a 5421 * non-buggy client. For example, if the client sends a lock 5422 * while some IO is outstanding, the lock may bump si_generation 5423 * while the IO is still in flight. The client could avoid that 5424 * situation by waiting for responses on all the IO requests, 5425 * but better performance may result in retrying IO that 5426 * receives an old_stateid error if requests are rarely 5427 * reordered in flight: 5428 */ 5429 return nfserr_old_stateid; 5430 } 5431 5432 static __be32 nfsd4_stid_check_stateid_generation(stateid_t *in, struct nfs4_stid *s, bool has_session) 5433 { 5434 __be32 ret; 5435 5436 spin_lock(&s->sc_lock); 5437 ret = nfsd4_verify_open_stid(s); 5438 if (ret == nfs_ok) 5439 ret = check_stateid_generation(in, &s->sc_stateid, has_session); 5440 spin_unlock(&s->sc_lock); 5441 return ret; 5442 } 5443 5444 static __be32 nfsd4_check_openowner_confirmed(struct nfs4_ol_stateid *ols) 5445 { 5446 if (ols->st_stateowner->so_is_open_owner && 5447 !(openowner(ols->st_stateowner)->oo_flags & NFS4_OO_CONFIRMED)) 5448 return nfserr_bad_stateid; 5449 return nfs_ok; 5450 } 5451 5452 static __be32 nfsd4_validate_stateid(struct nfs4_client *cl, stateid_t *stateid) 5453 { 5454 struct nfs4_stid *s; 5455 __be32 status = nfserr_bad_stateid; 5456 5457 if (ZERO_STATEID(stateid) || ONE_STATEID(stateid) || 5458 CLOSE_STATEID(stateid)) 5459 return status; 5460 /* Client debugging aid. */ 5461 if (!same_clid(&stateid->si_opaque.so_clid, &cl->cl_clientid)) { 5462 char addr_str[INET6_ADDRSTRLEN]; 5463 rpc_ntop((struct sockaddr *)&cl->cl_addr, addr_str, 5464 sizeof(addr_str)); 5465 pr_warn_ratelimited("NFSD: client %s testing state ID " 5466 "with incorrect client ID\n", addr_str); 5467 return status; 5468 } 5469 spin_lock(&cl->cl_lock); 5470 s = find_stateid_locked(cl, stateid); 5471 if (!s) 5472 goto out_unlock; 5473 status = nfsd4_stid_check_stateid_generation(stateid, s, 1); 5474 if (status) 5475 goto out_unlock; 5476 switch (s->sc_type) { 5477 case NFS4_DELEG_STID: 5478 status = nfs_ok; 5479 break; 5480 case NFS4_REVOKED_DELEG_STID: 5481 status = nfserr_deleg_revoked; 5482 break; 5483 case NFS4_OPEN_STID: 5484 case NFS4_LOCK_STID: 5485 status = nfsd4_check_openowner_confirmed(openlockstateid(s)); 5486 break; 5487 default: 5488 printk("unknown stateid type %x\n", s->sc_type); 5489 /* Fallthrough */ 5490 case NFS4_CLOSED_STID: 5491 case NFS4_CLOSED_DELEG_STID: 5492 status = nfserr_bad_stateid; 5493 } 5494 out_unlock: 5495 spin_unlock(&cl->cl_lock); 5496 return status; 5497 } 5498 5499 __be32 5500 nfsd4_lookup_stateid(struct nfsd4_compound_state *cstate, 5501 stateid_t *stateid, unsigned char typemask, 5502 struct nfs4_stid **s, struct nfsd_net *nn) 5503 { 5504 __be32 status; 5505 bool return_revoked = false; 5506 5507 /* 5508 * only return revoked delegations if explicitly asked. 5509 * otherwise we report revoked or bad_stateid status. 5510 */ 5511 if (typemask & NFS4_REVOKED_DELEG_STID) 5512 return_revoked = true; 5513 else if (typemask & NFS4_DELEG_STID) 5514 typemask |= NFS4_REVOKED_DELEG_STID; 5515 5516 if (ZERO_STATEID(stateid) || ONE_STATEID(stateid) || 5517 CLOSE_STATEID(stateid)) 5518 return nfserr_bad_stateid; 5519 status = lookup_clientid(&stateid->si_opaque.so_clid, cstate, nn); 5520 if (status == nfserr_stale_clientid) { 5521 if (cstate->session) 5522 return nfserr_bad_stateid; 5523 return nfserr_stale_stateid; 5524 } 5525 if (status) 5526 return status; 5527 *s = find_stateid_by_type(cstate->clp, stateid, typemask); 5528 if (!*s) 5529 return nfserr_bad_stateid; 5530 if (((*s)->sc_type == NFS4_REVOKED_DELEG_STID) && !return_revoked) { 5531 nfs4_put_stid(*s); 5532 if (cstate->minorversion) 5533 return nfserr_deleg_revoked; 5534 return nfserr_bad_stateid; 5535 } 5536 return nfs_ok; 5537 } 5538 5539 static struct nfsd_file * 5540 nfs4_find_file(struct nfs4_stid *s, int flags) 5541 { 5542 if (!s) 5543 return NULL; 5544 5545 switch (s->sc_type) { 5546 case NFS4_DELEG_STID: 5547 if (WARN_ON_ONCE(!s->sc_file->fi_deleg_file)) 5548 return NULL; 5549 return nfsd_file_get(s->sc_file->fi_deleg_file); 5550 case NFS4_OPEN_STID: 5551 case NFS4_LOCK_STID: 5552 if (flags & RD_STATE) 5553 return find_readable_file(s->sc_file); 5554 else 5555 return find_writeable_file(s->sc_file); 5556 break; 5557 } 5558 5559 return NULL; 5560 } 5561 5562 static __be32 5563 nfs4_check_olstateid(struct nfs4_ol_stateid *ols, int flags) 5564 { 5565 __be32 status; 5566 5567 status = nfsd4_check_openowner_confirmed(ols); 5568 if (status) 5569 return status; 5570 return nfs4_check_openmode(ols, flags); 5571 } 5572 5573 static __be32 5574 nfs4_check_file(struct svc_rqst *rqstp, struct svc_fh *fhp, struct nfs4_stid *s, 5575 struct nfsd_file **nfp, int flags) 5576 { 5577 int acc = (flags & RD_STATE) ? NFSD_MAY_READ : NFSD_MAY_WRITE; 5578 struct nfsd_file *nf; 5579 __be32 status; 5580 5581 nf = nfs4_find_file(s, flags); 5582 if (nf) { 5583 status = nfsd_permission(rqstp, fhp->fh_export, fhp->fh_dentry, 5584 acc | NFSD_MAY_OWNER_OVERRIDE); 5585 if (status) { 5586 nfsd_file_put(nf); 5587 goto out; 5588 } 5589 } else { 5590 status = nfsd_file_acquire(rqstp, fhp, acc, &nf); 5591 if (status) 5592 return status; 5593 } 5594 *nfp = nf; 5595 out: 5596 return status; 5597 } 5598 5599 /* 5600 * Checks for stateid operations 5601 */ 5602 __be32 5603 nfs4_preprocess_stateid_op(struct svc_rqst *rqstp, 5604 struct nfsd4_compound_state *cstate, struct svc_fh *fhp, 5605 stateid_t *stateid, int flags, struct nfsd_file **nfp) 5606 { 5607 struct inode *ino = d_inode(fhp->fh_dentry); 5608 struct net *net = SVC_NET(rqstp); 5609 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 5610 struct nfs4_stid *s = NULL; 5611 __be32 status; 5612 5613 if (nfp) 5614 *nfp = NULL; 5615 5616 if (grace_disallows_io(net, ino)) 5617 return nfserr_grace; 5618 5619 if (ZERO_STATEID(stateid) || ONE_STATEID(stateid)) { 5620 status = check_special_stateids(net, fhp, stateid, flags); 5621 goto done; 5622 } 5623 5624 status = nfsd4_lookup_stateid(cstate, stateid, 5625 NFS4_DELEG_STID|NFS4_OPEN_STID|NFS4_LOCK_STID, 5626 &s, nn); 5627 if (status) 5628 return status; 5629 status = nfsd4_stid_check_stateid_generation(stateid, s, 5630 nfsd4_has_session(cstate)); 5631 if (status) 5632 goto out; 5633 5634 switch (s->sc_type) { 5635 case NFS4_DELEG_STID: 5636 status = nfs4_check_delegmode(delegstateid(s), flags); 5637 break; 5638 case NFS4_OPEN_STID: 5639 case NFS4_LOCK_STID: 5640 status = nfs4_check_olstateid(openlockstateid(s), flags); 5641 break; 5642 default: 5643 status = nfserr_bad_stateid; 5644 break; 5645 } 5646 if (status) 5647 goto out; 5648 status = nfs4_check_fh(fhp, s); 5649 5650 done: 5651 if (status == nfs_ok && nfp) 5652 status = nfs4_check_file(rqstp, fhp, s, nfp, flags); 5653 out: 5654 if (s) 5655 nfs4_put_stid(s); 5656 return status; 5657 } 5658 5659 /* 5660 * Test if the stateid is valid 5661 */ 5662 __be32 5663 nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 5664 union nfsd4_op_u *u) 5665 { 5666 struct nfsd4_test_stateid *test_stateid = &u->test_stateid; 5667 struct nfsd4_test_stateid_id *stateid; 5668 struct nfs4_client *cl = cstate->session->se_client; 5669 5670 list_for_each_entry(stateid, &test_stateid->ts_stateid_list, ts_id_list) 5671 stateid->ts_id_status = 5672 nfsd4_validate_stateid(cl, &stateid->ts_id_stateid); 5673 5674 return nfs_ok; 5675 } 5676 5677 static __be32 5678 nfsd4_free_lock_stateid(stateid_t *stateid, struct nfs4_stid *s) 5679 { 5680 struct nfs4_ol_stateid *stp = openlockstateid(s); 5681 __be32 ret; 5682 5683 ret = nfsd4_lock_ol_stateid(stp); 5684 if (ret) 5685 goto out_put_stid; 5686 5687 ret = check_stateid_generation(stateid, &s->sc_stateid, 1); 5688 if (ret) 5689 goto out; 5690 5691 ret = nfserr_locks_held; 5692 if (check_for_locks(stp->st_stid.sc_file, 5693 lockowner(stp->st_stateowner))) 5694 goto out; 5695 5696 release_lock_stateid(stp); 5697 ret = nfs_ok; 5698 5699 out: 5700 mutex_unlock(&stp->st_mutex); 5701 out_put_stid: 5702 nfs4_put_stid(s); 5703 return ret; 5704 } 5705 5706 __be32 5707 nfsd4_free_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 5708 union nfsd4_op_u *u) 5709 { 5710 struct nfsd4_free_stateid *free_stateid = &u->free_stateid; 5711 stateid_t *stateid = &free_stateid->fr_stateid; 5712 struct nfs4_stid *s; 5713 struct nfs4_delegation *dp; 5714 struct nfs4_client *cl = cstate->session->se_client; 5715 __be32 ret = nfserr_bad_stateid; 5716 5717 spin_lock(&cl->cl_lock); 5718 s = find_stateid_locked(cl, stateid); 5719 if (!s) 5720 goto out_unlock; 5721 spin_lock(&s->sc_lock); 5722 switch (s->sc_type) { 5723 case NFS4_DELEG_STID: 5724 ret = nfserr_locks_held; 5725 break; 5726 case NFS4_OPEN_STID: 5727 ret = check_stateid_generation(stateid, &s->sc_stateid, 1); 5728 if (ret) 5729 break; 5730 ret = nfserr_locks_held; 5731 break; 5732 case NFS4_LOCK_STID: 5733 spin_unlock(&s->sc_lock); 5734 refcount_inc(&s->sc_count); 5735 spin_unlock(&cl->cl_lock); 5736 ret = nfsd4_free_lock_stateid(stateid, s); 5737 goto out; 5738 case NFS4_REVOKED_DELEG_STID: 5739 spin_unlock(&s->sc_lock); 5740 dp = delegstateid(s); 5741 list_del_init(&dp->dl_recall_lru); 5742 spin_unlock(&cl->cl_lock); 5743 nfs4_put_stid(s); 5744 ret = nfs_ok; 5745 goto out; 5746 /* Default falls through and returns nfserr_bad_stateid */ 5747 } 5748 spin_unlock(&s->sc_lock); 5749 out_unlock: 5750 spin_unlock(&cl->cl_lock); 5751 out: 5752 return ret; 5753 } 5754 5755 static inline int 5756 setlkflg (int type) 5757 { 5758 return (type == NFS4_READW_LT || type == NFS4_READ_LT) ? 5759 RD_STATE : WR_STATE; 5760 } 5761 5762 static __be32 nfs4_seqid_op_checks(struct nfsd4_compound_state *cstate, stateid_t *stateid, u32 seqid, struct nfs4_ol_stateid *stp) 5763 { 5764 struct svc_fh *current_fh = &cstate->current_fh; 5765 struct nfs4_stateowner *sop = stp->st_stateowner; 5766 __be32 status; 5767 5768 status = nfsd4_check_seqid(cstate, sop, seqid); 5769 if (status) 5770 return status; 5771 status = nfsd4_lock_ol_stateid(stp); 5772 if (status != nfs_ok) 5773 return status; 5774 status = check_stateid_generation(stateid, &stp->st_stid.sc_stateid, nfsd4_has_session(cstate)); 5775 if (status == nfs_ok) 5776 status = nfs4_check_fh(current_fh, &stp->st_stid); 5777 if (status != nfs_ok) 5778 mutex_unlock(&stp->st_mutex); 5779 return status; 5780 } 5781 5782 /* 5783 * Checks for sequence id mutating operations. 5784 */ 5785 static __be32 5786 nfs4_preprocess_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid, 5787 stateid_t *stateid, char typemask, 5788 struct nfs4_ol_stateid **stpp, 5789 struct nfsd_net *nn) 5790 { 5791 __be32 status; 5792 struct nfs4_stid *s; 5793 struct nfs4_ol_stateid *stp = NULL; 5794 5795 dprintk("NFSD: %s: seqid=%d stateid = " STATEID_FMT "\n", __func__, 5796 seqid, STATEID_VAL(stateid)); 5797 5798 *stpp = NULL; 5799 status = nfsd4_lookup_stateid(cstate, stateid, typemask, &s, nn); 5800 if (status) 5801 return status; 5802 stp = openlockstateid(s); 5803 nfsd4_cstate_assign_replay(cstate, stp->st_stateowner); 5804 5805 status = nfs4_seqid_op_checks(cstate, stateid, seqid, stp); 5806 if (!status) 5807 *stpp = stp; 5808 else 5809 nfs4_put_stid(&stp->st_stid); 5810 return status; 5811 } 5812 5813 static __be32 nfs4_preprocess_confirmed_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid, 5814 stateid_t *stateid, struct nfs4_ol_stateid **stpp, struct nfsd_net *nn) 5815 { 5816 __be32 status; 5817 struct nfs4_openowner *oo; 5818 struct nfs4_ol_stateid *stp; 5819 5820 status = nfs4_preprocess_seqid_op(cstate, seqid, stateid, 5821 NFS4_OPEN_STID, &stp, nn); 5822 if (status) 5823 return status; 5824 oo = openowner(stp->st_stateowner); 5825 if (!(oo->oo_flags & NFS4_OO_CONFIRMED)) { 5826 mutex_unlock(&stp->st_mutex); 5827 nfs4_put_stid(&stp->st_stid); 5828 return nfserr_bad_stateid; 5829 } 5830 *stpp = stp; 5831 return nfs_ok; 5832 } 5833 5834 __be32 5835 nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 5836 union nfsd4_op_u *u) 5837 { 5838 struct nfsd4_open_confirm *oc = &u->open_confirm; 5839 __be32 status; 5840 struct nfs4_openowner *oo; 5841 struct nfs4_ol_stateid *stp; 5842 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 5843 5844 dprintk("NFSD: nfsd4_open_confirm on file %pd\n", 5845 cstate->current_fh.fh_dentry); 5846 5847 status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0); 5848 if (status) 5849 return status; 5850 5851 status = nfs4_preprocess_seqid_op(cstate, 5852 oc->oc_seqid, &oc->oc_req_stateid, 5853 NFS4_OPEN_STID, &stp, nn); 5854 if (status) 5855 goto out; 5856 oo = openowner(stp->st_stateowner); 5857 status = nfserr_bad_stateid; 5858 if (oo->oo_flags & NFS4_OO_CONFIRMED) { 5859 mutex_unlock(&stp->st_mutex); 5860 goto put_stateid; 5861 } 5862 oo->oo_flags |= NFS4_OO_CONFIRMED; 5863 nfs4_inc_and_copy_stateid(&oc->oc_resp_stateid, &stp->st_stid); 5864 mutex_unlock(&stp->st_mutex); 5865 dprintk("NFSD: %s: success, seqid=%d stateid=" STATEID_FMT "\n", 5866 __func__, oc->oc_seqid, STATEID_VAL(&stp->st_stid.sc_stateid)); 5867 5868 nfsd4_client_record_create(oo->oo_owner.so_client); 5869 status = nfs_ok; 5870 put_stateid: 5871 nfs4_put_stid(&stp->st_stid); 5872 out: 5873 nfsd4_bump_seqid(cstate, status); 5874 return status; 5875 } 5876 5877 static inline void nfs4_stateid_downgrade_bit(struct nfs4_ol_stateid *stp, u32 access) 5878 { 5879 if (!test_access(access, stp)) 5880 return; 5881 nfs4_file_put_access(stp->st_stid.sc_file, access); 5882 clear_access(access, stp); 5883 } 5884 5885 static inline void nfs4_stateid_downgrade(struct nfs4_ol_stateid *stp, u32 to_access) 5886 { 5887 switch (to_access) { 5888 case NFS4_SHARE_ACCESS_READ: 5889 nfs4_stateid_downgrade_bit(stp, NFS4_SHARE_ACCESS_WRITE); 5890 nfs4_stateid_downgrade_bit(stp, NFS4_SHARE_ACCESS_BOTH); 5891 break; 5892 case NFS4_SHARE_ACCESS_WRITE: 5893 nfs4_stateid_downgrade_bit(stp, NFS4_SHARE_ACCESS_READ); 5894 nfs4_stateid_downgrade_bit(stp, NFS4_SHARE_ACCESS_BOTH); 5895 break; 5896 case NFS4_SHARE_ACCESS_BOTH: 5897 break; 5898 default: 5899 WARN_ON_ONCE(1); 5900 } 5901 } 5902 5903 __be32 5904 nfsd4_open_downgrade(struct svc_rqst *rqstp, 5905 struct nfsd4_compound_state *cstate, union nfsd4_op_u *u) 5906 { 5907 struct nfsd4_open_downgrade *od = &u->open_downgrade; 5908 __be32 status; 5909 struct nfs4_ol_stateid *stp; 5910 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 5911 5912 dprintk("NFSD: nfsd4_open_downgrade on file %pd\n", 5913 cstate->current_fh.fh_dentry); 5914 5915 /* We don't yet support WANT bits: */ 5916 if (od->od_deleg_want) 5917 dprintk("NFSD: %s: od_deleg_want=0x%x ignored\n", __func__, 5918 od->od_deleg_want); 5919 5920 status = nfs4_preprocess_confirmed_seqid_op(cstate, od->od_seqid, 5921 &od->od_stateid, &stp, nn); 5922 if (status) 5923 goto out; 5924 status = nfserr_inval; 5925 if (!test_access(od->od_share_access, stp)) { 5926 dprintk("NFSD: access not a subset of current bitmap: 0x%hhx, input access=%08x\n", 5927 stp->st_access_bmap, od->od_share_access); 5928 goto put_stateid; 5929 } 5930 if (!test_deny(od->od_share_deny, stp)) { 5931 dprintk("NFSD: deny not a subset of current bitmap: 0x%hhx, input deny=%08x\n", 5932 stp->st_deny_bmap, od->od_share_deny); 5933 goto put_stateid; 5934 } 5935 nfs4_stateid_downgrade(stp, od->od_share_access); 5936 reset_union_bmap_deny(od->od_share_deny, stp); 5937 nfs4_inc_and_copy_stateid(&od->od_stateid, &stp->st_stid); 5938 status = nfs_ok; 5939 put_stateid: 5940 mutex_unlock(&stp->st_mutex); 5941 nfs4_put_stid(&stp->st_stid); 5942 out: 5943 nfsd4_bump_seqid(cstate, status); 5944 return status; 5945 } 5946 5947 static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s) 5948 { 5949 struct nfs4_client *clp = s->st_stid.sc_client; 5950 bool unhashed; 5951 LIST_HEAD(reaplist); 5952 5953 spin_lock(&clp->cl_lock); 5954 unhashed = unhash_open_stateid(s, &reaplist); 5955 5956 if (clp->cl_minorversion) { 5957 if (unhashed) 5958 put_ol_stateid_locked(s, &reaplist); 5959 spin_unlock(&clp->cl_lock); 5960 free_ol_stateid_reaplist(&reaplist); 5961 } else { 5962 spin_unlock(&clp->cl_lock); 5963 free_ol_stateid_reaplist(&reaplist); 5964 if (unhashed) 5965 move_to_close_lru(s, clp->net); 5966 } 5967 } 5968 5969 /* 5970 * nfs4_unlock_state() called after encode 5971 */ 5972 __be32 5973 nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 5974 union nfsd4_op_u *u) 5975 { 5976 struct nfsd4_close *close = &u->close; 5977 __be32 status; 5978 struct nfs4_ol_stateid *stp; 5979 struct net *net = SVC_NET(rqstp); 5980 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 5981 5982 dprintk("NFSD: nfsd4_close on file %pd\n", 5983 cstate->current_fh.fh_dentry); 5984 5985 status = nfs4_preprocess_seqid_op(cstate, close->cl_seqid, 5986 &close->cl_stateid, 5987 NFS4_OPEN_STID|NFS4_CLOSED_STID, 5988 &stp, nn); 5989 nfsd4_bump_seqid(cstate, status); 5990 if (status) 5991 goto out; 5992 5993 stp->st_stid.sc_type = NFS4_CLOSED_STID; 5994 5995 /* 5996 * Technically we don't _really_ have to increment or copy it, since 5997 * it should just be gone after this operation and we clobber the 5998 * copied value below, but we continue to do so here just to ensure 5999 * that racing ops see that there was a state change. 6000 */ 6001 nfs4_inc_and_copy_stateid(&close->cl_stateid, &stp->st_stid); 6002 6003 nfsd4_close_open_stateid(stp); 6004 mutex_unlock(&stp->st_mutex); 6005 6006 /* v4.1+ suggests that we send a special stateid in here, since the 6007 * clients should just ignore this anyway. Since this is not useful 6008 * for v4.0 clients either, we set it to the special close_stateid 6009 * universally. 6010 * 6011 * See RFC5661 section 18.2.4, and RFC7530 section 16.2.5 6012 */ 6013 memcpy(&close->cl_stateid, &close_stateid, sizeof(close->cl_stateid)); 6014 6015 /* put reference from nfs4_preprocess_seqid_op */ 6016 nfs4_put_stid(&stp->st_stid); 6017 out: 6018 return status; 6019 } 6020 6021 __be32 6022 nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 6023 union nfsd4_op_u *u) 6024 { 6025 struct nfsd4_delegreturn *dr = &u->delegreturn; 6026 struct nfs4_delegation *dp; 6027 stateid_t *stateid = &dr->dr_stateid; 6028 struct nfs4_stid *s; 6029 __be32 status; 6030 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 6031 6032 if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) 6033 return status; 6034 6035 status = nfsd4_lookup_stateid(cstate, stateid, NFS4_DELEG_STID, &s, nn); 6036 if (status) 6037 goto out; 6038 dp = delegstateid(s); 6039 status = nfsd4_stid_check_stateid_generation(stateid, &dp->dl_stid, nfsd4_has_session(cstate)); 6040 if (status) 6041 goto put_stateid; 6042 6043 destroy_delegation(dp); 6044 put_stateid: 6045 nfs4_put_stid(&dp->dl_stid); 6046 out: 6047 return status; 6048 } 6049 6050 static inline u64 6051 end_offset(u64 start, u64 len) 6052 { 6053 u64 end; 6054 6055 end = start + len; 6056 return end >= start ? end: NFS4_MAX_UINT64; 6057 } 6058 6059 /* last octet in a range */ 6060 static inline u64 6061 last_byte_offset(u64 start, u64 len) 6062 { 6063 u64 end; 6064 6065 WARN_ON_ONCE(!len); 6066 end = start + len; 6067 return end > start ? end - 1: NFS4_MAX_UINT64; 6068 } 6069 6070 /* 6071 * TODO: Linux file offsets are _signed_ 64-bit quantities, which means that 6072 * we can't properly handle lock requests that go beyond the (2^63 - 1)-th 6073 * byte, because of sign extension problems. Since NFSv4 calls for 64-bit 6074 * locking, this prevents us from being completely protocol-compliant. The 6075 * real solution to this problem is to start using unsigned file offsets in 6076 * the VFS, but this is a very deep change! 6077 */ 6078 static inline void 6079 nfs4_transform_lock_offset(struct file_lock *lock) 6080 { 6081 if (lock->fl_start < 0) 6082 lock->fl_start = OFFSET_MAX; 6083 if (lock->fl_end < 0) 6084 lock->fl_end = OFFSET_MAX; 6085 } 6086 6087 static fl_owner_t 6088 nfsd4_fl_get_owner(fl_owner_t owner) 6089 { 6090 struct nfs4_lockowner *lo = (struct nfs4_lockowner *)owner; 6091 6092 nfs4_get_stateowner(&lo->lo_owner); 6093 return owner; 6094 } 6095 6096 static void 6097 nfsd4_fl_put_owner(fl_owner_t owner) 6098 { 6099 struct nfs4_lockowner *lo = (struct nfs4_lockowner *)owner; 6100 6101 if (lo) 6102 nfs4_put_stateowner(&lo->lo_owner); 6103 } 6104 6105 static void 6106 nfsd4_lm_notify(struct file_lock *fl) 6107 { 6108 struct nfs4_lockowner *lo = (struct nfs4_lockowner *)fl->fl_owner; 6109 struct net *net = lo->lo_owner.so_client->net; 6110 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 6111 struct nfsd4_blocked_lock *nbl = container_of(fl, 6112 struct nfsd4_blocked_lock, nbl_lock); 6113 bool queue = false; 6114 6115 /* An empty list means that something else is going to be using it */ 6116 spin_lock(&nn->blocked_locks_lock); 6117 if (!list_empty(&nbl->nbl_list)) { 6118 list_del_init(&nbl->nbl_list); 6119 list_del_init(&nbl->nbl_lru); 6120 queue = true; 6121 } 6122 spin_unlock(&nn->blocked_locks_lock); 6123 6124 if (queue) 6125 nfsd4_run_cb(&nbl->nbl_cb); 6126 } 6127 6128 static const struct lock_manager_operations nfsd_posix_mng_ops = { 6129 .lm_notify = nfsd4_lm_notify, 6130 .lm_get_owner = nfsd4_fl_get_owner, 6131 .lm_put_owner = nfsd4_fl_put_owner, 6132 }; 6133 6134 static inline void 6135 nfs4_set_lock_denied(struct file_lock *fl, struct nfsd4_lock_denied *deny) 6136 { 6137 struct nfs4_lockowner *lo; 6138 6139 if (fl->fl_lmops == &nfsd_posix_mng_ops) { 6140 lo = (struct nfs4_lockowner *) fl->fl_owner; 6141 xdr_netobj_dup(&deny->ld_owner, &lo->lo_owner.so_owner, 6142 GFP_KERNEL); 6143 if (!deny->ld_owner.data) 6144 /* We just don't care that much */ 6145 goto nevermind; 6146 deny->ld_clientid = lo->lo_owner.so_client->cl_clientid; 6147 } else { 6148 nevermind: 6149 deny->ld_owner.len = 0; 6150 deny->ld_owner.data = NULL; 6151 deny->ld_clientid.cl_boot = 0; 6152 deny->ld_clientid.cl_id = 0; 6153 } 6154 deny->ld_start = fl->fl_start; 6155 deny->ld_length = NFS4_MAX_UINT64; 6156 if (fl->fl_end != NFS4_MAX_UINT64) 6157 deny->ld_length = fl->fl_end - fl->fl_start + 1; 6158 deny->ld_type = NFS4_READ_LT; 6159 if (fl->fl_type != F_RDLCK) 6160 deny->ld_type = NFS4_WRITE_LT; 6161 } 6162 6163 static struct nfs4_lockowner * 6164 find_lockowner_str_locked(struct nfs4_client *clp, struct xdr_netobj *owner) 6165 { 6166 unsigned int strhashval = ownerstr_hashval(owner); 6167 struct nfs4_stateowner *so; 6168 6169 lockdep_assert_held(&clp->cl_lock); 6170 6171 list_for_each_entry(so, &clp->cl_ownerstr_hashtbl[strhashval], 6172 so_strhash) { 6173 if (so->so_is_open_owner) 6174 continue; 6175 if (same_owner_str(so, owner)) 6176 return lockowner(nfs4_get_stateowner(so)); 6177 } 6178 return NULL; 6179 } 6180 6181 static struct nfs4_lockowner * 6182 find_lockowner_str(struct nfs4_client *clp, struct xdr_netobj *owner) 6183 { 6184 struct nfs4_lockowner *lo; 6185 6186 spin_lock(&clp->cl_lock); 6187 lo = find_lockowner_str_locked(clp, owner); 6188 spin_unlock(&clp->cl_lock); 6189 return lo; 6190 } 6191 6192 static void nfs4_unhash_lockowner(struct nfs4_stateowner *sop) 6193 { 6194 unhash_lockowner_locked(lockowner(sop)); 6195 } 6196 6197 static void nfs4_free_lockowner(struct nfs4_stateowner *sop) 6198 { 6199 struct nfs4_lockowner *lo = lockowner(sop); 6200 6201 kmem_cache_free(lockowner_slab, lo); 6202 } 6203 6204 static const struct nfs4_stateowner_operations lockowner_ops = { 6205 .so_unhash = nfs4_unhash_lockowner, 6206 .so_free = nfs4_free_lockowner, 6207 }; 6208 6209 /* 6210 * Alloc a lock owner structure. 6211 * Called in nfsd4_lock - therefore, OPEN and OPEN_CONFIRM (if needed) has 6212 * occurred. 6213 * 6214 * strhashval = ownerstr_hashval 6215 */ 6216 static struct nfs4_lockowner * 6217 alloc_init_lock_stateowner(unsigned int strhashval, struct nfs4_client *clp, 6218 struct nfs4_ol_stateid *open_stp, 6219 struct nfsd4_lock *lock) 6220 { 6221 struct nfs4_lockowner *lo, *ret; 6222 6223 lo = alloc_stateowner(lockowner_slab, &lock->lk_new_owner, clp); 6224 if (!lo) 6225 return NULL; 6226 INIT_LIST_HEAD(&lo->lo_blocked); 6227 INIT_LIST_HEAD(&lo->lo_owner.so_stateids); 6228 lo->lo_owner.so_is_open_owner = 0; 6229 lo->lo_owner.so_seqid = lock->lk_new_lock_seqid; 6230 lo->lo_owner.so_ops = &lockowner_ops; 6231 spin_lock(&clp->cl_lock); 6232 ret = find_lockowner_str_locked(clp, &lock->lk_new_owner); 6233 if (ret == NULL) { 6234 list_add(&lo->lo_owner.so_strhash, 6235 &clp->cl_ownerstr_hashtbl[strhashval]); 6236 ret = lo; 6237 } else 6238 nfs4_free_stateowner(&lo->lo_owner); 6239 6240 spin_unlock(&clp->cl_lock); 6241 return ret; 6242 } 6243 6244 static struct nfs4_ol_stateid * 6245 find_lock_stateid(struct nfs4_lockowner *lo, struct nfs4_file *fp) 6246 { 6247 struct nfs4_ol_stateid *lst; 6248 struct nfs4_client *clp = lo->lo_owner.so_client; 6249 6250 lockdep_assert_held(&clp->cl_lock); 6251 6252 list_for_each_entry(lst, &lo->lo_owner.so_stateids, st_perstateowner) { 6253 if (lst->st_stid.sc_type != NFS4_LOCK_STID) 6254 continue; 6255 if (lst->st_stid.sc_file == fp) { 6256 refcount_inc(&lst->st_stid.sc_count); 6257 return lst; 6258 } 6259 } 6260 return NULL; 6261 } 6262 6263 static struct nfs4_ol_stateid * 6264 init_lock_stateid(struct nfs4_ol_stateid *stp, struct nfs4_lockowner *lo, 6265 struct nfs4_file *fp, struct inode *inode, 6266 struct nfs4_ol_stateid *open_stp) 6267 { 6268 struct nfs4_client *clp = lo->lo_owner.so_client; 6269 struct nfs4_ol_stateid *retstp; 6270 6271 mutex_init(&stp->st_mutex); 6272 mutex_lock_nested(&stp->st_mutex, OPEN_STATEID_MUTEX); 6273 retry: 6274 spin_lock(&clp->cl_lock); 6275 spin_lock(&fp->fi_lock); 6276 retstp = find_lock_stateid(lo, fp); 6277 if (retstp) 6278 goto out_unlock; 6279 6280 refcount_inc(&stp->st_stid.sc_count); 6281 stp->st_stid.sc_type = NFS4_LOCK_STID; 6282 stp->st_stateowner = nfs4_get_stateowner(&lo->lo_owner); 6283 get_nfs4_file(fp); 6284 stp->st_stid.sc_file = fp; 6285 stp->st_access_bmap = 0; 6286 stp->st_deny_bmap = open_stp->st_deny_bmap; 6287 stp->st_openstp = open_stp; 6288 list_add(&stp->st_locks, &open_stp->st_locks); 6289 list_add(&stp->st_perstateowner, &lo->lo_owner.so_stateids); 6290 list_add(&stp->st_perfile, &fp->fi_stateids); 6291 out_unlock: 6292 spin_unlock(&fp->fi_lock); 6293 spin_unlock(&clp->cl_lock); 6294 if (retstp) { 6295 if (nfsd4_lock_ol_stateid(retstp) != nfs_ok) { 6296 nfs4_put_stid(&retstp->st_stid); 6297 goto retry; 6298 } 6299 /* To keep mutex tracking happy */ 6300 mutex_unlock(&stp->st_mutex); 6301 stp = retstp; 6302 } 6303 return stp; 6304 } 6305 6306 static struct nfs4_ol_stateid * 6307 find_or_create_lock_stateid(struct nfs4_lockowner *lo, struct nfs4_file *fi, 6308 struct inode *inode, struct nfs4_ol_stateid *ost, 6309 bool *new) 6310 { 6311 struct nfs4_stid *ns = NULL; 6312 struct nfs4_ol_stateid *lst; 6313 struct nfs4_openowner *oo = openowner(ost->st_stateowner); 6314 struct nfs4_client *clp = oo->oo_owner.so_client; 6315 6316 *new = false; 6317 spin_lock(&clp->cl_lock); 6318 lst = find_lock_stateid(lo, fi); 6319 spin_unlock(&clp->cl_lock); 6320 if (lst != NULL) { 6321 if (nfsd4_lock_ol_stateid(lst) == nfs_ok) 6322 goto out; 6323 nfs4_put_stid(&lst->st_stid); 6324 } 6325 ns = nfs4_alloc_stid(clp, stateid_slab, nfs4_free_lock_stateid); 6326 if (ns == NULL) 6327 return NULL; 6328 6329 lst = init_lock_stateid(openlockstateid(ns), lo, fi, inode, ost); 6330 if (lst == openlockstateid(ns)) 6331 *new = true; 6332 else 6333 nfs4_put_stid(ns); 6334 out: 6335 return lst; 6336 } 6337 6338 static int 6339 check_lock_length(u64 offset, u64 length) 6340 { 6341 return ((length == 0) || ((length != NFS4_MAX_UINT64) && 6342 (length > ~offset))); 6343 } 6344 6345 static void get_lock_access(struct nfs4_ol_stateid *lock_stp, u32 access) 6346 { 6347 struct nfs4_file *fp = lock_stp->st_stid.sc_file; 6348 6349 lockdep_assert_held(&fp->fi_lock); 6350 6351 if (test_access(access, lock_stp)) 6352 return; 6353 __nfs4_file_get_access(fp, access); 6354 set_access(access, lock_stp); 6355 } 6356 6357 static __be32 6358 lookup_or_create_lock_state(struct nfsd4_compound_state *cstate, 6359 struct nfs4_ol_stateid *ost, 6360 struct nfsd4_lock *lock, 6361 struct nfs4_ol_stateid **plst, bool *new) 6362 { 6363 __be32 status; 6364 struct nfs4_file *fi = ost->st_stid.sc_file; 6365 struct nfs4_openowner *oo = openowner(ost->st_stateowner); 6366 struct nfs4_client *cl = oo->oo_owner.so_client; 6367 struct inode *inode = d_inode(cstate->current_fh.fh_dentry); 6368 struct nfs4_lockowner *lo; 6369 struct nfs4_ol_stateid *lst; 6370 unsigned int strhashval; 6371 6372 lo = find_lockowner_str(cl, &lock->lk_new_owner); 6373 if (!lo) { 6374 strhashval = ownerstr_hashval(&lock->lk_new_owner); 6375 lo = alloc_init_lock_stateowner(strhashval, cl, ost, lock); 6376 if (lo == NULL) 6377 return nfserr_jukebox; 6378 } else { 6379 /* with an existing lockowner, seqids must be the same */ 6380 status = nfserr_bad_seqid; 6381 if (!cstate->minorversion && 6382 lock->lk_new_lock_seqid != lo->lo_owner.so_seqid) 6383 goto out; 6384 } 6385 6386 lst = find_or_create_lock_stateid(lo, fi, inode, ost, new); 6387 if (lst == NULL) { 6388 status = nfserr_jukebox; 6389 goto out; 6390 } 6391 6392 status = nfs_ok; 6393 *plst = lst; 6394 out: 6395 nfs4_put_stateowner(&lo->lo_owner); 6396 return status; 6397 } 6398 6399 /* 6400 * LOCK operation 6401 */ 6402 __be32 6403 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 6404 union nfsd4_op_u *u) 6405 { 6406 struct nfsd4_lock *lock = &u->lock; 6407 struct nfs4_openowner *open_sop = NULL; 6408 struct nfs4_lockowner *lock_sop = NULL; 6409 struct nfs4_ol_stateid *lock_stp = NULL; 6410 struct nfs4_ol_stateid *open_stp = NULL; 6411 struct nfs4_file *fp; 6412 struct nfsd_file *nf = NULL; 6413 struct nfsd4_blocked_lock *nbl = NULL; 6414 struct file_lock *file_lock = NULL; 6415 struct file_lock *conflock = NULL; 6416 __be32 status = 0; 6417 int lkflg; 6418 int err; 6419 bool new = false; 6420 unsigned char fl_type; 6421 unsigned int fl_flags = FL_POSIX; 6422 struct net *net = SVC_NET(rqstp); 6423 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 6424 6425 dprintk("NFSD: nfsd4_lock: start=%Ld length=%Ld\n", 6426 (long long) lock->lk_offset, 6427 (long long) lock->lk_length); 6428 6429 if (check_lock_length(lock->lk_offset, lock->lk_length)) 6430 return nfserr_inval; 6431 6432 if ((status = fh_verify(rqstp, &cstate->current_fh, 6433 S_IFREG, NFSD_MAY_LOCK))) { 6434 dprintk("NFSD: nfsd4_lock: permission denied!\n"); 6435 return status; 6436 } 6437 6438 if (lock->lk_is_new) { 6439 if (nfsd4_has_session(cstate)) 6440 /* See rfc 5661 18.10.3: given clientid is ignored: */ 6441 memcpy(&lock->lk_new_clientid, 6442 &cstate->session->se_client->cl_clientid, 6443 sizeof(clientid_t)); 6444 6445 status = nfserr_stale_clientid; 6446 if (STALE_CLIENTID(&lock->lk_new_clientid, nn)) 6447 goto out; 6448 6449 /* validate and update open stateid and open seqid */ 6450 status = nfs4_preprocess_confirmed_seqid_op(cstate, 6451 lock->lk_new_open_seqid, 6452 &lock->lk_new_open_stateid, 6453 &open_stp, nn); 6454 if (status) 6455 goto out; 6456 mutex_unlock(&open_stp->st_mutex); 6457 open_sop = openowner(open_stp->st_stateowner); 6458 status = nfserr_bad_stateid; 6459 if (!same_clid(&open_sop->oo_owner.so_client->cl_clientid, 6460 &lock->lk_new_clientid)) 6461 goto out; 6462 status = lookup_or_create_lock_state(cstate, open_stp, lock, 6463 &lock_stp, &new); 6464 } else { 6465 status = nfs4_preprocess_seqid_op(cstate, 6466 lock->lk_old_lock_seqid, 6467 &lock->lk_old_lock_stateid, 6468 NFS4_LOCK_STID, &lock_stp, nn); 6469 } 6470 if (status) 6471 goto out; 6472 lock_sop = lockowner(lock_stp->st_stateowner); 6473 6474 lkflg = setlkflg(lock->lk_type); 6475 status = nfs4_check_openmode(lock_stp, lkflg); 6476 if (status) 6477 goto out; 6478 6479 status = nfserr_grace; 6480 if (locks_in_grace(net) && !lock->lk_reclaim) 6481 goto out; 6482 status = nfserr_no_grace; 6483 if (!locks_in_grace(net) && lock->lk_reclaim) 6484 goto out; 6485 6486 fp = lock_stp->st_stid.sc_file; 6487 switch (lock->lk_type) { 6488 case NFS4_READW_LT: 6489 if (nfsd4_has_session(cstate)) 6490 fl_flags |= FL_SLEEP; 6491 /* Fallthrough */ 6492 case NFS4_READ_LT: 6493 spin_lock(&fp->fi_lock); 6494 nf = find_readable_file_locked(fp); 6495 if (nf) 6496 get_lock_access(lock_stp, NFS4_SHARE_ACCESS_READ); 6497 spin_unlock(&fp->fi_lock); 6498 fl_type = F_RDLCK; 6499 break; 6500 case NFS4_WRITEW_LT: 6501 if (nfsd4_has_session(cstate)) 6502 fl_flags |= FL_SLEEP; 6503 /* Fallthrough */ 6504 case NFS4_WRITE_LT: 6505 spin_lock(&fp->fi_lock); 6506 nf = find_writeable_file_locked(fp); 6507 if (nf) 6508 get_lock_access(lock_stp, NFS4_SHARE_ACCESS_WRITE); 6509 spin_unlock(&fp->fi_lock); 6510 fl_type = F_WRLCK; 6511 break; 6512 default: 6513 status = nfserr_inval; 6514 goto out; 6515 } 6516 6517 if (!nf) { 6518 status = nfserr_openmode; 6519 goto out; 6520 } 6521 6522 nbl = find_or_allocate_block(lock_sop, &fp->fi_fhandle, nn); 6523 if (!nbl) { 6524 dprintk("NFSD: %s: unable to allocate block!\n", __func__); 6525 status = nfserr_jukebox; 6526 goto out; 6527 } 6528 6529 file_lock = &nbl->nbl_lock; 6530 file_lock->fl_type = fl_type; 6531 file_lock->fl_owner = (fl_owner_t)lockowner(nfs4_get_stateowner(&lock_sop->lo_owner)); 6532 file_lock->fl_pid = current->tgid; 6533 file_lock->fl_file = nf->nf_file; 6534 file_lock->fl_flags = fl_flags; 6535 file_lock->fl_lmops = &nfsd_posix_mng_ops; 6536 file_lock->fl_start = lock->lk_offset; 6537 file_lock->fl_end = last_byte_offset(lock->lk_offset, lock->lk_length); 6538 nfs4_transform_lock_offset(file_lock); 6539 6540 conflock = locks_alloc_lock(); 6541 if (!conflock) { 6542 dprintk("NFSD: %s: unable to allocate lock!\n", __func__); 6543 status = nfserr_jukebox; 6544 goto out; 6545 } 6546 6547 if (fl_flags & FL_SLEEP) { 6548 nbl->nbl_time = jiffies; 6549 spin_lock(&nn->blocked_locks_lock); 6550 list_add_tail(&nbl->nbl_list, &lock_sop->lo_blocked); 6551 list_add_tail(&nbl->nbl_lru, &nn->blocked_locks_lru); 6552 spin_unlock(&nn->blocked_locks_lock); 6553 } 6554 6555 err = vfs_lock_file(nf->nf_file, F_SETLK, file_lock, conflock); 6556 switch (err) { 6557 case 0: /* success! */ 6558 nfs4_inc_and_copy_stateid(&lock->lk_resp_stateid, &lock_stp->st_stid); 6559 status = 0; 6560 if (lock->lk_reclaim) 6561 nn->somebody_reclaimed = true; 6562 break; 6563 case FILE_LOCK_DEFERRED: 6564 nbl = NULL; 6565 /* Fallthrough */ 6566 case -EAGAIN: /* conflock holds conflicting lock */ 6567 status = nfserr_denied; 6568 dprintk("NFSD: nfsd4_lock: conflicting lock found!\n"); 6569 nfs4_set_lock_denied(conflock, &lock->lk_denied); 6570 break; 6571 case -EDEADLK: 6572 status = nfserr_deadlock; 6573 break; 6574 default: 6575 dprintk("NFSD: nfsd4_lock: vfs_lock_file() failed! status %d\n",err); 6576 status = nfserrno(err); 6577 break; 6578 } 6579 out: 6580 if (nbl) { 6581 /* dequeue it if we queued it before */ 6582 if (fl_flags & FL_SLEEP) { 6583 spin_lock(&nn->blocked_locks_lock); 6584 list_del_init(&nbl->nbl_list); 6585 list_del_init(&nbl->nbl_lru); 6586 spin_unlock(&nn->blocked_locks_lock); 6587 } 6588 free_blocked_lock(nbl); 6589 } 6590 if (nf) 6591 nfsd_file_put(nf); 6592 if (lock_stp) { 6593 /* Bump seqid manually if the 4.0 replay owner is openowner */ 6594 if (cstate->replay_owner && 6595 cstate->replay_owner != &lock_sop->lo_owner && 6596 seqid_mutating_err(ntohl(status))) 6597 lock_sop->lo_owner.so_seqid++; 6598 6599 /* 6600 * If this is a new, never-before-used stateid, and we are 6601 * returning an error, then just go ahead and release it. 6602 */ 6603 if (status && new) 6604 release_lock_stateid(lock_stp); 6605 6606 mutex_unlock(&lock_stp->st_mutex); 6607 6608 nfs4_put_stid(&lock_stp->st_stid); 6609 } 6610 if (open_stp) 6611 nfs4_put_stid(&open_stp->st_stid); 6612 nfsd4_bump_seqid(cstate, status); 6613 if (conflock) 6614 locks_free_lock(conflock); 6615 return status; 6616 } 6617 6618 /* 6619 * The NFSv4 spec allows a client to do a LOCKT without holding an OPEN, 6620 * so we do a temporary open here just to get an open file to pass to 6621 * vfs_test_lock. (Arguably perhaps test_lock should be done with an 6622 * inode operation.) 6623 */ 6624 static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file_lock *lock) 6625 { 6626 struct nfsd_file *nf; 6627 __be32 err = nfsd_file_acquire(rqstp, fhp, NFSD_MAY_READ, &nf); 6628 if (!err) { 6629 err = nfserrno(vfs_test_lock(nf->nf_file, lock)); 6630 nfsd_file_put(nf); 6631 } 6632 return err; 6633 } 6634 6635 /* 6636 * LOCKT operation 6637 */ 6638 __be32 6639 nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 6640 union nfsd4_op_u *u) 6641 { 6642 struct nfsd4_lockt *lockt = &u->lockt; 6643 struct file_lock *file_lock = NULL; 6644 struct nfs4_lockowner *lo = NULL; 6645 __be32 status; 6646 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 6647 6648 if (locks_in_grace(SVC_NET(rqstp))) 6649 return nfserr_grace; 6650 6651 if (check_lock_length(lockt->lt_offset, lockt->lt_length)) 6652 return nfserr_inval; 6653 6654 if (!nfsd4_has_session(cstate)) { 6655 status = lookup_clientid(&lockt->lt_clientid, cstate, nn); 6656 if (status) 6657 goto out; 6658 } 6659 6660 if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) 6661 goto out; 6662 6663 file_lock = locks_alloc_lock(); 6664 if (!file_lock) { 6665 dprintk("NFSD: %s: unable to allocate lock!\n", __func__); 6666 status = nfserr_jukebox; 6667 goto out; 6668 } 6669 6670 switch (lockt->lt_type) { 6671 case NFS4_READ_LT: 6672 case NFS4_READW_LT: 6673 file_lock->fl_type = F_RDLCK; 6674 break; 6675 case NFS4_WRITE_LT: 6676 case NFS4_WRITEW_LT: 6677 file_lock->fl_type = F_WRLCK; 6678 break; 6679 default: 6680 dprintk("NFSD: nfs4_lockt: bad lock type!\n"); 6681 status = nfserr_inval; 6682 goto out; 6683 } 6684 6685 lo = find_lockowner_str(cstate->clp, &lockt->lt_owner); 6686 if (lo) 6687 file_lock->fl_owner = (fl_owner_t)lo; 6688 file_lock->fl_pid = current->tgid; 6689 file_lock->fl_flags = FL_POSIX; 6690 6691 file_lock->fl_start = lockt->lt_offset; 6692 file_lock->fl_end = last_byte_offset(lockt->lt_offset, lockt->lt_length); 6693 6694 nfs4_transform_lock_offset(file_lock); 6695 6696 status = nfsd_test_lock(rqstp, &cstate->current_fh, file_lock); 6697 if (status) 6698 goto out; 6699 6700 if (file_lock->fl_type != F_UNLCK) { 6701 status = nfserr_denied; 6702 nfs4_set_lock_denied(file_lock, &lockt->lt_denied); 6703 } 6704 out: 6705 if (lo) 6706 nfs4_put_stateowner(&lo->lo_owner); 6707 if (file_lock) 6708 locks_free_lock(file_lock); 6709 return status; 6710 } 6711 6712 __be32 6713 nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, 6714 union nfsd4_op_u *u) 6715 { 6716 struct nfsd4_locku *locku = &u->locku; 6717 struct nfs4_ol_stateid *stp; 6718 struct nfsd_file *nf = NULL; 6719 struct file_lock *file_lock = NULL; 6720 __be32 status; 6721 int err; 6722 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 6723 6724 dprintk("NFSD: nfsd4_locku: start=%Ld length=%Ld\n", 6725 (long long) locku->lu_offset, 6726 (long long) locku->lu_length); 6727 6728 if (check_lock_length(locku->lu_offset, locku->lu_length)) 6729 return nfserr_inval; 6730 6731 status = nfs4_preprocess_seqid_op(cstate, locku->lu_seqid, 6732 &locku->lu_stateid, NFS4_LOCK_STID, 6733 &stp, nn); 6734 if (status) 6735 goto out; 6736 nf = find_any_file(stp->st_stid.sc_file); 6737 if (!nf) { 6738 status = nfserr_lock_range; 6739 goto put_stateid; 6740 } 6741 file_lock = locks_alloc_lock(); 6742 if (!file_lock) { 6743 dprintk("NFSD: %s: unable to allocate lock!\n", __func__); 6744 status = nfserr_jukebox; 6745 goto put_file; 6746 } 6747 6748 file_lock->fl_type = F_UNLCK; 6749 file_lock->fl_owner = (fl_owner_t)lockowner(nfs4_get_stateowner(stp->st_stateowner)); 6750 file_lock->fl_pid = current->tgid; 6751 file_lock->fl_file = nf->nf_file; 6752 file_lock->fl_flags = FL_POSIX; 6753 file_lock->fl_lmops = &nfsd_posix_mng_ops; 6754 file_lock->fl_start = locku->lu_offset; 6755 6756 file_lock->fl_end = last_byte_offset(locku->lu_offset, 6757 locku->lu_length); 6758 nfs4_transform_lock_offset(file_lock); 6759 6760 err = vfs_lock_file(nf->nf_file, F_SETLK, file_lock, NULL); 6761 if (err) { 6762 dprintk("NFSD: nfs4_locku: vfs_lock_file failed!\n"); 6763 goto out_nfserr; 6764 } 6765 nfs4_inc_and_copy_stateid(&locku->lu_stateid, &stp->st_stid); 6766 put_file: 6767 nfsd_file_put(nf); 6768 put_stateid: 6769 mutex_unlock(&stp->st_mutex); 6770 nfs4_put_stid(&stp->st_stid); 6771 out: 6772 nfsd4_bump_seqid(cstate, status); 6773 if (file_lock) 6774 locks_free_lock(file_lock); 6775 return status; 6776 6777 out_nfserr: 6778 status = nfserrno(err); 6779 goto put_file; 6780 } 6781 6782 /* 6783 * returns 6784 * true: locks held by lockowner 6785 * false: no locks held by lockowner 6786 */ 6787 static bool 6788 check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner) 6789 { 6790 struct file_lock *fl; 6791 int status = false; 6792 struct nfsd_file *nf = find_any_file(fp); 6793 struct inode *inode; 6794 struct file_lock_context *flctx; 6795 6796 if (!nf) { 6797 /* Any valid lock stateid should have some sort of access */ 6798 WARN_ON_ONCE(1); 6799 return status; 6800 } 6801 6802 inode = locks_inode(nf->nf_file); 6803 flctx = inode->i_flctx; 6804 6805 if (flctx && !list_empty_careful(&flctx->flc_posix)) { 6806 spin_lock(&flctx->flc_lock); 6807 list_for_each_entry(fl, &flctx->flc_posix, fl_list) { 6808 if (fl->fl_owner == (fl_owner_t)lowner) { 6809 status = true; 6810 break; 6811 } 6812 } 6813 spin_unlock(&flctx->flc_lock); 6814 } 6815 nfsd_file_put(nf); 6816 return status; 6817 } 6818 6819 __be32 6820 nfsd4_release_lockowner(struct svc_rqst *rqstp, 6821 struct nfsd4_compound_state *cstate, 6822 union nfsd4_op_u *u) 6823 { 6824 struct nfsd4_release_lockowner *rlockowner = &u->release_lockowner; 6825 clientid_t *clid = &rlockowner->rl_clientid; 6826 struct nfs4_stateowner *sop; 6827 struct nfs4_lockowner *lo = NULL; 6828 struct nfs4_ol_stateid *stp; 6829 struct xdr_netobj *owner = &rlockowner->rl_owner; 6830 unsigned int hashval = ownerstr_hashval(owner); 6831 __be32 status; 6832 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); 6833 struct nfs4_client *clp; 6834 LIST_HEAD (reaplist); 6835 6836 dprintk("nfsd4_release_lockowner clientid: (%08x/%08x):\n", 6837 clid->cl_boot, clid->cl_id); 6838 6839 status = lookup_clientid(clid, cstate, nn); 6840 if (status) 6841 return status; 6842 6843 clp = cstate->clp; 6844 /* Find the matching lock stateowner */ 6845 spin_lock(&clp->cl_lock); 6846 list_for_each_entry(sop, &clp->cl_ownerstr_hashtbl[hashval], 6847 so_strhash) { 6848 6849 if (sop->so_is_open_owner || !same_owner_str(sop, owner)) 6850 continue; 6851 6852 /* see if there are still any locks associated with it */ 6853 lo = lockowner(sop); 6854 list_for_each_entry(stp, &sop->so_stateids, st_perstateowner) { 6855 if (check_for_locks(stp->st_stid.sc_file, lo)) { 6856 status = nfserr_locks_held; 6857 spin_unlock(&clp->cl_lock); 6858 return status; 6859 } 6860 } 6861 6862 nfs4_get_stateowner(sop); 6863 break; 6864 } 6865 if (!lo) { 6866 spin_unlock(&clp->cl_lock); 6867 return status; 6868 } 6869 6870 unhash_lockowner_locked(lo); 6871 while (!list_empty(&lo->lo_owner.so_stateids)) { 6872 stp = list_first_entry(&lo->lo_owner.so_stateids, 6873 struct nfs4_ol_stateid, 6874 st_perstateowner); 6875 WARN_ON(!unhash_lock_stateid(stp)); 6876 put_ol_stateid_locked(stp, &reaplist); 6877 } 6878 spin_unlock(&clp->cl_lock); 6879 free_ol_stateid_reaplist(&reaplist); 6880 remove_blocked_locks(lo); 6881 nfs4_put_stateowner(&lo->lo_owner); 6882 6883 return status; 6884 } 6885 6886 static inline struct nfs4_client_reclaim * 6887 alloc_reclaim(void) 6888 { 6889 return kmalloc(sizeof(struct nfs4_client_reclaim), GFP_KERNEL); 6890 } 6891 6892 bool 6893 nfs4_has_reclaimed_state(struct xdr_netobj name, struct nfsd_net *nn) 6894 { 6895 struct nfs4_client_reclaim *crp; 6896 6897 crp = nfsd4_find_reclaim_client(name, nn); 6898 return (crp && crp->cr_clp); 6899 } 6900 6901 /* 6902 * failure => all reset bets are off, nfserr_no_grace... 6903 * 6904 * The caller is responsible for freeing name.data if NULL is returned (it 6905 * will be freed in nfs4_remove_reclaim_record in the normal case). 6906 */ 6907 struct nfs4_client_reclaim * 6908 nfs4_client_to_reclaim(struct xdr_netobj name, struct xdr_netobj princhash, 6909 struct nfsd_net *nn) 6910 { 6911 unsigned int strhashval; 6912 struct nfs4_client_reclaim *crp; 6913 6914 dprintk("NFSD nfs4_client_to_reclaim NAME: %.*s\n", name.len, name.data); 6915 crp = alloc_reclaim(); 6916 if (crp) { 6917 strhashval = clientstr_hashval(name); 6918 INIT_LIST_HEAD(&crp->cr_strhash); 6919 list_add(&crp->cr_strhash, &nn->reclaim_str_hashtbl[strhashval]); 6920 crp->cr_name.data = name.data; 6921 crp->cr_name.len = name.len; 6922 crp->cr_princhash.data = princhash.data; 6923 crp->cr_princhash.len = princhash.len; 6924 crp->cr_clp = NULL; 6925 nn->reclaim_str_hashtbl_size++; 6926 } 6927 return crp; 6928 } 6929 6930 void 6931 nfs4_remove_reclaim_record(struct nfs4_client_reclaim *crp, struct nfsd_net *nn) 6932 { 6933 list_del(&crp->cr_strhash); 6934 kfree(crp->cr_name.data); 6935 kfree(crp->cr_princhash.data); 6936 kfree(crp); 6937 nn->reclaim_str_hashtbl_size--; 6938 } 6939 6940 void 6941 nfs4_release_reclaim(struct nfsd_net *nn) 6942 { 6943 struct nfs4_client_reclaim *crp = NULL; 6944 int i; 6945 6946 for (i = 0; i < CLIENT_HASH_SIZE; i++) { 6947 while (!list_empty(&nn->reclaim_str_hashtbl[i])) { 6948 crp = list_entry(nn->reclaim_str_hashtbl[i].next, 6949 struct nfs4_client_reclaim, cr_strhash); 6950 nfs4_remove_reclaim_record(crp, nn); 6951 } 6952 } 6953 WARN_ON_ONCE(nn->reclaim_str_hashtbl_size); 6954 } 6955 6956 /* 6957 * called from OPEN, CLAIM_PREVIOUS with a new clientid. */ 6958 struct nfs4_client_reclaim * 6959 nfsd4_find_reclaim_client(struct xdr_netobj name, struct nfsd_net *nn) 6960 { 6961 unsigned int strhashval; 6962 struct nfs4_client_reclaim *crp = NULL; 6963 6964 dprintk("NFSD: nfs4_find_reclaim_client for name %.*s\n", name.len, name.data); 6965 6966 strhashval = clientstr_hashval(name); 6967 list_for_each_entry(crp, &nn->reclaim_str_hashtbl[strhashval], cr_strhash) { 6968 if (compare_blob(&crp->cr_name, &name) == 0) { 6969 return crp; 6970 } 6971 } 6972 return NULL; 6973 } 6974 6975 /* 6976 * Called from OPEN. Look for clientid in reclaim list. 6977 */ 6978 __be32 6979 nfs4_check_open_reclaim(clientid_t *clid, 6980 struct nfsd4_compound_state *cstate, 6981 struct nfsd_net *nn) 6982 { 6983 __be32 status; 6984 6985 /* find clientid in conf_id_hashtbl */ 6986 status = lookup_clientid(clid, cstate, nn); 6987 if (status) 6988 return nfserr_reclaim_bad; 6989 6990 if (test_bit(NFSD4_CLIENT_RECLAIM_COMPLETE, &cstate->clp->cl_flags)) 6991 return nfserr_no_grace; 6992 6993 if (nfsd4_client_record_check(cstate->clp)) 6994 return nfserr_reclaim_bad; 6995 6996 return nfs_ok; 6997 } 6998 6999 #ifdef CONFIG_NFSD_FAULT_INJECTION 7000 static inline void 7001 put_client(struct nfs4_client *clp) 7002 { 7003 atomic_dec(&clp->cl_rpc_users); 7004 } 7005 7006 static struct nfs4_client * 7007 nfsd_find_client(struct sockaddr_storage *addr, size_t addr_size) 7008 { 7009 struct nfs4_client *clp; 7010 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7011 nfsd_net_id); 7012 7013 if (!nfsd_netns_ready(nn)) 7014 return NULL; 7015 7016 list_for_each_entry(clp, &nn->client_lru, cl_lru) { 7017 if (memcmp(&clp->cl_addr, addr, addr_size) == 0) 7018 return clp; 7019 } 7020 return NULL; 7021 } 7022 7023 u64 7024 nfsd_inject_print_clients(void) 7025 { 7026 struct nfs4_client *clp; 7027 u64 count = 0; 7028 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7029 nfsd_net_id); 7030 char buf[INET6_ADDRSTRLEN]; 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 rpc_ntop((struct sockaddr *)&clp->cl_addr, buf, sizeof(buf)); 7038 pr_info("NFS Client: %s\n", buf); 7039 ++count; 7040 } 7041 spin_unlock(&nn->client_lock); 7042 7043 return count; 7044 } 7045 7046 u64 7047 nfsd_inject_forget_client(struct sockaddr_storage *addr, size_t addr_size) 7048 { 7049 u64 count = 0; 7050 struct nfs4_client *clp; 7051 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7052 nfsd_net_id); 7053 7054 if (!nfsd_netns_ready(nn)) 7055 return count; 7056 7057 spin_lock(&nn->client_lock); 7058 clp = nfsd_find_client(addr, addr_size); 7059 if (clp) { 7060 if (mark_client_expired_locked(clp) == nfs_ok) 7061 ++count; 7062 else 7063 clp = NULL; 7064 } 7065 spin_unlock(&nn->client_lock); 7066 7067 if (clp) 7068 expire_client(clp); 7069 7070 return count; 7071 } 7072 7073 u64 7074 nfsd_inject_forget_clients(u64 max) 7075 { 7076 u64 count = 0; 7077 struct nfs4_client *clp, *next; 7078 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7079 nfsd_net_id); 7080 LIST_HEAD(reaplist); 7081 7082 if (!nfsd_netns_ready(nn)) 7083 return count; 7084 7085 spin_lock(&nn->client_lock); 7086 list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) { 7087 if (mark_client_expired_locked(clp) == nfs_ok) { 7088 list_add(&clp->cl_lru, &reaplist); 7089 if (max != 0 && ++count >= max) 7090 break; 7091 } 7092 } 7093 spin_unlock(&nn->client_lock); 7094 7095 list_for_each_entry_safe(clp, next, &reaplist, cl_lru) 7096 expire_client(clp); 7097 7098 return count; 7099 } 7100 7101 static void nfsd_print_count(struct nfs4_client *clp, unsigned int count, 7102 const char *type) 7103 { 7104 char buf[INET6_ADDRSTRLEN]; 7105 rpc_ntop((struct sockaddr *)&clp->cl_addr, buf, sizeof(buf)); 7106 printk(KERN_INFO "NFS Client: %s has %u %s\n", buf, count, type); 7107 } 7108 7109 static void 7110 nfsd_inject_add_lock_to_list(struct nfs4_ol_stateid *lst, 7111 struct list_head *collect) 7112 { 7113 struct nfs4_client *clp = lst->st_stid.sc_client; 7114 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7115 nfsd_net_id); 7116 7117 if (!collect) 7118 return; 7119 7120 lockdep_assert_held(&nn->client_lock); 7121 atomic_inc(&clp->cl_rpc_users); 7122 list_add(&lst->st_locks, collect); 7123 } 7124 7125 static u64 nfsd_foreach_client_lock(struct nfs4_client *clp, u64 max, 7126 struct list_head *collect, 7127 bool (*func)(struct nfs4_ol_stateid *)) 7128 { 7129 struct nfs4_openowner *oop; 7130 struct nfs4_ol_stateid *stp, *st_next; 7131 struct nfs4_ol_stateid *lst, *lst_next; 7132 u64 count = 0; 7133 7134 spin_lock(&clp->cl_lock); 7135 list_for_each_entry(oop, &clp->cl_openowners, oo_perclient) { 7136 list_for_each_entry_safe(stp, st_next, 7137 &oop->oo_owner.so_stateids, st_perstateowner) { 7138 list_for_each_entry_safe(lst, lst_next, 7139 &stp->st_locks, st_locks) { 7140 if (func) { 7141 if (func(lst)) 7142 nfsd_inject_add_lock_to_list(lst, 7143 collect); 7144 } 7145 ++count; 7146 /* 7147 * Despite the fact that these functions deal 7148 * with 64-bit integers for "count", we must 7149 * ensure that it doesn't blow up the 7150 * clp->cl_rpc_users. Throw a warning if we 7151 * start to approach INT_MAX here. 7152 */ 7153 WARN_ON_ONCE(count == (INT_MAX / 2)); 7154 if (count == max) 7155 goto out; 7156 } 7157 } 7158 } 7159 out: 7160 spin_unlock(&clp->cl_lock); 7161 7162 return count; 7163 } 7164 7165 static u64 7166 nfsd_collect_client_locks(struct nfs4_client *clp, struct list_head *collect, 7167 u64 max) 7168 { 7169 return nfsd_foreach_client_lock(clp, max, collect, unhash_lock_stateid); 7170 } 7171 7172 static u64 7173 nfsd_print_client_locks(struct nfs4_client *clp) 7174 { 7175 u64 count = nfsd_foreach_client_lock(clp, 0, NULL, NULL); 7176 nfsd_print_count(clp, count, "locked files"); 7177 return count; 7178 } 7179 7180 u64 7181 nfsd_inject_print_locks(void) 7182 { 7183 struct nfs4_client *clp; 7184 u64 count = 0; 7185 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7186 nfsd_net_id); 7187 7188 if (!nfsd_netns_ready(nn)) 7189 return 0; 7190 7191 spin_lock(&nn->client_lock); 7192 list_for_each_entry(clp, &nn->client_lru, cl_lru) 7193 count += nfsd_print_client_locks(clp); 7194 spin_unlock(&nn->client_lock); 7195 7196 return count; 7197 } 7198 7199 static void 7200 nfsd_reap_locks(struct list_head *reaplist) 7201 { 7202 struct nfs4_client *clp; 7203 struct nfs4_ol_stateid *stp, *next; 7204 7205 list_for_each_entry_safe(stp, next, reaplist, st_locks) { 7206 list_del_init(&stp->st_locks); 7207 clp = stp->st_stid.sc_client; 7208 nfs4_put_stid(&stp->st_stid); 7209 put_client(clp); 7210 } 7211 } 7212 7213 u64 7214 nfsd_inject_forget_client_locks(struct sockaddr_storage *addr, size_t addr_size) 7215 { 7216 unsigned int count = 0; 7217 struct nfs4_client *clp; 7218 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7219 nfsd_net_id); 7220 LIST_HEAD(reaplist); 7221 7222 if (!nfsd_netns_ready(nn)) 7223 return count; 7224 7225 spin_lock(&nn->client_lock); 7226 clp = nfsd_find_client(addr, addr_size); 7227 if (clp) 7228 count = nfsd_collect_client_locks(clp, &reaplist, 0); 7229 spin_unlock(&nn->client_lock); 7230 nfsd_reap_locks(&reaplist); 7231 return count; 7232 } 7233 7234 u64 7235 nfsd_inject_forget_locks(u64 max) 7236 { 7237 u64 count = 0; 7238 struct nfs4_client *clp; 7239 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7240 nfsd_net_id); 7241 LIST_HEAD(reaplist); 7242 7243 if (!nfsd_netns_ready(nn)) 7244 return count; 7245 7246 spin_lock(&nn->client_lock); 7247 list_for_each_entry(clp, &nn->client_lru, cl_lru) { 7248 count += nfsd_collect_client_locks(clp, &reaplist, max - count); 7249 if (max != 0 && count >= max) 7250 break; 7251 } 7252 spin_unlock(&nn->client_lock); 7253 nfsd_reap_locks(&reaplist); 7254 return count; 7255 } 7256 7257 static u64 7258 nfsd_foreach_client_openowner(struct nfs4_client *clp, u64 max, 7259 struct list_head *collect, 7260 void (*func)(struct nfs4_openowner *)) 7261 { 7262 struct nfs4_openowner *oop, *next; 7263 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7264 nfsd_net_id); 7265 u64 count = 0; 7266 7267 lockdep_assert_held(&nn->client_lock); 7268 7269 spin_lock(&clp->cl_lock); 7270 list_for_each_entry_safe(oop, next, &clp->cl_openowners, oo_perclient) { 7271 if (func) { 7272 func(oop); 7273 if (collect) { 7274 atomic_inc(&clp->cl_rpc_users); 7275 list_add(&oop->oo_perclient, collect); 7276 } 7277 } 7278 ++count; 7279 /* 7280 * Despite the fact that these functions deal with 7281 * 64-bit integers for "count", we must ensure that 7282 * it doesn't blow up the clp->cl_rpc_users. Throw a 7283 * warning if we start to approach INT_MAX here. 7284 */ 7285 WARN_ON_ONCE(count == (INT_MAX / 2)); 7286 if (count == max) 7287 break; 7288 } 7289 spin_unlock(&clp->cl_lock); 7290 7291 return count; 7292 } 7293 7294 static u64 7295 nfsd_print_client_openowners(struct nfs4_client *clp) 7296 { 7297 u64 count = nfsd_foreach_client_openowner(clp, 0, NULL, NULL); 7298 7299 nfsd_print_count(clp, count, "openowners"); 7300 return count; 7301 } 7302 7303 static u64 7304 nfsd_collect_client_openowners(struct nfs4_client *clp, 7305 struct list_head *collect, u64 max) 7306 { 7307 return nfsd_foreach_client_openowner(clp, max, collect, 7308 unhash_openowner_locked); 7309 } 7310 7311 u64 7312 nfsd_inject_print_openowners(void) 7313 { 7314 struct nfs4_client *clp; 7315 u64 count = 0; 7316 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7317 nfsd_net_id); 7318 7319 if (!nfsd_netns_ready(nn)) 7320 return 0; 7321 7322 spin_lock(&nn->client_lock); 7323 list_for_each_entry(clp, &nn->client_lru, cl_lru) 7324 count += nfsd_print_client_openowners(clp); 7325 spin_unlock(&nn->client_lock); 7326 7327 return count; 7328 } 7329 7330 static void 7331 nfsd_reap_openowners(struct list_head *reaplist) 7332 { 7333 struct nfs4_client *clp; 7334 struct nfs4_openowner *oop, *next; 7335 7336 list_for_each_entry_safe(oop, next, reaplist, oo_perclient) { 7337 list_del_init(&oop->oo_perclient); 7338 clp = oop->oo_owner.so_client; 7339 release_openowner(oop); 7340 put_client(clp); 7341 } 7342 } 7343 7344 u64 7345 nfsd_inject_forget_client_openowners(struct sockaddr_storage *addr, 7346 size_t addr_size) 7347 { 7348 unsigned int count = 0; 7349 struct nfs4_client *clp; 7350 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7351 nfsd_net_id); 7352 LIST_HEAD(reaplist); 7353 7354 if (!nfsd_netns_ready(nn)) 7355 return count; 7356 7357 spin_lock(&nn->client_lock); 7358 clp = nfsd_find_client(addr, addr_size); 7359 if (clp) 7360 count = nfsd_collect_client_openowners(clp, &reaplist, 0); 7361 spin_unlock(&nn->client_lock); 7362 nfsd_reap_openowners(&reaplist); 7363 return count; 7364 } 7365 7366 u64 7367 nfsd_inject_forget_openowners(u64 max) 7368 { 7369 u64 count = 0; 7370 struct nfs4_client *clp; 7371 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7372 nfsd_net_id); 7373 LIST_HEAD(reaplist); 7374 7375 if (!nfsd_netns_ready(nn)) 7376 return count; 7377 7378 spin_lock(&nn->client_lock); 7379 list_for_each_entry(clp, &nn->client_lru, cl_lru) { 7380 count += nfsd_collect_client_openowners(clp, &reaplist, 7381 max - count); 7382 if (max != 0 && count >= max) 7383 break; 7384 } 7385 spin_unlock(&nn->client_lock); 7386 nfsd_reap_openowners(&reaplist); 7387 return count; 7388 } 7389 7390 static u64 nfsd_find_all_delegations(struct nfs4_client *clp, u64 max, 7391 struct list_head *victims) 7392 { 7393 struct nfs4_delegation *dp, *next; 7394 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7395 nfsd_net_id); 7396 u64 count = 0; 7397 7398 lockdep_assert_held(&nn->client_lock); 7399 7400 spin_lock(&state_lock); 7401 list_for_each_entry_safe(dp, next, &clp->cl_delegations, dl_perclnt) { 7402 if (victims) { 7403 /* 7404 * It's not safe to mess with delegations that have a 7405 * non-zero dl_time. They might have already been broken 7406 * and could be processed by the laundromat outside of 7407 * the state_lock. Just leave them be. 7408 */ 7409 if (dp->dl_time != 0) 7410 continue; 7411 7412 atomic_inc(&clp->cl_rpc_users); 7413 WARN_ON(!unhash_delegation_locked(dp)); 7414 list_add(&dp->dl_recall_lru, victims); 7415 } 7416 ++count; 7417 /* 7418 * Despite the fact that these functions deal with 7419 * 64-bit integers for "count", we must ensure that 7420 * it doesn't blow up the clp->cl_rpc_users. Throw a 7421 * warning if we start to approach INT_MAX here. 7422 */ 7423 WARN_ON_ONCE(count == (INT_MAX / 2)); 7424 if (count == max) 7425 break; 7426 } 7427 spin_unlock(&state_lock); 7428 return count; 7429 } 7430 7431 static u64 7432 nfsd_print_client_delegations(struct nfs4_client *clp) 7433 { 7434 u64 count = nfsd_find_all_delegations(clp, 0, NULL); 7435 7436 nfsd_print_count(clp, count, "delegations"); 7437 return count; 7438 } 7439 7440 u64 7441 nfsd_inject_print_delegations(void) 7442 { 7443 struct nfs4_client *clp; 7444 u64 count = 0; 7445 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7446 nfsd_net_id); 7447 7448 if (!nfsd_netns_ready(nn)) 7449 return 0; 7450 7451 spin_lock(&nn->client_lock); 7452 list_for_each_entry(clp, &nn->client_lru, cl_lru) 7453 count += nfsd_print_client_delegations(clp); 7454 spin_unlock(&nn->client_lock); 7455 7456 return count; 7457 } 7458 7459 static void 7460 nfsd_forget_delegations(struct list_head *reaplist) 7461 { 7462 struct nfs4_client *clp; 7463 struct nfs4_delegation *dp, *next; 7464 7465 list_for_each_entry_safe(dp, next, reaplist, dl_recall_lru) { 7466 list_del_init(&dp->dl_recall_lru); 7467 clp = dp->dl_stid.sc_client; 7468 revoke_delegation(dp); 7469 put_client(clp); 7470 } 7471 } 7472 7473 u64 7474 nfsd_inject_forget_client_delegations(struct sockaddr_storage *addr, 7475 size_t addr_size) 7476 { 7477 u64 count = 0; 7478 struct nfs4_client *clp; 7479 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7480 nfsd_net_id); 7481 LIST_HEAD(reaplist); 7482 7483 if (!nfsd_netns_ready(nn)) 7484 return count; 7485 7486 spin_lock(&nn->client_lock); 7487 clp = nfsd_find_client(addr, addr_size); 7488 if (clp) 7489 count = nfsd_find_all_delegations(clp, 0, &reaplist); 7490 spin_unlock(&nn->client_lock); 7491 7492 nfsd_forget_delegations(&reaplist); 7493 return count; 7494 } 7495 7496 u64 7497 nfsd_inject_forget_delegations(u64 max) 7498 { 7499 u64 count = 0; 7500 struct nfs4_client *clp; 7501 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7502 nfsd_net_id); 7503 LIST_HEAD(reaplist); 7504 7505 if (!nfsd_netns_ready(nn)) 7506 return count; 7507 7508 spin_lock(&nn->client_lock); 7509 list_for_each_entry(clp, &nn->client_lru, cl_lru) { 7510 count += nfsd_find_all_delegations(clp, max - count, &reaplist); 7511 if (max != 0 && count >= max) 7512 break; 7513 } 7514 spin_unlock(&nn->client_lock); 7515 nfsd_forget_delegations(&reaplist); 7516 return count; 7517 } 7518 7519 static void 7520 nfsd_recall_delegations(struct list_head *reaplist) 7521 { 7522 struct nfs4_client *clp; 7523 struct nfs4_delegation *dp, *next; 7524 7525 list_for_each_entry_safe(dp, next, reaplist, dl_recall_lru) { 7526 list_del_init(&dp->dl_recall_lru); 7527 clp = dp->dl_stid.sc_client; 7528 /* 7529 * We skipped all entries that had a zero dl_time before, 7530 * so we can now reset the dl_time back to 0. If a delegation 7531 * break comes in now, then it won't make any difference since 7532 * we're recalling it either way. 7533 */ 7534 spin_lock(&state_lock); 7535 dp->dl_time = 0; 7536 spin_unlock(&state_lock); 7537 nfsd_break_one_deleg(dp); 7538 put_client(clp); 7539 } 7540 } 7541 7542 u64 7543 nfsd_inject_recall_client_delegations(struct sockaddr_storage *addr, 7544 size_t addr_size) 7545 { 7546 u64 count = 0; 7547 struct nfs4_client *clp; 7548 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7549 nfsd_net_id); 7550 LIST_HEAD(reaplist); 7551 7552 if (!nfsd_netns_ready(nn)) 7553 return count; 7554 7555 spin_lock(&nn->client_lock); 7556 clp = nfsd_find_client(addr, addr_size); 7557 if (clp) 7558 count = nfsd_find_all_delegations(clp, 0, &reaplist); 7559 spin_unlock(&nn->client_lock); 7560 7561 nfsd_recall_delegations(&reaplist); 7562 return count; 7563 } 7564 7565 u64 7566 nfsd_inject_recall_delegations(u64 max) 7567 { 7568 u64 count = 0; 7569 struct nfs4_client *clp, *next; 7570 struct nfsd_net *nn = net_generic(current->nsproxy->net_ns, 7571 nfsd_net_id); 7572 LIST_HEAD(reaplist); 7573 7574 if (!nfsd_netns_ready(nn)) 7575 return count; 7576 7577 spin_lock(&nn->client_lock); 7578 list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) { 7579 count += nfsd_find_all_delegations(clp, max - count, &reaplist); 7580 if (max != 0 && ++count >= max) 7581 break; 7582 } 7583 spin_unlock(&nn->client_lock); 7584 nfsd_recall_delegations(&reaplist); 7585 return count; 7586 } 7587 #endif /* CONFIG_NFSD_FAULT_INJECTION */ 7588 7589 /* 7590 * Since the lifetime of a delegation isn't limited to that of an open, a 7591 * client may quite reasonably hang on to a delegation as long as it has 7592 * the inode cached. This becomes an obvious problem the first time a 7593 * client's inode cache approaches the size of the server's total memory. 7594 * 7595 * For now we avoid this problem by imposing a hard limit on the number 7596 * of delegations, which varies according to the server's memory size. 7597 */ 7598 static void 7599 set_max_delegations(void) 7600 { 7601 /* 7602 * Allow at most 4 delegations per megabyte of RAM. Quick 7603 * estimates suggest that in the worst case (where every delegation 7604 * is for a different inode), a delegation could take about 1.5K, 7605 * giving a worst case usage of about 6% of memory. 7606 */ 7607 max_delegations = nr_free_buffer_pages() >> (20 - 2 - PAGE_SHIFT); 7608 } 7609 7610 static int nfs4_state_create_net(struct net *net) 7611 { 7612 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 7613 int i; 7614 7615 nn->conf_id_hashtbl = kmalloc_array(CLIENT_HASH_SIZE, 7616 sizeof(struct list_head), 7617 GFP_KERNEL); 7618 if (!nn->conf_id_hashtbl) 7619 goto err; 7620 nn->unconf_id_hashtbl = kmalloc_array(CLIENT_HASH_SIZE, 7621 sizeof(struct list_head), 7622 GFP_KERNEL); 7623 if (!nn->unconf_id_hashtbl) 7624 goto err_unconf_id; 7625 nn->sessionid_hashtbl = kmalloc_array(SESSION_HASH_SIZE, 7626 sizeof(struct list_head), 7627 GFP_KERNEL); 7628 if (!nn->sessionid_hashtbl) 7629 goto err_sessionid; 7630 7631 for (i = 0; i < CLIENT_HASH_SIZE; i++) { 7632 INIT_LIST_HEAD(&nn->conf_id_hashtbl[i]); 7633 INIT_LIST_HEAD(&nn->unconf_id_hashtbl[i]); 7634 } 7635 for (i = 0; i < SESSION_HASH_SIZE; i++) 7636 INIT_LIST_HEAD(&nn->sessionid_hashtbl[i]); 7637 nn->conf_name_tree = RB_ROOT; 7638 nn->unconf_name_tree = RB_ROOT; 7639 nn->boot_time = get_seconds(); 7640 nn->grace_ended = false; 7641 nn->nfsd4_manager.block_opens = true; 7642 INIT_LIST_HEAD(&nn->nfsd4_manager.list); 7643 INIT_LIST_HEAD(&nn->client_lru); 7644 INIT_LIST_HEAD(&nn->close_lru); 7645 INIT_LIST_HEAD(&nn->del_recall_lru); 7646 spin_lock_init(&nn->client_lock); 7647 spin_lock_init(&nn->s2s_cp_lock); 7648 idr_init(&nn->s2s_cp_stateids); 7649 7650 spin_lock_init(&nn->blocked_locks_lock); 7651 INIT_LIST_HEAD(&nn->blocked_locks_lru); 7652 7653 INIT_DELAYED_WORK(&nn->laundromat_work, laundromat_main); 7654 get_net(net); 7655 7656 return 0; 7657 7658 err_sessionid: 7659 kfree(nn->unconf_id_hashtbl); 7660 err_unconf_id: 7661 kfree(nn->conf_id_hashtbl); 7662 err: 7663 return -ENOMEM; 7664 } 7665 7666 static void 7667 nfs4_state_destroy_net(struct net *net) 7668 { 7669 int i; 7670 struct nfs4_client *clp = NULL; 7671 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 7672 7673 for (i = 0; i < CLIENT_HASH_SIZE; i++) { 7674 while (!list_empty(&nn->conf_id_hashtbl[i])) { 7675 clp = list_entry(nn->conf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); 7676 destroy_client(clp); 7677 } 7678 } 7679 7680 WARN_ON(!list_empty(&nn->blocked_locks_lru)); 7681 7682 for (i = 0; i < CLIENT_HASH_SIZE; i++) { 7683 while (!list_empty(&nn->unconf_id_hashtbl[i])) { 7684 clp = list_entry(nn->unconf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); 7685 destroy_client(clp); 7686 } 7687 } 7688 7689 kfree(nn->sessionid_hashtbl); 7690 kfree(nn->unconf_id_hashtbl); 7691 kfree(nn->conf_id_hashtbl); 7692 put_net(net); 7693 } 7694 7695 int 7696 nfs4_state_start_net(struct net *net) 7697 { 7698 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 7699 int ret; 7700 7701 ret = nfs4_state_create_net(net); 7702 if (ret) 7703 return ret; 7704 locks_start_grace(net, &nn->nfsd4_manager); 7705 nfsd4_client_tracking_init(net); 7706 if (nn->track_reclaim_completes && nn->reclaim_str_hashtbl_size == 0) 7707 goto skip_grace; 7708 printk(KERN_INFO "NFSD: starting %ld-second grace period (net %x)\n", 7709 nn->nfsd4_grace, net->ns.inum); 7710 queue_delayed_work(laundry_wq, &nn->laundromat_work, nn->nfsd4_grace * HZ); 7711 return 0; 7712 7713 skip_grace: 7714 printk(KERN_INFO "NFSD: no clients to reclaim, skipping NFSv4 grace period (net %x)\n", 7715 net->ns.inum); 7716 queue_delayed_work(laundry_wq, &nn->laundromat_work, nn->nfsd4_lease * HZ); 7717 nfsd4_end_grace(nn); 7718 return 0; 7719 } 7720 7721 /* initialization to perform when the nfsd service is started: */ 7722 7723 int 7724 nfs4_state_start(void) 7725 { 7726 int ret; 7727 7728 laundry_wq = alloc_workqueue("%s", WQ_UNBOUND, 0, "nfsd4"); 7729 if (laundry_wq == NULL) { 7730 ret = -ENOMEM; 7731 goto out; 7732 } 7733 ret = nfsd4_create_callback_queue(); 7734 if (ret) 7735 goto out_free_laundry; 7736 7737 set_max_delegations(); 7738 return 0; 7739 7740 out_free_laundry: 7741 destroy_workqueue(laundry_wq); 7742 out: 7743 return ret; 7744 } 7745 7746 void 7747 nfs4_state_shutdown_net(struct net *net) 7748 { 7749 struct nfs4_delegation *dp = NULL; 7750 struct list_head *pos, *next, reaplist; 7751 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 7752 7753 cancel_delayed_work_sync(&nn->laundromat_work); 7754 locks_end_grace(&nn->nfsd4_manager); 7755 7756 INIT_LIST_HEAD(&reaplist); 7757 spin_lock(&state_lock); 7758 list_for_each_safe(pos, next, &nn->del_recall_lru) { 7759 dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru); 7760 WARN_ON(!unhash_delegation_locked(dp)); 7761 list_add(&dp->dl_recall_lru, &reaplist); 7762 } 7763 spin_unlock(&state_lock); 7764 list_for_each_safe(pos, next, &reaplist) { 7765 dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru); 7766 list_del_init(&dp->dl_recall_lru); 7767 destroy_unhashed_deleg(dp); 7768 } 7769 7770 nfsd4_client_tracking_exit(net); 7771 nfs4_state_destroy_net(net); 7772 } 7773 7774 void 7775 nfs4_state_shutdown(void) 7776 { 7777 destroy_workqueue(laundry_wq); 7778 nfsd4_destroy_callback_queue(); 7779 } 7780 7781 static void 7782 get_stateid(struct nfsd4_compound_state *cstate, stateid_t *stateid) 7783 { 7784 if (HAS_STATE_ID(cstate, CURRENT_STATE_ID_FLAG) && CURRENT_STATEID(stateid)) 7785 memcpy(stateid, &cstate->current_stateid, sizeof(stateid_t)); 7786 } 7787 7788 static void 7789 put_stateid(struct nfsd4_compound_state *cstate, stateid_t *stateid) 7790 { 7791 if (cstate->minorversion) { 7792 memcpy(&cstate->current_stateid, stateid, sizeof(stateid_t)); 7793 SET_STATE_ID(cstate, CURRENT_STATE_ID_FLAG); 7794 } 7795 } 7796 7797 void 7798 clear_current_stateid(struct nfsd4_compound_state *cstate) 7799 { 7800 CLEAR_STATE_ID(cstate, CURRENT_STATE_ID_FLAG); 7801 } 7802 7803 /* 7804 * functions to set current state id 7805 */ 7806 void 7807 nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, 7808 union nfsd4_op_u *u) 7809 { 7810 put_stateid(cstate, &u->open_downgrade.od_stateid); 7811 } 7812 7813 void 7814 nfsd4_set_openstateid(struct nfsd4_compound_state *cstate, 7815 union nfsd4_op_u *u) 7816 { 7817 put_stateid(cstate, &u->open.op_stateid); 7818 } 7819 7820 void 7821 nfsd4_set_closestateid(struct nfsd4_compound_state *cstate, 7822 union nfsd4_op_u *u) 7823 { 7824 put_stateid(cstate, &u->close.cl_stateid); 7825 } 7826 7827 void 7828 nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, 7829 union nfsd4_op_u *u) 7830 { 7831 put_stateid(cstate, &u->lock.lk_resp_stateid); 7832 } 7833 7834 /* 7835 * functions to consume current state id 7836 */ 7837 7838 void 7839 nfsd4_get_opendowngradestateid(struct nfsd4_compound_state *cstate, 7840 union nfsd4_op_u *u) 7841 { 7842 get_stateid(cstate, &u->open_downgrade.od_stateid); 7843 } 7844 7845 void 7846 nfsd4_get_delegreturnstateid(struct nfsd4_compound_state *cstate, 7847 union nfsd4_op_u *u) 7848 { 7849 get_stateid(cstate, &u->delegreturn.dr_stateid); 7850 } 7851 7852 void 7853 nfsd4_get_freestateid(struct nfsd4_compound_state *cstate, 7854 union nfsd4_op_u *u) 7855 { 7856 get_stateid(cstate, &u->free_stateid.fr_stateid); 7857 } 7858 7859 void 7860 nfsd4_get_setattrstateid(struct nfsd4_compound_state *cstate, 7861 union nfsd4_op_u *u) 7862 { 7863 get_stateid(cstate, &u->setattr.sa_stateid); 7864 } 7865 7866 void 7867 nfsd4_get_closestateid(struct nfsd4_compound_state *cstate, 7868 union nfsd4_op_u *u) 7869 { 7870 get_stateid(cstate, &u->close.cl_stateid); 7871 } 7872 7873 void 7874 nfsd4_get_lockustateid(struct nfsd4_compound_state *cstate, 7875 union nfsd4_op_u *u) 7876 { 7877 get_stateid(cstate, &u->locku.lu_stateid); 7878 } 7879 7880 void 7881 nfsd4_get_readstateid(struct nfsd4_compound_state *cstate, 7882 union nfsd4_op_u *u) 7883 { 7884 get_stateid(cstate, &u->read.rd_stateid); 7885 } 7886 7887 void 7888 nfsd4_get_writestateid(struct nfsd4_compound_state *cstate, 7889 union nfsd4_op_u *u) 7890 { 7891 get_stateid(cstate, &u->write.wr_stateid); 7892 } 7893