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

TOMOYO Linux Cross Reference
Linux/fs/nfs/nfs4renewd.c

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

Diff markup

Differences between /fs/nfs/nfs4renewd.c (Version linux-6.12-rc7) and /fs/nfs/nfs4renewd.c (Version unix-v6-master)


  1 /*                                                  1 
  2  *  fs/nfs/nfs4renewd.c                           
  3  *                                                
  4  *  Copyright (c) 2002 The Regents of the Univ    
  5  *  All rights reserved.                          
  6  *                                                
  7  *  Kendrick Smith <kmsmith@umich.edu>            
  8  *                                                
  9  *  Redistribution and use in source and binar    
 10  *  modification, are permitted provided that     
 11  *  are met:                                      
 12  *                                                
 13  *  1. Redistributions of source code must ret    
 14  *     notice, this list of conditions and the    
 15  *  2. Redistributions in binary form must rep    
 16  *     notice, this list of conditions and the    
 17  *     documentation and/or other materials pr    
 18  *  3. Neither the name of the University nor     
 19  *     contributors may be used to endorse or     
 20  *     from this software without specific pri    
 21  *                                                
 22  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND AN    
 23  *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO,    
 24  *  MERCHANTABILITY AND FITNESS FOR A PARTICUL    
 25  *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS     
 26  *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPEC    
 27  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT     
 28  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    
 29  *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND     
 30  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIA    
 31  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WA    
 32  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILI    
 33  *                                                
 34  * Implementation of the NFSv4 "renew daemon",    
 35  * send a RENEW, to keep state alive on the se    
 36  * as an rpc_task, not a real kernel thread, s    
 37  * context.  There is one renewd per nfs_serve    
 38  *                                                
 39  */                                               
 40                                                   
 41 #include <linux/mm.h>                             
 42 #include <linux/pagemap.h>                        
 43 #include <linux/sunrpc/sched.h>                   
 44 #include <linux/sunrpc/clnt.h>                    
 45                                                   
 46 #include <linux/nfs.h>                            
 47 #include <linux/nfs4.h>                           
 48 #include <linux/nfs_fs.h>                         
 49 #include "nfs4_fs.h"                              
 50 #include "delegation.h"                           
 51                                                   
 52 #define NFSDBG_FACILITY         NFSDBG_STATE      
 53                                                   
 54 void                                              
 55 nfs4_renew_state(struct work_struct *work)        
 56 {                                                 
 57         const struct nfs4_state_maintenance_op    
 58         struct nfs_client *clp =                  
 59                 container_of(work, struct nfs_    
 60         const struct cred *cred;                  
 61         long lease;                               
 62         unsigned long last, now;                  
 63         unsigned renew_flags = 0;                 
 64                                                   
 65         ops = clp->cl_mvops->state_renewal_ops    
 66         dprintk("%s: start\n", __func__);         
 67                                                   
 68         if (test_bit(NFS_CS_STOP_RENEW, &clp->    
 69                 goto out;                         
 70                                                   
 71         lease = clp->cl_lease_time;               
 72         last = clp->cl_last_renewal;              
 73         now = jiffies;                            
 74         /* Are we close to a lease timeout? */    
 75         if (time_after(now, last + lease/3))      
 76                 renew_flags |= NFS4_RENEW_TIME    
 77         if (nfs_delegations_present(clp))         
 78                 renew_flags |= NFS4_RENEW_DELE    
 79                                                   
 80         if (renew_flags != 0) {                   
 81                 cred = ops->get_state_renewal_    
 82                 if (cred == NULL) {               
 83                         if (!(renew_flags & NF    
 84                                 set_bit(NFS4CL    
 85                                 goto out;         
 86                         }                         
 87                         nfs_expire_all_delegat    
 88                 } else {                          
 89                         int ret;                  
 90                                                   
 91                         /* Queue an asynchrono    
 92                         ret = ops->sched_state    
 93                         put_cred(cred);           
 94                         switch (ret) {            
 95                         default:                  
 96                                 goto out_exp;     
 97                         case -EAGAIN:             
 98                         case -ENOMEM:             
 99                                 break;            
100                         }                         
101                 }                                 
102         } else {                                  
103                 dprintk("%s: failed to call re    
104                                 __func__);        
105         }                                         
106         nfs4_schedule_state_renewal(clp);         
107 out_exp:                                          
108         nfs_expire_unreferenced_delegations(cl    
109 out:                                              
110         dprintk("%s: done\n", __func__);          
111 }                                                 
112                                                   
113 void                                              
114 nfs4_schedule_state_renewal(struct nfs_client     
115 {                                                 
116         long timeout;                             
117                                                   
118         spin_lock(&clp->cl_lock);                 
119         timeout = (2 * clp->cl_lease_time) / 3    
120                 - (long)jiffies;                  
121         if (timeout < 5 * HZ)                     
122                 timeout = 5 * HZ;                 
123         dprintk("%s: requeueing work. Lease pe    
124                         __func__, (timeout + H    
125         mod_delayed_work(system_wq, &clp->cl_r    
126         set_bit(NFS_CS_RENEWD, &clp->cl_res_st    
127         spin_unlock(&clp->cl_lock);               
128 }                                                 
129                                                   
130 void                                              
131 nfs4_kill_renewd(struct nfs_client *clp)          
132 {                                                 
133         cancel_delayed_work_sync(&clp->cl_rene    
134 }                                                 
135                                                   
136 /**                                               
137  * nfs4_set_lease_period - Sets the lease peri    
138  *                                                
139  * @clp: pointer to nfs_client                    
140  * @lease: new value for lease period             
141  */                                               
142 void nfs4_set_lease_period(struct nfs_client *    
143                 unsigned long lease)              
144 {                                                 
145         spin_lock(&clp->cl_lock);                 
146         clp->cl_lease_time = lease;               
147         spin_unlock(&clp->cl_lock);               
148                                                   
149         /* Cap maximum reconnect timeout at 1/    
150         rpc_set_connect_timeout(clp->cl_rpccli    
151 }                                                 
152                                                   

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

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

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

sflogo.php