tree:   
https://kernel.googlesource.com/pub/scm/linux/kernel/git/gregkh/driver-core.git 
debugfs_cleanup
head:   7ea1b1929a3f463169713ae38bcacf4966e756af
commit: 54d5611ad33f517de1bfe958b22f57822743aebb [26/49] debugfs: remove return 
value of debugfs_create_u32()
config: x86_64-lkp (attached as .config)
compiler: gcc-7 (Debian 7.4.0-10) 7.4.0
reproduce:
        git checkout 54d5611ad33f517de1bfe958b22f57822743aebb
        # save the attached .config to linux build tree
        make ARCH=x86_64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <l...@intel.com>

All errors (new ones prefixed by >>):

   fs/ocfs2/dlmglue.c: In function 'ocfs2_dlm_init_debug':
>> fs/ocfs2/dlmglue.c:3291:30: error: void value not ignored as it ought to be
     dlm_debug->d_locking_filter = debugfs_create_u32("locking_filter",
                                 ^

vim +3291 fs/ocfs2/dlmglue.c

ccd979bdbce9fba Mark Fasheh         2005-12-15  3280  
e581595ea29c737 Greg Kroah-Hartman  2019-07-11  3281  static void 
ocfs2_dlm_init_debug(struct ocfs2_super *osb)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3282  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3283    struct ocfs2_dlm_debug 
*dlm_debug = osb->osb_dlm_debug;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3284  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3285    
dlm_debug->d_locking_state = debugfs_create_file("locking_state",
ccd979bdbce9fba Mark Fasheh         2005-12-15  3286                            
                         S_IFREG|S_IRUSR,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3287                            
                         osb->osb_debug_root,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3288                            
                         osb,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3289                            
                         &ocfs2_dlm_debug_fops);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3290  
8056773ac4b42f3 Gang He             2019-07-11 @3291    
dlm_debug->d_locking_filter = debugfs_create_u32("locking_filter",
8056773ac4b42f3 Gang He             2019-07-11  3292                            
                0600,
8056773ac4b42f3 Gang He             2019-07-11  3293                            
                osb->osb_debug_root,
8056773ac4b42f3 Gang He             2019-07-11  3294                            
                &dlm_debug->d_filter_secs);
29b0ea64bda81c7 Greg Kroah-Hartman  2019-01-04  3295  
29b0ea64bda81c7 Greg Kroah-Hartman  2019-01-04  3296    
ocfs2_get_dlm_debug(dlm_debug);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3297  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3298  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3299  static void 
ocfs2_dlm_shutdown_debug(struct ocfs2_super *osb)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3300  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3301    struct ocfs2_dlm_debug 
*dlm_debug = osb->osb_dlm_debug;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3302  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3303    if (dlm_debug) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3304            
debugfs_remove(dlm_debug->d_locking_state);
8056773ac4b42f3 Gang He             2019-07-11  3305            
debugfs_remove(dlm_debug->d_locking_filter);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3306            
ocfs2_put_dlm_debug(dlm_debug);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3307    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3308  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3309  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3310  int ocfs2_dlm_init(struct 
ocfs2_super *osb)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3311  {
c271c5c22b0a7ca Sunil Mushran       2006-12-05  3312    int status = 0;
4670c46ded9a182 Joel Becker         2008-02-01  3313    struct 
ocfs2_cluster_connection *conn = NULL;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3314  
0abd6d1803b01c7 Mark Fasheh         2008-01-29  3315    if 
(ocfs2_mount_local(osb)) {
0abd6d1803b01c7 Mark Fasheh         2008-01-29  3316            osb->node_num = 
0;
c271c5c22b0a7ca Sunil Mushran       2006-12-05  3317            goto local;
0abd6d1803b01c7 Mark Fasheh         2008-01-29  3318    }
c271c5c22b0a7ca Sunil Mushran       2006-12-05  3319  
e581595ea29c737 Greg Kroah-Hartman  2019-07-11  3320    
ocfs2_dlm_init_debug(osb);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3321  
34d024f84345807 Mark Fasheh         2007-09-24  3322    /* launch downconvert 
thread */
5afc44e2e9678c0 Joseph Qi           2015-11-05  3323    osb->dc_task = 
kthread_run(ocfs2_downconvert_thread, osb, "ocfs2dc-%s",
5afc44e2e9678c0 Joseph Qi           2015-11-05  3324                    
osb->uuid_str);
34d024f84345807 Mark Fasheh         2007-09-24  3325    if 
(IS_ERR(osb->dc_task)) {
34d024f84345807 Mark Fasheh         2007-09-24  3326            status = 
PTR_ERR(osb->dc_task);
34d024f84345807 Mark Fasheh         2007-09-24  3327            osb->dc_task = 
NULL;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3328            
mlog_errno(status);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3329            goto bail;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3330    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3331  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3332    /* for now, uuid == 
domain */
9c6c877c04ce17d Joel Becker         2008-02-01  3333    status = 
ocfs2_cluster_connect(osb->osb_cluster_stack,
c74a3bdd9b529d9 Goldwyn Rodrigues   2014-01-21  3334                            
       osb->osb_cluster_name,
c74a3bdd9b529d9 Goldwyn Rodrigues   2014-01-21  3335                            
       strlen(osb->osb_cluster_name),
9c6c877c04ce17d Joel Becker         2008-02-01  3336                            
       osb->uuid_str,
4670c46ded9a182 Joel Becker         2008-02-01  3337                            
       strlen(osb->uuid_str),
553b5eb91abd5f8 Joel Becker         2010-01-29  3338                            
       &lproto, ocfs2_do_node_down, osb,
4670c46ded9a182 Joel Becker         2008-02-01  3339                            
       &conn);
4670c46ded9a182 Joel Becker         2008-02-01  3340    if (status) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3341            
mlog_errno(status);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3342            goto bail;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3343    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3344  
3e8341516409d02 Goldwyn Rodrigues   2014-01-21  3345    status = 
ocfs2_cluster_this_node(conn, &osb->node_num);
0abd6d1803b01c7 Mark Fasheh         2008-01-29  3346    if (status < 0) {
0abd6d1803b01c7 Mark Fasheh         2008-01-29  3347            
mlog_errno(status);
0abd6d1803b01c7 Mark Fasheh         2008-01-29  3348            mlog(ML_ERROR,
0abd6d1803b01c7 Mark Fasheh         2008-01-29  3349                 "could not 
find this host's node number\n");
286eaa95c5c5915 Joel Becker         2008-02-01  3350            
ocfs2_cluster_disconnect(conn, 0);
0abd6d1803b01c7 Mark Fasheh         2008-01-29  3351            goto bail;
0abd6d1803b01c7 Mark Fasheh         2008-01-29  3352    }
0abd6d1803b01c7 Mark Fasheh         2008-01-29  3353  
c271c5c22b0a7ca Sunil Mushran       2006-12-05  3354  local:
ccd979bdbce9fba Mark Fasheh         2005-12-15  3355    
ocfs2_super_lock_res_init(&osb->osb_super_lockres, osb);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3356    
ocfs2_rename_lock_res_init(&osb->osb_rename_lockres, osb);
6ca497a83e592d6 wengang wang        2009-03-06  3357    
ocfs2_nfs_sync_lock_res_init(&osb->osb_nfs_sync_lockres, osb);
83273932fbefb6c Srinivas Eeda       2009-06-03  3358    
ocfs2_orphan_scan_lock_res_init(&osb->osb_orphan_scan.os_lockres, osb);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3359  
4670c46ded9a182 Joel Becker         2008-02-01  3360    osb->cconn = conn;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3361  bail:
ccd979bdbce9fba Mark Fasheh         2005-12-15  3362    if (status < 0) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3363            
ocfs2_dlm_shutdown_debug(osb);
34d024f84345807 Mark Fasheh         2007-09-24  3364            if 
(osb->dc_task)
34d024f84345807 Mark Fasheh         2007-09-24  3365                    
kthread_stop(osb->dc_task);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3366    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3367  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3368    return status;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3369  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3370  
286eaa95c5c5915 Joel Becker         2008-02-01  3371  void 
ocfs2_dlm_shutdown(struct ocfs2_super *osb,
286eaa95c5c5915 Joel Becker         2008-02-01  3372                    int 
hangup_pending)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3373  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3374    
ocfs2_drop_osb_locks(osb);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3375  
4670c46ded9a182 Joel Becker         2008-02-01  3376    /*
4670c46ded9a182 Joel Becker         2008-02-01  3377     * Now that we have 
dropped all locks and ocfs2_dismount_volume()
4670c46ded9a182 Joel Becker         2008-02-01  3378     * has disabled 
recovery, the DLM won't be talking to us.  It's
4670c46ded9a182 Joel Becker         2008-02-01  3379     * safe to tear things 
down before disconnecting the cluster.
4670c46ded9a182 Joel Becker         2008-02-01  3380     */
4670c46ded9a182 Joel Becker         2008-02-01  3381  
34d024f84345807 Mark Fasheh         2007-09-24  3382    if (osb->dc_task) {
34d024f84345807 Mark Fasheh         2007-09-24  3383            
kthread_stop(osb->dc_task);
34d024f84345807 Mark Fasheh         2007-09-24  3384            osb->dc_task = 
NULL;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3385    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3386  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3387    
ocfs2_lock_res_free(&osb->osb_super_lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3388    
ocfs2_lock_res_free(&osb->osb_rename_lockres);
6ca497a83e592d6 wengang wang        2009-03-06  3389    
ocfs2_lock_res_free(&osb->osb_nfs_sync_lockres);
83273932fbefb6c Srinivas Eeda       2009-06-03  3390    
ocfs2_lock_res_free(&osb->osb_orphan_scan.os_lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3391  
286eaa95c5c5915 Joel Becker         2008-02-01  3392    
ocfs2_cluster_disconnect(osb->cconn, hangup_pending);
4670c46ded9a182 Joel Becker         2008-02-01  3393    osb->cconn = NULL;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3394  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3395    
ocfs2_dlm_shutdown_debug(osb);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3396  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3397  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3398  static int 
ocfs2_drop_lock(struct ocfs2_super *osb,
0d5dc6c2dd7a3cd Mark Fasheh         2006-09-14  3399                       
struct ocfs2_lock_res *lockres)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3400  {
7431cd7e8dd0e46 Joel Becker         2008-02-01  3401    int ret;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3402    unsigned long flags;
bd3e76105d4478a Joel Becker         2008-02-01  3403    u32 lkm_flags = 0;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3404  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3405    /* We didn't get 
anywhere near actually using this lockres. */
ccd979bdbce9fba Mark Fasheh         2005-12-15  3406    if (!(lockres->l_flags 
& OCFS2_LOCK_INITIALIZED))
ccd979bdbce9fba Mark Fasheh         2005-12-15  3407            goto out;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3408  
b80fc012e03f8f2 Mark Fasheh         2006-09-12  3409    if 
(lockres->l_ops->flags & LOCK_TYPE_USES_LVB)
bd3e76105d4478a Joel Becker         2008-02-01  3410            lkm_flags |= 
DLM_LKF_VALBLK;
b80fc012e03f8f2 Mark Fasheh         2006-09-12  3411  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3412    
spin_lock_irqsave(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3413  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3414    
mlog_bug_on_msg(!(lockres->l_flags & OCFS2_LOCK_FREEING),
ccd979bdbce9fba Mark Fasheh         2005-12-15  3415                    
"lockres %s, flags 0x%lx\n",
ccd979bdbce9fba Mark Fasheh         2005-12-15  3416                    
lockres->l_name, lockres->l_flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3417  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3418    while (lockres->l_flags 
& OCFS2_LOCK_BUSY) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3419            mlog(0, 
"waiting on busy lock \"%s\": flags = %lx, action = "
ccd979bdbce9fba Mark Fasheh         2005-12-15  3420                 "%u, 
unlock_action = %u\n",
ccd979bdbce9fba Mark Fasheh         2005-12-15  3421                 
lockres->l_name, lockres->l_flags, lockres->l_action,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3422                 
lockres->l_unlock_action);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3423  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3424            
spin_unlock_irqrestore(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3425  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3426            /* XXX: Today 
we just wait on any busy
ccd979bdbce9fba Mark Fasheh         2005-12-15  3427             * locks... 
Perhaps we need to cancel converts in the
ccd979bdbce9fba Mark Fasheh         2005-12-15  3428             * future? */
ccd979bdbce9fba Mark Fasheh         2005-12-15  3429            
ocfs2_wait_on_busy_lock(lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3430  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3431            
spin_lock_irqsave(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3432    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3433  
0d5dc6c2dd7a3cd Mark Fasheh         2006-09-14  3434    if 
(lockres->l_ops->flags & LOCK_TYPE_USES_LVB) {
0d5dc6c2dd7a3cd Mark Fasheh         2006-09-14  3435            if 
(lockres->l_flags & OCFS2_LOCK_ATTACHED &&
bd3e76105d4478a Joel Becker         2008-02-01  3436                
lockres->l_level == DLM_LOCK_EX &&
0d5dc6c2dd7a3cd Mark Fasheh         2006-09-14  3437                
!(lockres->l_flags & OCFS2_LOCK_NEEDS_REFRESH))
0d5dc6c2dd7a3cd Mark Fasheh         2006-09-14  3438                    
lockres->l_ops->set_lvb(lockres);
0d5dc6c2dd7a3cd Mark Fasheh         2006-09-14  3439    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3440  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3441    if (lockres->l_flags & 
OCFS2_LOCK_BUSY)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3442            mlog(ML_ERROR, 
"destroying busy lock: \"%s\"\n",
ccd979bdbce9fba Mark Fasheh         2005-12-15  3443                 
lockres->l_name);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3444    if (lockres->l_flags & 
OCFS2_LOCK_BLOCKED)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3445            mlog(0, 
"destroying blocked lock: \"%s\"\n", lockres->l_name);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3446  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3447    if (!(lockres->l_flags 
& OCFS2_LOCK_ATTACHED)) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3448            
spin_unlock_irqrestore(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3449            goto out;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3450    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3451  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3452    
lockres_clear_flags(lockres, OCFS2_LOCK_ATTACHED);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3453  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3454    /* make sure we never 
get here while waiting for an ast to
ccd979bdbce9fba Mark Fasheh         2005-12-15  3455     * fire. */
ccd979bdbce9fba Mark Fasheh         2005-12-15  3456    
BUG_ON(lockres->l_action != OCFS2_AST_INVALID);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3457  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3458    /* is this necessary? */
ccd979bdbce9fba Mark Fasheh         2005-12-15  3459    
lockres_or_flags(lockres, OCFS2_LOCK_BUSY);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3460    
lockres->l_unlock_action = OCFS2_UNLOCK_DROP_LOCK;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3461    
spin_unlock_irqrestore(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3462  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3463    mlog(0, "lock %s\n", 
lockres->l_name);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3464  
a796d2862aed811 Joel Becker         2010-01-28  3465    ret = 
ocfs2_dlm_unlock(osb->cconn, &lockres->l_lksb, lkm_flags);
7431cd7e8dd0e46 Joel Becker         2008-02-01  3466    if (ret) {
7431cd7e8dd0e46 Joel Becker         2008-02-01  3467            
ocfs2_log_dlm_error("ocfs2_dlm_unlock", ret, lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3468            mlog(ML_ERROR, 
"lockres flags: %lu\n", lockres->l_flags);
cf0acdcd640e946 Joel Becker         2008-01-29  3469            
ocfs2_dlm_dump_lksb(&lockres->l_lksb);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3470            BUG();
ccd979bdbce9fba Mark Fasheh         2005-12-15  3471    }
73ac36ea14fd18e Coly Li             2009-01-07  3472    mlog(0, "lock %s, 
successful return from ocfs2_dlm_unlock\n",
ccd979bdbce9fba Mark Fasheh         2005-12-15  3473         lockres->l_name);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3474  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3475    
ocfs2_wait_on_busy_lock(lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3476  out:
ccd979bdbce9fba Mark Fasheh         2005-12-15  3477    return 0;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3478  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3479  
84d86f83f9d0e84 Jan Kara            2014-04-03  3480  static void 
ocfs2_process_blocked_lock(struct ocfs2_super *osb,
84d86f83f9d0e84 Jan Kara            2014-04-03  3481                            
       struct ocfs2_lock_res *lockres);
84d86f83f9d0e84 Jan Kara            2014-04-03  3482  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3483  /* Mark the lockres as 
being dropped. It will no longer be
ccd979bdbce9fba Mark Fasheh         2005-12-15  3484   * queued if blocking, 
but we still may have to wait on it
34d024f84345807 Mark Fasheh         2007-09-24  3485   * being dequeued from 
the downconvert thread before we can consider
ccd979bdbce9fba Mark Fasheh         2005-12-15  3486   * it safe to drop.
ccd979bdbce9fba Mark Fasheh         2005-12-15  3487   *
ccd979bdbce9fba Mark Fasheh         2005-12-15  3488   * You can *not* attempt 
to call cluster_lock on this lockres anymore. */
84d86f83f9d0e84 Jan Kara            2014-04-03  3489  void 
ocfs2_mark_lockres_freeing(struct ocfs2_super *osb,
84d86f83f9d0e84 Jan Kara            2014-04-03  3490                            
struct ocfs2_lock_res *lockres)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3491  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3492    int status;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3493    struct 
ocfs2_mask_waiter mw;
84d86f83f9d0e84 Jan Kara            2014-04-03  3494    unsigned long flags, 
flags2;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3495  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3496    
ocfs2_init_mask_waiter(&mw);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3497  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3498    
spin_lock_irqsave(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3499    lockres->l_flags |= 
OCFS2_LOCK_FREEING;
84d86f83f9d0e84 Jan Kara            2014-04-03  3500    if (lockres->l_flags & 
OCFS2_LOCK_QUEUED && current == osb->dc_task) {
84d86f83f9d0e84 Jan Kara            2014-04-03  3501            /*
84d86f83f9d0e84 Jan Kara            2014-04-03  3502             * We know the 
downconvert is queued but not in progress
84d86f83f9d0e84 Jan Kara            2014-04-03  3503             * because we 
are the downconvert thread and processing
84d86f83f9d0e84 Jan Kara            2014-04-03  3504             * different 
lock. So we can just remove the lock from the
84d86f83f9d0e84 Jan Kara            2014-04-03  3505             * queue. This 
is not only an optimization but also a way
84d86f83f9d0e84 Jan Kara            2014-04-03  3506             * to avoid the 
following deadlock:
84d86f83f9d0e84 Jan Kara            2014-04-03  3507             *   
ocfs2_dentry_post_unlock()
84d86f83f9d0e84 Jan Kara            2014-04-03  3508             *     
ocfs2_dentry_lock_put()
84d86f83f9d0e84 Jan Kara            2014-04-03  3509             *       
ocfs2_drop_dentry_lock()
84d86f83f9d0e84 Jan Kara            2014-04-03  3510             *         
iput()
84d86f83f9d0e84 Jan Kara            2014-04-03  3511             *           
ocfs2_evict_inode()
84d86f83f9d0e84 Jan Kara            2014-04-03  3512             *             
ocfs2_clear_inode()
84d86f83f9d0e84 Jan Kara            2014-04-03  3513             *              
 ocfs2_mark_lockres_freeing()
84d86f83f9d0e84 Jan Kara            2014-04-03  3514             *              
   ... blocks waiting for OCFS2_LOCK_QUEUED
84d86f83f9d0e84 Jan Kara            2014-04-03  3515             *              
   since we are the downconvert thread which
84d86f83f9d0e84 Jan Kara            2014-04-03  3516             *              
   should clear the flag.
84d86f83f9d0e84 Jan Kara            2014-04-03  3517             */
84d86f83f9d0e84 Jan Kara            2014-04-03  3518            
spin_unlock_irqrestore(&lockres->l_lock, flags);
84d86f83f9d0e84 Jan Kara            2014-04-03  3519            
spin_lock_irqsave(&osb->dc_task_lock, flags2);
84d86f83f9d0e84 Jan Kara            2014-04-03  3520            
list_del_init(&lockres->l_blocked_list);
84d86f83f9d0e84 Jan Kara            2014-04-03  3521            
osb->blocked_lock_count--;
84d86f83f9d0e84 Jan Kara            2014-04-03  3522            
spin_unlock_irqrestore(&osb->dc_task_lock, flags2);
84d86f83f9d0e84 Jan Kara            2014-04-03  3523            /*
84d86f83f9d0e84 Jan Kara            2014-04-03  3524             * Warn if we 
recurse into another post_unlock call.  Strictly
84d86f83f9d0e84 Jan Kara            2014-04-03  3525             * speaking it 
isn't a problem but we need to be careful if
84d86f83f9d0e84 Jan Kara            2014-04-03  3526             * that happens 
(stack overflow, deadlocks, ...) so warn if
84d86f83f9d0e84 Jan Kara            2014-04-03  3527             * ocfs2 grows 
a path for which this can happen.
84d86f83f9d0e84 Jan Kara            2014-04-03  3528             */
84d86f83f9d0e84 Jan Kara            2014-04-03  3529            
WARN_ON_ONCE(lockres->l_ops->post_unlock);
84d86f83f9d0e84 Jan Kara            2014-04-03  3530            /* Since the 
lock is freeing we don't do much in the fn below */
84d86f83f9d0e84 Jan Kara            2014-04-03  3531            
ocfs2_process_blocked_lock(osb, lockres);
84d86f83f9d0e84 Jan Kara            2014-04-03  3532            return;
84d86f83f9d0e84 Jan Kara            2014-04-03  3533    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3534    while (lockres->l_flags 
& OCFS2_LOCK_QUEUED) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3535            
lockres_add_mask_waiter(lockres, &mw, OCFS2_LOCK_QUEUED, 0);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3536            
spin_unlock_irqrestore(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3537  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3538            mlog(0, 
"Waiting on lockres %s\n", lockres->l_name);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3539  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3540            status = 
ocfs2_wait_for_mask(&mw);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3541            if (status)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3542                    
mlog_errno(status);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3543  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3544            
spin_lock_irqsave(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3545    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3546    
spin_unlock_irqrestore(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3547  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3548  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3549  void 
ocfs2_simple_drop_lockres(struct ocfs2_super *osb,
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3550                           
struct ocfs2_lock_res *lockres)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3551  {
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3552    int ret;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3553  
84d86f83f9d0e84 Jan Kara            2014-04-03  3554    
ocfs2_mark_lockres_freeing(osb, lockres);
0d5dc6c2dd7a3cd Mark Fasheh         2006-09-14  3555    ret = 
ocfs2_drop_lock(osb, lockres);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3556    if (ret)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3557            mlog_errno(ret);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3558  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3559  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3560  static void 
ocfs2_drop_osb_locks(struct ocfs2_super *osb)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3561  {
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3562    
ocfs2_simple_drop_lockres(osb, &osb->osb_super_lockres);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3563    
ocfs2_simple_drop_lockres(osb, &osb->osb_rename_lockres);
6ca497a83e592d6 wengang wang        2009-03-06  3564    
ocfs2_simple_drop_lockres(osb, &osb->osb_nfs_sync_lockres);
83273932fbefb6c Srinivas Eeda       2009-06-03  3565    
ocfs2_simple_drop_lockres(osb, &osb->osb_orphan_scan.os_lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3566  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3567  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3568  int 
ocfs2_drop_inode_locks(struct inode *inode)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3569  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3570    int status, err;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3571  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3572    /* No need to call 
ocfs2_mark_lockres_freeing here -
ccd979bdbce9fba Mark Fasheh         2005-12-15  3573     * ocfs2_clear_inode 
has done it for us. */
ccd979bdbce9fba Mark Fasheh         2005-12-15  3574  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3575    err = 
ocfs2_drop_lock(OCFS2_SB(inode->i_sb),
500086300e6dc53 Tiger Yang          2007-03-20  3576                          
&OCFS2_I(inode)->ip_open_lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3577    if (err < 0)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3578            mlog_errno(err);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3579  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3580    status = err;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3581  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3582    err = 
ocfs2_drop_lock(OCFS2_SB(inode->i_sb),
e63aecb651ba73d Mark Fasheh         2007-10-18  3583                          
&OCFS2_I(inode)->ip_inode_lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3584    if (err < 0)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3585            mlog_errno(err);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3586    if (err < 0 && !status)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3587            status = err;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3588  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3589    err = 
ocfs2_drop_lock(OCFS2_SB(inode->i_sb),
0d5dc6c2dd7a3cd Mark Fasheh         2006-09-14  3590                          
&OCFS2_I(inode)->ip_rw_lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3591    if (err < 0)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3592            mlog_errno(err);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3593    if (err < 0 && !status)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3594            status = err;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3595  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3596    return status;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3597  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3598  
de551246e7bc555 Joel Becker         2008-02-01  3599  static unsigned int 
ocfs2_prepare_downconvert(struct ocfs2_lock_res *lockres,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3600                            
              int new_level)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3601  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3602    
assert_spin_locked(&lockres->l_lock);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3603  
bd3e76105d4478a Joel Becker         2008-02-01  3604    
BUG_ON(lockres->l_blocking <= DLM_LOCK_NL);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3605  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3606    if (lockres->l_level <= 
new_level) {
9b915181af0a99f Sunil Mushran       2010-02-26  3607            mlog(ML_ERROR, 
"lockres %s, lvl %d <= %d, blcklst %d, mask %d, "
9b915181af0a99f Sunil Mushran       2010-02-26  3608                 "type %d, 
flags 0x%lx, hold %d %d, act %d %d, req %d, "
9b915181af0a99f Sunil Mushran       2010-02-26  3609                 "block %d, 
pgen %d\n", lockres->l_name, lockres->l_level,
9b915181af0a99f Sunil Mushran       2010-02-26  3610                 new_level, 
list_empty(&lockres->l_blocked_list),
9b915181af0a99f Sunil Mushran       2010-02-26  3611                 
list_empty(&lockres->l_mask_waiters), lockres->l_type,
9b915181af0a99f Sunil Mushran       2010-02-26  3612                 
lockres->l_flags, lockres->l_ro_holders,
9b915181af0a99f Sunil Mushran       2010-02-26  3613                 
lockres->l_ex_holders, lockres->l_action,
9b915181af0a99f Sunil Mushran       2010-02-26  3614                 
lockres->l_unlock_action, lockres->l_requested,
9b915181af0a99f Sunil Mushran       2010-02-26  3615                 
lockres->l_blocking, lockres->l_pending_gen);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3616            BUG();
ccd979bdbce9fba Mark Fasheh         2005-12-15  3617    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3618  
9b915181af0a99f Sunil Mushran       2010-02-26  3619    mlog(ML_BASTS, "lockres 
%s, level %d => %d, blocking %d\n",
9b915181af0a99f Sunil Mushran       2010-02-26  3620         lockres->l_name, 
lockres->l_level, new_level, lockres->l_blocking);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3621  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3622    lockres->l_action = 
OCFS2_AST_DOWNCONVERT;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3623    lockres->l_requested = 
new_level;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3624    
lockres_or_flags(lockres, OCFS2_LOCK_BUSY);
de551246e7bc555 Joel Becker         2008-02-01  3625    return 
lockres_set_pending(lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3626  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3627  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3628  static int 
ocfs2_downconvert_lock(struct ocfs2_super *osb,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3629                            
  struct ocfs2_lock_res *lockres,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3630                            
  int new_level,
de551246e7bc555 Joel Becker         2008-02-01  3631                            
  int lvb,
de551246e7bc555 Joel Becker         2008-02-01  3632                            
  unsigned int generation)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3633  {
bd3e76105d4478a Joel Becker         2008-02-01  3634    int ret;
bd3e76105d4478a Joel Becker         2008-02-01  3635    u32 dlm_flags = 
DLM_LKF_CONVERT;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3636  
9b915181af0a99f Sunil Mushran       2010-02-26  3637    mlog(ML_BASTS, "lockres 
%s, level %d => %d\n", lockres->l_name,
9b915181af0a99f Sunil Mushran       2010-02-26  3638         lockres->l_level, 
new_level);
9b915181af0a99f Sunil Mushran       2010-02-26  3639  
e7ee2c089e94067 Eric Ren            2017-01-10  3640    /*
e7ee2c089e94067 Eric Ren            2017-01-10  3641     * On DLM_LKF_VALBLK, 
fsdlm behaves differently with o2cb. It always
e7ee2c089e94067 Eric Ren            2017-01-10  3642     * expects 
DLM_LKF_VALBLK being set if the LKB has LVB, so that
e7ee2c089e94067 Eric Ren            2017-01-10  3643     * we can recover 
correctly from node failure. Otherwise, we may get
793057e1c7272a4 Ingo Molnar         2018-02-28  3644     * invalid LVB in LKB, 
but without DLM_SBF_VALNOTVALID being set.
e7ee2c089e94067 Eric Ren            2017-01-10  3645     */
a634644751c4623 Gang He             2018-11-02  3646    if 
(ocfs2_userspace_stack(osb) &&
e7ee2c089e94067 Eric Ren            2017-01-10  3647        
lockres->l_ops->flags & LOCK_TYPE_USES_LVB)
e7ee2c089e94067 Eric Ren            2017-01-10  3648            lvb = 1;
e7ee2c089e94067 Eric Ren            2017-01-10  3649  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3650    if (lvb)
bd3e76105d4478a Joel Becker         2008-02-01  3651            dlm_flags |= 
DLM_LKF_VALBLK;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3652  
4670c46ded9a182 Joel Becker         2008-02-01  3653    ret = 
ocfs2_dlm_lock(osb->cconn,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3654                         
new_level,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3655                         
&lockres->l_lksb,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3656                         
dlm_flags,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3657                         
lockres->l_name,
a796d2862aed811 Joel Becker         2010-01-28  3658                         
OCFS2_LOCK_ID_MAX_LEN - 1);
de551246e7bc555 Joel Becker         2008-02-01  3659    
lockres_clear_pending(lockres, generation, osb);
7431cd7e8dd0e46 Joel Becker         2008-02-01  3660    if (ret) {
7431cd7e8dd0e46 Joel Becker         2008-02-01  3661            
ocfs2_log_dlm_error("ocfs2_dlm_lock", ret, lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3662            
ocfs2_recover_from_dlm_error(lockres, 1);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3663            goto bail;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3664    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3665  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3666    ret = 0;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3667  bail:
ccd979bdbce9fba Mark Fasheh         2005-12-15  3668    return ret;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3669  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3670  
24ef1815e5e13e5 Joel Becker         2008-01-29  3671  /* returns 1 when the 
caller should unlock and call ocfs2_dlm_unlock */
ccd979bdbce9fba Mark Fasheh         2005-12-15  3672  static int 
ocfs2_prepare_cancel_convert(struct ocfs2_super *osb,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3673                            
        struct ocfs2_lock_res *lockres)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3674  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3675    
assert_spin_locked(&lockres->l_lock);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3676  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3677    if 
(lockres->l_unlock_action == OCFS2_UNLOCK_CANCEL_CONVERT) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3678            /* If we're 
already trying to cancel a lock conversion
ccd979bdbce9fba Mark Fasheh         2005-12-15  3679             * then just 
drop the spinlock and allow the caller to
ccd979bdbce9fba Mark Fasheh         2005-12-15  3680             * requeue this 
lock. */
9b915181af0a99f Sunil Mushran       2010-02-26  3681            mlog(ML_BASTS, 
"lockres %s, skip convert\n", lockres->l_name);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3682            return 0;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3683    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3684  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3685    /* were we in a convert 
when we got the bast fire? */
ccd979bdbce9fba Mark Fasheh         2005-12-15  3686    
BUG_ON(lockres->l_action != OCFS2_AST_CONVERT &&
ccd979bdbce9fba Mark Fasheh         2005-12-15  3687           
lockres->l_action != OCFS2_AST_DOWNCONVERT);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3688    /* set things up for 
the unlockast to know to just
ccd979bdbce9fba Mark Fasheh         2005-12-15  3689     * clear out the 
ast_action and unset busy, etc. */
ccd979bdbce9fba Mark Fasheh         2005-12-15  3690    
lockres->l_unlock_action = OCFS2_UNLOCK_CANCEL_CONVERT;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3691  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3692    
mlog_bug_on_msg(!(lockres->l_flags & OCFS2_LOCK_BUSY),
ccd979bdbce9fba Mark Fasheh         2005-12-15  3693                    "lock 
%s, invalid flags: 0x%lx\n",
ccd979bdbce9fba Mark Fasheh         2005-12-15  3694                    
lockres->l_name, lockres->l_flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3695  
9b915181af0a99f Sunil Mushran       2010-02-26  3696    mlog(ML_BASTS, "lockres 
%s\n", lockres->l_name);
9b915181af0a99f Sunil Mushran       2010-02-26  3697  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3698    return 1;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3699  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3700  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3701  static int 
ocfs2_cancel_convert(struct ocfs2_super *osb,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3702                            
struct ocfs2_lock_res *lockres)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3703  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3704    int ret;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3705  
4670c46ded9a182 Joel Becker         2008-02-01  3706    ret = 
ocfs2_dlm_unlock(osb->cconn, &lockres->l_lksb,
a796d2862aed811 Joel Becker         2010-01-28  3707                           
DLM_LKF_CANCEL);
7431cd7e8dd0e46 Joel Becker         2008-02-01  3708    if (ret) {
7431cd7e8dd0e46 Joel Becker         2008-02-01  3709            
ocfs2_log_dlm_error("ocfs2_dlm_unlock", ret, lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3710            
ocfs2_recover_from_dlm_error(lockres, 0);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3711    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3712  
9b915181af0a99f Sunil Mushran       2010-02-26  3713    mlog(ML_BASTS, "lockres 
%s\n", lockres->l_name);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3714  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3715    return ret;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3716  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3717  
b5e500e23e53279 Mark Fasheh         2006-09-13  3718  static int 
ocfs2_unblock_lock(struct ocfs2_super *osb,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3719                          
struct ocfs2_lock_res *lockres,
cc567d89b3af429 Mark Fasheh         2006-09-13  3720                          
struct ocfs2_unblock_ctl *ctl)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3721  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3722    unsigned long flags;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3723    int blocking;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3724    int new_level;
079b805782f94f4 Sunil Mushran       2010-02-03  3725    int level;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3726    int ret = 0;
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3727    int set_lvb = 0;
de551246e7bc555 Joel Becker         2008-02-01  3728    unsigned int gen;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3729  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3730    
spin_lock_irqsave(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3731  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3732  recheck:
db0f6ce69776370 Sunil Mushran       2010-02-01  3733    /*
db0f6ce69776370 Sunil Mushran       2010-02-01  3734     * Is it still 
blocking? If not, we have no more work to do.
db0f6ce69776370 Sunil Mushran       2010-02-01  3735     */
db0f6ce69776370 Sunil Mushran       2010-02-01  3736    if (!(lockres->l_flags 
& OCFS2_LOCK_BLOCKED)) {
db0f6ce69776370 Sunil Mushran       2010-02-01  3737            
BUG_ON(lockres->l_blocking != DLM_LOCK_NL);
db0f6ce69776370 Sunil Mushran       2010-02-01  3738            
spin_unlock_irqrestore(&lockres->l_lock, flags);
db0f6ce69776370 Sunil Mushran       2010-02-01  3739            ret = 0;
db0f6ce69776370 Sunil Mushran       2010-02-01  3740            goto leave;
db0f6ce69776370 Sunil Mushran       2010-02-01  3741    }
db0f6ce69776370 Sunil Mushran       2010-02-01  3742  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3743    if (lockres->l_flags & 
OCFS2_LOCK_BUSY) {
de551246e7bc555 Joel Becker         2008-02-01  3744            /* XXX
de551246e7bc555 Joel Becker         2008-02-01  3745             * This is a 
*big* race.  The OCFS2_LOCK_PENDING flag
de551246e7bc555 Joel Becker         2008-02-01  3746             * exists 
entirely for one reason - another thread has set
de551246e7bc555 Joel Becker         2008-02-01  3747             * 
OCFS2_LOCK_BUSY, but has *NOT* yet called dlm_lock().
de551246e7bc555 Joel Becker         2008-02-01  3748             *
de551246e7bc555 Joel Becker         2008-02-01  3749             * If we do 
ocfs2_cancel_convert() before the other thread
de551246e7bc555 Joel Becker         2008-02-01  3750             * calls 
dlm_lock(), our cancel will do nothing.  We will
de551246e7bc555 Joel Becker         2008-02-01  3751             * get no ast, 
and we will have no way of knowing the
de551246e7bc555 Joel Becker         2008-02-01  3752             * cancel 
failed.  Meanwhile, the other thread will call
de551246e7bc555 Joel Becker         2008-02-01  3753             * into 
dlm_lock() and wait...forever.
de551246e7bc555 Joel Becker         2008-02-01  3754             *
de551246e7bc555 Joel Becker         2008-02-01  3755             * Why forever? 
 Because another node has asked for the
de551246e7bc555 Joel Becker         2008-02-01  3756             * lock first; 
that's why we're here in unblock_lock().
de551246e7bc555 Joel Becker         2008-02-01  3757             *
de551246e7bc555 Joel Becker         2008-02-01  3758             * The solution 
is OCFS2_LOCK_PENDING.  When PENDING is
de551246e7bc555 Joel Becker         2008-02-01  3759             * set, we just 
requeue the unblock.  Only when the other
de551246e7bc555 Joel Becker         2008-02-01  3760             * thread has 
called dlm_lock() and cleared PENDING will
de551246e7bc555 Joel Becker         2008-02-01  3761             * we then 
cancel their request.
de551246e7bc555 Joel Becker         2008-02-01  3762             *
de551246e7bc555 Joel Becker         2008-02-01  3763             * All callers 
of dlm_lock() must set OCFS2_DLM_PENDING
de551246e7bc555 Joel Becker         2008-02-01  3764             * at the same 
time they set OCFS2_DLM_BUSY.  They must
de551246e7bc555 Joel Becker         2008-02-01  3765             * clear 
OCFS2_DLM_PENDING after dlm_lock() returns.
de551246e7bc555 Joel Becker         2008-02-01  3766             */
9b915181af0a99f Sunil Mushran       2010-02-26  3767            if 
(lockres->l_flags & OCFS2_LOCK_PENDING) {
9b915181af0a99f Sunil Mushran       2010-02-26  3768                    
mlog(ML_BASTS, "lockres %s, ReQ: Pending\n",
9b915181af0a99f Sunil Mushran       2010-02-26  3769                         
lockres->l_name);
de551246e7bc555 Joel Becker         2008-02-01  3770                    goto 
leave_requeue;
9b915181af0a99f Sunil Mushran       2010-02-26  3771            }
de551246e7bc555 Joel Becker         2008-02-01  3772  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3773            ctl->requeue = 
1;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3774            ret = 
ocfs2_prepare_cancel_convert(osb, lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3775            
spin_unlock_irqrestore(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3776            if (ret) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3777                    ret = 
ocfs2_cancel_convert(osb, lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3778                    if (ret 
< 0)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3779                            
mlog_errno(ret);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3780            }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3781            goto leave;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3782    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3783  
a19128260107f95 Sunil Mushran       2010-01-21  3784    /*
a19128260107f95 Sunil Mushran       2010-01-21  3785     * This prevents 
livelocks. OCFS2_LOCK_UPCONVERT_FINISHING flag is
a19128260107f95 Sunil Mushran       2010-01-21  3786     * set when the ast is 
received for an upconvert just before the
a19128260107f95 Sunil Mushran       2010-01-21  3787     * OCFS2_LOCK_BUSY flag 
is cleared. Now if the fs received a bast
a19128260107f95 Sunil Mushran       2010-01-21  3788     * on the heels of the 
ast, we want to delay the downconvert just
a19128260107f95 Sunil Mushran       2010-01-21  3789     * enough to allow the 
up requestor to do its task. Because this
a19128260107f95 Sunil Mushran       2010-01-21  3790     * lock is in the 
blocked queue, the lock will be downconverted
a19128260107f95 Sunil Mushran       2010-01-21  3791     * as soon as the 
requestor is done with the lock.
a19128260107f95 Sunil Mushran       2010-01-21  3792     */
a19128260107f95 Sunil Mushran       2010-01-21  3793    if (lockres->l_flags & 
OCFS2_LOCK_UPCONVERT_FINISHING)
a19128260107f95 Sunil Mushran       2010-01-21  3794            goto 
leave_requeue;
a19128260107f95 Sunil Mushran       2010-01-21  3795  
0d74125a6a68d4f Sunil Mushran       2010-01-29  3796    /*
0d74125a6a68d4f Sunil Mushran       2010-01-29  3797     * How can we block and 
yet be at NL?  We were trying to upconvert
0d74125a6a68d4f Sunil Mushran       2010-01-29  3798     * from NL and got 
canceled.  The code comes back here, and now
0d74125a6a68d4f Sunil Mushran       2010-01-29  3799     * we notice and clear 
BLOCKING.
0d74125a6a68d4f Sunil Mushran       2010-01-29  3800     */
0d74125a6a68d4f Sunil Mushran       2010-01-29  3801    if (lockres->l_level == 
DLM_LOCK_NL) {
0d74125a6a68d4f Sunil Mushran       2010-01-29  3802            
BUG_ON(lockres->l_ex_holders || lockres->l_ro_holders);
9b915181af0a99f Sunil Mushran       2010-02-26  3803            mlog(ML_BASTS, 
"lockres %s, Aborting dc\n", lockres->l_name);
0d74125a6a68d4f Sunil Mushran       2010-01-29  3804            
lockres->l_blocking = DLM_LOCK_NL;
0d74125a6a68d4f Sunil Mushran       2010-01-29  3805            
lockres_clear_flags(lockres, OCFS2_LOCK_BLOCKED);
0d74125a6a68d4f Sunil Mushran       2010-01-29  3806            
spin_unlock_irqrestore(&lockres->l_lock, flags);
0d74125a6a68d4f Sunil Mushran       2010-01-29  3807            goto leave;
0d74125a6a68d4f Sunil Mushran       2010-01-29  3808    }
0d74125a6a68d4f Sunil Mushran       2010-01-29  3809  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3810    /* if we're blocking an 
exclusive and we have *any* holders,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3811     * then requeue. */
bd3e76105d4478a Joel Becker         2008-02-01  3812    if 
((lockres->l_blocking == DLM_LOCK_EX)
9b915181af0a99f Sunil Mushran       2010-02-26  3813        && 
(lockres->l_ex_holders || lockres->l_ro_holders)) {
9b915181af0a99f Sunil Mushran       2010-02-26  3814            mlog(ML_BASTS, 
"lockres %s, ReQ: EX/PR Holders %u,%u\n",
9b915181af0a99f Sunil Mushran       2010-02-26  3815                 
lockres->l_name, lockres->l_ex_holders,
9b915181af0a99f Sunil Mushran       2010-02-26  3816                 
lockres->l_ro_holders);
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3817            goto 
leave_requeue;
9b915181af0a99f Sunil Mushran       2010-02-26  3818    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3819  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3820    /* If it's a PR we're 
blocking, then only
ccd979bdbce9fba Mark Fasheh         2005-12-15  3821     * requeue if we've got 
any EX holders */
bd3e76105d4478a Joel Becker         2008-02-01  3822    if (lockres->l_blocking 
== DLM_LOCK_PR &&
9b915181af0a99f Sunil Mushran       2010-02-26  3823        
lockres->l_ex_holders) {
9b915181af0a99f Sunil Mushran       2010-02-26  3824            mlog(ML_BASTS, 
"lockres %s, ReQ: EX Holders %u\n",
9b915181af0a99f Sunil Mushran       2010-02-26  3825                 
lockres->l_name, lockres->l_ex_holders);
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3826            goto 
leave_requeue;
9b915181af0a99f Sunil Mushran       2010-02-26  3827    }
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3828  
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3829    /*
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3830     * Can we get a lock in 
this state if the holder counts are
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3831     * zero? The meta data 
unblock code used to check this.
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3832     */
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3833    if 
((lockres->l_ops->flags & LOCK_TYPE_REQUIRES_REFRESH)
9b915181af0a99f Sunil Mushran       2010-02-26  3834        && 
(lockres->l_flags & OCFS2_LOCK_REFRESHING)) {
9b915181af0a99f Sunil Mushran       2010-02-26  3835            mlog(ML_BASTS, 
"lockres %s, ReQ: Lock Refreshing\n",
9b915181af0a99f Sunil Mushran       2010-02-26  3836                 
lockres->l_name);
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3837            goto 
leave_requeue;
9b915181af0a99f Sunil Mushran       2010-02-26  3838    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3839  
16d5b9567ad5241 Mark Fasheh         2006-09-13  3840    new_level = 
ocfs2_highest_compat_lock_level(lockres->l_blocking);
16d5b9567ad5241 Mark Fasheh         2006-09-13  3841  
16d5b9567ad5241 Mark Fasheh         2006-09-13  3842    if 
(lockres->l_ops->check_downconvert
9b915181af0a99f Sunil Mushran       2010-02-26  3843        && 
!lockres->l_ops->check_downconvert(lockres, new_level)) {
9b915181af0a99f Sunil Mushran       2010-02-26  3844            mlog(ML_BASTS, 
"lockres %s, ReQ: Checkpointing\n",
9b915181af0a99f Sunil Mushran       2010-02-26  3845                 
lockres->l_name);
16d5b9567ad5241 Mark Fasheh         2006-09-13  3846            goto 
leave_requeue;
9b915181af0a99f Sunil Mushran       2010-02-26  3847    }
16d5b9567ad5241 Mark Fasheh         2006-09-13  3848  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3849    /* If we get here, then 
we know that there are no more
ccd979bdbce9fba Mark Fasheh         2005-12-15  3850     * incompatible holders 
(and anyone asking for an incompatible
ccd979bdbce9fba Mark Fasheh         2005-12-15  3851     * lock is blocked). We 
can now downconvert the lock */
cc567d89b3af429 Mark Fasheh         2006-09-13  3852    if 
(!lockres->l_ops->downconvert_worker)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3853            goto 
downconvert;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3854  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3855    /* Some lockres types 
want to do a bit of work before
ccd979bdbce9fba Mark Fasheh         2005-12-15  3856     * downconverting a 
lock. Allow that here. The worker function
ccd979bdbce9fba Mark Fasheh         2005-12-15  3857     * may sleep, so we 
save off a copy of what we're blocking as
ccd979bdbce9fba Mark Fasheh         2005-12-15  3858     * it may change while 
we're not holding the spin lock. */
ccd979bdbce9fba Mark Fasheh         2005-12-15  3859    blocking = 
lockres->l_blocking;
079b805782f94f4 Sunil Mushran       2010-02-03  3860    level = 
lockres->l_level;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3861    
spin_unlock_irqrestore(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3862  
cc567d89b3af429 Mark Fasheh         2006-09-13  3863    ctl->unblock_action = 
lockres->l_ops->downconvert_worker(lockres, blocking);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3864  
9b915181af0a99f Sunil Mushran       2010-02-26  3865    if (ctl->unblock_action 
== UNBLOCK_STOP_POST) {
9b915181af0a99f Sunil Mushran       2010-02-26  3866            mlog(ML_BASTS, 
"lockres %s, UNBLOCK_STOP_POST\n",
9b915181af0a99f Sunil Mushran       2010-02-26  3867                 
lockres->l_name);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3868            goto leave;
9b915181af0a99f Sunil Mushran       2010-02-26  3869    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3870  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3871    
spin_lock_irqsave(&lockres->l_lock, flags);
079b805782f94f4 Sunil Mushran       2010-02-03  3872    if ((blocking != 
lockres->l_blocking) || (level != lockres->l_level)) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3873            /* If this 
changed underneath us, then we can't drop
ccd979bdbce9fba Mark Fasheh         2005-12-15  3874             * it just yet. 
*/
9b915181af0a99f Sunil Mushran       2010-02-26  3875            mlog(ML_BASTS, 
"lockres %s, block=%d:%d, level=%d:%d, "
9b915181af0a99f Sunil Mushran       2010-02-26  3876                 
"Recheck\n", lockres->l_name, blocking,
9b915181af0a99f Sunil Mushran       2010-02-26  3877                 
lockres->l_blocking, level, lockres->l_level);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3878            goto recheck;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3879    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3880  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3881  downconvert:
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3882    ctl->requeue = 0;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3883  
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3884    if 
(lockres->l_ops->flags & LOCK_TYPE_USES_LVB) {
bd3e76105d4478a Joel Becker         2008-02-01  3885            if 
(lockres->l_level == DLM_LOCK_EX)
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3886                    set_lvb 
= 1;
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3887  
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3888            /*
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3889             * We only set 
the lvb if the lock has been fully
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3890             * refreshed - 
otherwise we risk setting stale
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3891             * data. 
Otherwise, there's no need to actually clear
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3892             * out the lvb 
here as it's value is still valid.
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3893             */
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3894            if (set_lvb && 
!(lockres->l_flags & OCFS2_LOCK_NEEDS_REFRESH))
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3895                    
lockres->l_ops->set_lvb(lockres);
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3896    }
5ef0d4ea0877409 Mark Fasheh         2006-09-13  3897  
de551246e7bc555 Joel Becker         2008-02-01  3898    gen = 
ocfs2_prepare_downconvert(lockres, new_level);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3899    
spin_unlock_irqrestore(&lockres->l_lock, flags);
de551246e7bc555 Joel Becker         2008-02-01  3900    ret = 
ocfs2_downconvert_lock(osb, lockres, new_level, set_lvb,
de551246e7bc555 Joel Becker         2008-02-01  3901                            
     gen);
de551246e7bc555 Joel Becker         2008-02-01  3902  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3903  leave:
c1e8d35ef5ffb39 Tao Ma              2011-03-07  3904    if (ret)
c1e8d35ef5ffb39 Tao Ma              2011-03-07  3905            mlog_errno(ret);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3906    return ret;
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3907  
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3908  leave_requeue:
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3909    
spin_unlock_irqrestore(&lockres->l_lock, flags);
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3910    ctl->requeue = 1;
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3911  
f7fbfdd1fc91543 Mark Fasheh         2006-09-13  3912    return 0;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3913  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3914  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3915  static int 
ocfs2_data_convert_worker(struct ocfs2_lock_res *lockres,
ccd979bdbce9fba Mark Fasheh         2005-12-15  3916                            
     int blocking)
ccd979bdbce9fba Mark Fasheh         2005-12-15  3917  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3918    struct inode *inode;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3919    struct address_space 
*mapping;
5e98d492406818e Goldwyn Rodrigues   2010-06-28  3920    struct ocfs2_inode_info 
*oi;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3921  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3922            inode = 
ocfs2_lock_res_inode(lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3923    mapping = 
inode->i_mapping;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3924  
5e98d492406818e Goldwyn Rodrigues   2010-06-28  3925    if 
(S_ISDIR(inode->i_mode)) {
5e98d492406818e Goldwyn Rodrigues   2010-06-28  3926            oi = 
OCFS2_I(inode);
5e98d492406818e Goldwyn Rodrigues   2010-06-28  3927            
oi->ip_dir_lock_gen++;
5e98d492406818e Goldwyn Rodrigues   2010-06-28  3928            mlog(0, 
"generation: %u\n", oi->ip_dir_lock_gen);
5e98d492406818e Goldwyn Rodrigues   2010-06-28  3929            goto out;
5e98d492406818e Goldwyn Rodrigues   2010-06-28  3930    }
5e98d492406818e Goldwyn Rodrigues   2010-06-28  3931  
1044e401af9a309 Mark Fasheh         2008-02-28  3932    if 
(!S_ISREG(inode->i_mode))
f1f540688eae66c Mark Fasheh         2007-10-18  3933            goto out;
f1f540688eae66c Mark Fasheh         2007-10-18  3934  
7f4a2a97e324e8c Mark Fasheh         2006-12-11  3935    /*
7f4a2a97e324e8c Mark Fasheh         2006-12-11  3936     * We need this before 
the filemap_fdatawrite() so that it can
7f4a2a97e324e8c Mark Fasheh         2006-12-11  3937     * transfer the dirty 
bit from the PTE to the
7f4a2a97e324e8c Mark Fasheh         2006-12-11  3938     * page. Unfortunately 
this means that even for EX->PR
7f4a2a97e324e8c Mark Fasheh         2006-12-11  3939     * downconverts, we'll 
lose our mappings and have to build
7f4a2a97e324e8c Mark Fasheh         2006-12-11  3940     * them up again.
7f4a2a97e324e8c Mark Fasheh         2006-12-11  3941     */
7f4a2a97e324e8c Mark Fasheh         2006-12-11  3942    
unmap_mapping_range(mapping, 0, 0, 0);
7f4a2a97e324e8c Mark Fasheh         2006-12-11  3943  
ccd979bdbce9fba Mark Fasheh         2005-12-15  3944    if 
(filemap_fdatawrite(mapping)) {
b0697053f9e8de9 Mark Fasheh         2006-03-03  3945            mlog(ML_ERROR, 
"Could not sync inode %llu for downconvert!",
b0697053f9e8de9 Mark Fasheh         2006-03-03  3946                 (unsigned 
long long)OCFS2_I(inode)->ip_blkno);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3947    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3948    
sync_mapping_buffers(mapping);
bd3e76105d4478a Joel Becker         2008-02-01  3949    if (blocking == 
DLM_LOCK_EX) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3950            
truncate_inode_pages(mapping, 0);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3951    } else {
ccd979bdbce9fba Mark Fasheh         2005-12-15  3952            /* We only need 
to wait on the I/O if we're not also
ccd979bdbce9fba Mark Fasheh         2005-12-15  3953             * truncating 
pages because truncate_inode_pages waits
ccd979bdbce9fba Mark Fasheh         2005-12-15  3954             * for us 
above. We don't truncate pages if we're
ccd979bdbce9fba Mark Fasheh         2005-12-15  3955             * blocking 
anything < EXMODE because we want to keep
ccd979bdbce9fba Mark Fasheh         2005-12-15  3956             * them around 
in that case. */
ccd979bdbce9fba Mark Fasheh         2005-12-15  3957            
filemap_fdatawait(mapping);
ccd979bdbce9fba Mark Fasheh         2005-12-15  3958    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3959  
b8a7a3a6674725d Andreas Gruenbacher 2016-03-24  3960    
forget_all_cached_acls(inode);
b8a7a3a6674725d Andreas Gruenbacher 2016-03-24  3961  
f1f540688eae66c Mark Fasheh         2007-10-18  3962  out:
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3963    return UNBLOCK_CONTINUE;
ccd979bdbce9fba Mark Fasheh         2005-12-15  3964  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  3965  
a433848132d8cdf Tao Ma              2009-08-18  3966  static int 
ocfs2_ci_checkpointed(struct ocfs2_caching_info *ci,
a433848132d8cdf Tao Ma              2009-08-18  3967                            
 struct ocfs2_lock_res *lockres,
810d5aeba18825c Mark Fasheh         2006-09-13  3968                            
 int new_level)
810d5aeba18825c Mark Fasheh         2006-09-13  3969  {
a433848132d8cdf Tao Ma              2009-08-18  3970    int checkpointed = 
ocfs2_ci_fully_checkpointed(ci);
810d5aeba18825c Mark Fasheh         2006-09-13  3971  
bd3e76105d4478a Joel Becker         2008-02-01  3972    BUG_ON(new_level != 
DLM_LOCK_NL && new_level != DLM_LOCK_PR);
bd3e76105d4478a Joel Becker         2008-02-01  3973    BUG_ON(lockres->l_level 
!= DLM_LOCK_EX && !checkpointed);
810d5aeba18825c Mark Fasheh         2006-09-13  3974  
810d5aeba18825c Mark Fasheh         2006-09-13  3975    if (checkpointed)
810d5aeba18825c Mark Fasheh         2006-09-13  3976            return 1;
810d5aeba18825c Mark Fasheh         2006-09-13  3977  
a433848132d8cdf Tao Ma              2009-08-18  3978    
ocfs2_start_checkpoint(OCFS2_SB(ocfs2_metadata_cache_get_super(ci)));
810d5aeba18825c Mark Fasheh         2006-09-13  3979    return 0;
810d5aeba18825c Mark Fasheh         2006-09-13  3980  }
810d5aeba18825c Mark Fasheh         2006-09-13  3981  
a433848132d8cdf Tao Ma              2009-08-18  3982  static int 
ocfs2_check_meta_downconvert(struct ocfs2_lock_res *lockres,
a433848132d8cdf Tao Ma              2009-08-18  3983                            
        int new_level)
a433848132d8cdf Tao Ma              2009-08-18  3984  {
a433848132d8cdf Tao Ma              2009-08-18  3985    struct inode *inode = 
ocfs2_lock_res_inode(lockres);
a433848132d8cdf Tao Ma              2009-08-18  3986  
a433848132d8cdf Tao Ma              2009-08-18  3987    return 
ocfs2_ci_checkpointed(INODE_CACHE(inode), lockres, new_level);
a433848132d8cdf Tao Ma              2009-08-18  3988  }
a433848132d8cdf Tao Ma              2009-08-18  3989  
810d5aeba18825c Mark Fasheh         2006-09-13  3990  static void 
ocfs2_set_meta_lvb(struct ocfs2_lock_res *lockres)
810d5aeba18825c Mark Fasheh         2006-09-13  3991  {
810d5aeba18825c Mark Fasheh         2006-09-13  3992    struct inode *inode = 
ocfs2_lock_res_inode(lockres);
810d5aeba18825c Mark Fasheh         2006-09-13  3993  
810d5aeba18825c Mark Fasheh         2006-09-13  3994    
__ocfs2_stuff_meta_lvb(inode);
810d5aeba18825c Mark Fasheh         2006-09-13  3995  }
810d5aeba18825c Mark Fasheh         2006-09-13  3996  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3997  /*
d680efe9d8fe0eb Mark Fasheh         2006-09-08  3998   * Does the final 
reference drop on our dentry lock. Right now this
34d024f84345807 Mark Fasheh         2007-09-24  3999   * happens in the 
downconvert thread, but we could choose to simplify the
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4000   * dlmglue API and push 
these off to the ocfs2_wq in the future.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4001   */
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4002  static void 
ocfs2_dentry_post_unlock(struct ocfs2_super *osb,
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4003                            
     struct ocfs2_lock_res *lockres)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4004  {
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4005    struct 
ocfs2_dentry_lock *dl = ocfs2_lock_res_dl(lockres);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4006    
ocfs2_dentry_lock_put(osb, dl);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4007  }
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4008  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4009  /*
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4010   * d_delete() matching 
dentries before the lock downconvert.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4011   *
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4012   * At this point, any 
process waiting to destroy the
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4013   * dentry_lock due to 
last ref count is stopped by the
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4014   * OCFS2_LOCK_QUEUED flag.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4015   *
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4016   * We have two potential 
problems
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4017   *
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4018   * 1) If we do the last 
reference drop on our dentry_lock (via dput)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4019   *    we'll wind up in 
ocfs2_release_dentry_lock(), waiting on
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4020   *    the downconvert to 
finish. Instead we take an elevated
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4021   *    reference and push 
the drop until after we've completed our
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4022   *    unblock processing.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4023   *
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4024   * 2) There might be 
another process with a final reference,
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4025   *    waiting on us to 
finish processing. If this is the case, we
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4026   *    detect it and exit 
out - there's no more dentries anyway.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4027   */
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4028  static int 
ocfs2_dentry_convert_worker(struct ocfs2_lock_res *lockres,
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4029                            
       int blocking)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4030  {
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4031    struct 
ocfs2_dentry_lock *dl = ocfs2_lock_res_dl(lockres);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4032    struct ocfs2_inode_info 
*oi = OCFS2_I(dl->dl_inode);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4033    struct dentry *dentry;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4034    unsigned long flags;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4035    int extra_ref = 0;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4036  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4037    /*
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4038     * This node is 
blocking another node from getting a read
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4039     * lock. This happens 
when we've renamed within a
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4040     * directory. We've 
forced the other nodes to d_delete(), but
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4041     * we never actually 
dropped our lock because it's still
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4042     * valid. The 
downconvert code will retain a PR for this node,
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4043     * so there's no 
further work to do.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4044     */
bd3e76105d4478a Joel Becker         2008-02-01  4045    if (blocking == 
DLM_LOCK_PR)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4046            return 
UNBLOCK_CONTINUE;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4047  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4048    /*
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4049     * Mark this inode as 
potentially orphaned. The code in
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4050     * ocfs2_delete_inode() 
will figure out whether it actually
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4051     * needs to be freed or 
not.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4052     */
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4053    spin_lock(&oi->ip_lock);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4054    oi->ip_flags |= 
OCFS2_INODE_MAYBE_ORPHANED;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4055    
spin_unlock(&oi->ip_lock);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4056  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4057    /*
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4058     * Yuck. We need to 
make sure however that the check of
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4059     * OCFS2_LOCK_FREEING 
and the extra reference are atomic with
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4060     * respect to a 
reference decrement or the setting of that
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4061     * flag.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4062     */
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4063    
spin_lock_irqsave(&lockres->l_lock, flags);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4064    
spin_lock(&dentry_attach_lock);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4065    if (!(lockres->l_flags 
& OCFS2_LOCK_FREEING)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4066        && dl->dl_count) {
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4067            dl->dl_count++;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4068            extra_ref = 1;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4069    }
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4070    
spin_unlock(&dentry_attach_lock);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4071    
spin_unlock_irqrestore(&lockres->l_lock, flags);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4072  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4073    mlog(0, "extra_ref = 
%d\n", extra_ref);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4074  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4075    /*
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4076     * We have a process 
waiting on us in ocfs2_dentry_iput(),
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4077     * which means we can't 
have any more outstanding
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4078     * aliases. There's no 
need to do any more work.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4079     */
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4080    if (!extra_ref)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4081            return 
UNBLOCK_CONTINUE;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4082  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4083    
spin_lock(&dentry_attach_lock);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4084    while (1) {
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4085            dentry = 
ocfs2_find_local_alias(dl->dl_inode,
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4086                            
                dl->dl_parent_blkno, 1);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4087            if (!dentry)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4088                    break;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4089            
spin_unlock(&dentry_attach_lock);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4090  
10ab88117d069a5 alex chen           2015-02-10  4091            if 
(S_ISDIR(dl->dl_inode->i_mode))
10ab88117d069a5 alex chen           2015-02-10  4092                    
shrink_dcache_parent(dentry);
10ab88117d069a5 alex chen           2015-02-10  4093  
a455589f181e604 Al Viro             2014-10-21  4094            mlog(0, 
"d_delete(%pd);\n", dentry);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4095  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4096            /*
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4097             * The 
following dcache calls may do an
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4098             * iput(). 
Normally we don't want that from the
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4099             * 
downconverting thread, but in this case it's ok
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4100             * because the 
requesting node already has an
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4101             * exclusive 
lock on the inode, so it can't be queued
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4102             * for a 
downconvert.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4103             */
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4104            
d_delete(dentry);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4105            dput(dentry);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4106  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4107            
spin_lock(&dentry_attach_lock);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4108    }
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4109    
spin_unlock(&dentry_attach_lock);
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4110  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4111    /*
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4112     * If we are the last 
holder of this dentry lock, there is no
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4113     * reason to 
downconvert so skip straight to the unlock.
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4114     */
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4115    if (dl->dl_count == 1)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4116            return 
UNBLOCK_STOP_POST;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4117  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4118    return 
UNBLOCK_CONTINUE_POST;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4119  }
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4120  
8dec98edfe9684c Tao Ma              2009-08-18  4121  static int 
ocfs2_check_refcount_downconvert(struct ocfs2_lock_res *lockres,
8dec98edfe9684c Tao Ma              2009-08-18  4122                            
            int new_level)
8dec98edfe9684c Tao Ma              2009-08-18  4123  {
8dec98edfe9684c Tao Ma              2009-08-18  4124    struct 
ocfs2_refcount_tree *tree =
8dec98edfe9684c Tao Ma              2009-08-18  4125                            
ocfs2_lock_res_refcount_tree(lockres);
8dec98edfe9684c Tao Ma              2009-08-18  4126  
8dec98edfe9684c Tao Ma              2009-08-18  4127    return 
ocfs2_ci_checkpointed(&tree->rf_ci, lockres, new_level);
8dec98edfe9684c Tao Ma              2009-08-18  4128  }
8dec98edfe9684c Tao Ma              2009-08-18  4129  
8dec98edfe9684c Tao Ma              2009-08-18  4130  static int 
ocfs2_refcount_convert_worker(struct ocfs2_lock_res *lockres,
8dec98edfe9684c Tao Ma              2009-08-18  4131                            
         int blocking)
8dec98edfe9684c Tao Ma              2009-08-18  4132  {
8dec98edfe9684c Tao Ma              2009-08-18  4133    struct 
ocfs2_refcount_tree *tree =
8dec98edfe9684c Tao Ma              2009-08-18  4134                            
ocfs2_lock_res_refcount_tree(lockres);
8dec98edfe9684c Tao Ma              2009-08-18  4135  
8dec98edfe9684c Tao Ma              2009-08-18  4136    
ocfs2_metadata_cache_purge(&tree->rf_ci);
8dec98edfe9684c Tao Ma              2009-08-18  4137  
8dec98edfe9684c Tao Ma              2009-08-18  4138    return UNBLOCK_CONTINUE;
8dec98edfe9684c Tao Ma              2009-08-18  4139  }
8dec98edfe9684c Tao Ma              2009-08-18  4140  
9e33d69f553aaf1 Jan Kara            2008-08-25  4141  static void 
ocfs2_set_qinfo_lvb(struct ocfs2_lock_res *lockres)
9e33d69f553aaf1 Jan Kara            2008-08-25  4142  {
9e33d69f553aaf1 Jan Kara            2008-08-25  4143    struct ocfs2_qinfo_lvb 
*lvb;
9e33d69f553aaf1 Jan Kara            2008-08-25  4144    struct ocfs2_mem_dqinfo 
*oinfo = ocfs2_lock_res_qinfo(lockres);
9e33d69f553aaf1 Jan Kara            2008-08-25  4145    struct mem_dqinfo *info 
= sb_dqinfo(oinfo->dqi_gi.dqi_sb,
9e33d69f553aaf1 Jan Kara            2008-08-25  4146                            
            oinfo->dqi_gi.dqi_type);
9e33d69f553aaf1 Jan Kara            2008-08-25  4147  
a641dc2a5a1445e Mark Fasheh         2008-12-24  4148    lvb = 
ocfs2_dlm_lvb(&lockres->l_lksb);
9e33d69f553aaf1 Jan Kara            2008-08-25  4149    lvb->lvb_version = 
OCFS2_QINFO_LVB_VERSION;
9e33d69f553aaf1 Jan Kara            2008-08-25  4150    lvb->lvb_bgrace = 
cpu_to_be32(info->dqi_bgrace);
9e33d69f553aaf1 Jan Kara            2008-08-25  4151    lvb->lvb_igrace = 
cpu_to_be32(info->dqi_igrace);
9e33d69f553aaf1 Jan Kara            2008-08-25  4152    lvb->lvb_syncms = 
cpu_to_be32(oinfo->dqi_syncms);
9e33d69f553aaf1 Jan Kara            2008-08-25  4153    lvb->lvb_blocks = 
cpu_to_be32(oinfo->dqi_gi.dqi_blocks);
9e33d69f553aaf1 Jan Kara            2008-08-25  4154    lvb->lvb_free_blk = 
cpu_to_be32(oinfo->dqi_gi.dqi_free_blk);
9e33d69f553aaf1 Jan Kara            2008-08-25  4155    lvb->lvb_free_entry = 
cpu_to_be32(oinfo->dqi_gi.dqi_free_entry);
9e33d69f553aaf1 Jan Kara            2008-08-25  4156  }
9e33d69f553aaf1 Jan Kara            2008-08-25  4157  
9e33d69f553aaf1 Jan Kara            2008-08-25  4158  void 
ocfs2_qinfo_unlock(struct ocfs2_mem_dqinfo *oinfo, int ex)
9e33d69f553aaf1 Jan Kara            2008-08-25  4159  {
9e33d69f553aaf1 Jan Kara            2008-08-25  4160    struct ocfs2_lock_res 
*lockres = &oinfo->dqi_gqlock;
9e33d69f553aaf1 Jan Kara            2008-08-25  4161    struct ocfs2_super *osb 
= OCFS2_SB(oinfo->dqi_gi.dqi_sb);
9e33d69f553aaf1 Jan Kara            2008-08-25  4162    int level = ex ? 
DLM_LOCK_EX : DLM_LOCK_PR;
9e33d69f553aaf1 Jan Kara            2008-08-25  4163  
9e33d69f553aaf1 Jan Kara            2008-08-25  4164    if 
(!ocfs2_is_hard_readonly(osb) && !ocfs2_mount_local(osb))
9e33d69f553aaf1 Jan Kara            2008-08-25  4165            
ocfs2_cluster_unlock(osb, lockres, level);
9e33d69f553aaf1 Jan Kara            2008-08-25  4166  }
9e33d69f553aaf1 Jan Kara            2008-08-25  4167  
9e33d69f553aaf1 Jan Kara            2008-08-25  4168  static int 
ocfs2_refresh_qinfo(struct ocfs2_mem_dqinfo *oinfo)
9e33d69f553aaf1 Jan Kara            2008-08-25  4169  {
9e33d69f553aaf1 Jan Kara            2008-08-25  4170    struct mem_dqinfo *info 
= sb_dqinfo(oinfo->dqi_gi.dqi_sb,
9e33d69f553aaf1 Jan Kara            2008-08-25  4171                            
            oinfo->dqi_gi.dqi_type);
9e33d69f553aaf1 Jan Kara            2008-08-25  4172    struct ocfs2_lock_res 
*lockres = &oinfo->dqi_gqlock;
9e33d69f553aaf1 Jan Kara            2008-08-25  4173    struct ocfs2_qinfo_lvb 
*lvb = ocfs2_dlm_lvb(&lockres->l_lksb);
85eb8b73d66530b Joel Becker         2008-11-25  4174    struct buffer_head *bh 
= NULL;
9e33d69f553aaf1 Jan Kara            2008-08-25  4175    struct 
ocfs2_global_disk_dqinfo *gdinfo;
9e33d69f553aaf1 Jan Kara            2008-08-25  4176    int status = 0;
9e33d69f553aaf1 Jan Kara            2008-08-25  4177  
1c520dfbf391e16 Joel Becker         2009-06-19  4178    if 
(ocfs2_dlm_lvb_valid(&lockres->l_lksb) &&
1c520dfbf391e16 Joel Becker         2009-06-19  4179        lvb->lvb_version == 
OCFS2_QINFO_LVB_VERSION) {
9e33d69f553aaf1 Jan Kara            2008-08-25  4180            
info->dqi_bgrace = be32_to_cpu(lvb->lvb_bgrace);
9e33d69f553aaf1 Jan Kara            2008-08-25  4181            
info->dqi_igrace = be32_to_cpu(lvb->lvb_igrace);
9e33d69f553aaf1 Jan Kara            2008-08-25  4182            
oinfo->dqi_syncms = be32_to_cpu(lvb->lvb_syncms);
9e33d69f553aaf1 Jan Kara            2008-08-25  4183            
oinfo->dqi_gi.dqi_blocks = be32_to_cpu(lvb->lvb_blocks);
9e33d69f553aaf1 Jan Kara            2008-08-25  4184            
oinfo->dqi_gi.dqi_free_blk = be32_to_cpu(lvb->lvb_free_blk);
9e33d69f553aaf1 Jan Kara            2008-08-25  4185            
oinfo->dqi_gi.dqi_free_entry =
9e33d69f553aaf1 Jan Kara            2008-08-25  4186                            
        be32_to_cpu(lvb->lvb_free_entry);
9e33d69f553aaf1 Jan Kara            2008-08-25  4187    } else {
ae4f6ef13417dea Jan Kara            2010-04-28  4188            status = 
ocfs2_read_quota_phys_block(oinfo->dqi_gqinode,
ae4f6ef13417dea Jan Kara            2010-04-28  4189                            
                     oinfo->dqi_giblk, &bh);
85eb8b73d66530b Joel Becker         2008-11-25  4190            if (status) {
9e33d69f553aaf1 Jan Kara            2008-08-25  4191                    
mlog_errno(status);
9e33d69f553aaf1 Jan Kara            2008-08-25  4192                    goto 
bail;
9e33d69f553aaf1 Jan Kara            2008-08-25  4193            }
9e33d69f553aaf1 Jan Kara            2008-08-25  4194            gdinfo = 
(struct ocfs2_global_disk_dqinfo *)
9e33d69f553aaf1 Jan Kara            2008-08-25  4195                            
        (bh->b_data + OCFS2_GLOBAL_INFO_OFF);
9e33d69f553aaf1 Jan Kara            2008-08-25  4196            
info->dqi_bgrace = le32_to_cpu(gdinfo->dqi_bgrace);
9e33d69f553aaf1 Jan Kara            2008-08-25  4197            
info->dqi_igrace = le32_to_cpu(gdinfo->dqi_igrace);
9e33d69f553aaf1 Jan Kara            2008-08-25  4198            
oinfo->dqi_syncms = le32_to_cpu(gdinfo->dqi_syncms);
9e33d69f553aaf1 Jan Kara            2008-08-25  4199            
oinfo->dqi_gi.dqi_blocks = le32_to_cpu(gdinfo->dqi_blocks);
9e33d69f553aaf1 Jan Kara            2008-08-25  4200            
oinfo->dqi_gi.dqi_free_blk = le32_to_cpu(gdinfo->dqi_free_blk);
9e33d69f553aaf1 Jan Kara            2008-08-25  4201            
oinfo->dqi_gi.dqi_free_entry =
9e33d69f553aaf1 Jan Kara            2008-08-25  4202                            
        le32_to_cpu(gdinfo->dqi_free_entry);
9e33d69f553aaf1 Jan Kara            2008-08-25  4203            brelse(bh);
9e33d69f553aaf1 Jan Kara            2008-08-25  4204            
ocfs2_track_lock_refresh(lockres);
9e33d69f553aaf1 Jan Kara            2008-08-25  4205    }
9e33d69f553aaf1 Jan Kara            2008-08-25  4206  
9e33d69f553aaf1 Jan Kara            2008-08-25  4207  bail:
9e33d69f553aaf1 Jan Kara            2008-08-25  4208    return status;
9e33d69f553aaf1 Jan Kara            2008-08-25  4209  }
9e33d69f553aaf1 Jan Kara            2008-08-25  4210  
9e33d69f553aaf1 Jan Kara            2008-08-25  4211  /* Lock quota info, this 
function expects at least shared lock on the quota file
9e33d69f553aaf1 Jan Kara            2008-08-25  4212   * so that we can safely 
refresh quota info from disk. */
9e33d69f553aaf1 Jan Kara            2008-08-25  4213  int 
ocfs2_qinfo_lock(struct ocfs2_mem_dqinfo *oinfo, int ex)
9e33d69f553aaf1 Jan Kara            2008-08-25  4214  {
9e33d69f553aaf1 Jan Kara            2008-08-25  4215    struct ocfs2_lock_res 
*lockres = &oinfo->dqi_gqlock;
9e33d69f553aaf1 Jan Kara            2008-08-25  4216    struct ocfs2_super *osb 
= OCFS2_SB(oinfo->dqi_gi.dqi_sb);
9e33d69f553aaf1 Jan Kara            2008-08-25  4217    int level = ex ? 
DLM_LOCK_EX : DLM_LOCK_PR;
9e33d69f553aaf1 Jan Kara            2008-08-25  4218    int status = 0;
9e33d69f553aaf1 Jan Kara            2008-08-25  4219  
9e33d69f553aaf1 Jan Kara            2008-08-25  4220    /* On RO devices, 
locking really isn't needed... */
9e33d69f553aaf1 Jan Kara            2008-08-25  4221    if 
(ocfs2_is_hard_readonly(osb)) {
9e33d69f553aaf1 Jan Kara            2008-08-25  4222            if (ex)
9e33d69f553aaf1 Jan Kara            2008-08-25  4223                    status 
= -EROFS;
9e33d69f553aaf1 Jan Kara            2008-08-25  4224            goto bail;
9e33d69f553aaf1 Jan Kara            2008-08-25  4225    }
9e33d69f553aaf1 Jan Kara            2008-08-25  4226    if 
(ocfs2_mount_local(osb))
9e33d69f553aaf1 Jan Kara            2008-08-25  4227            goto bail;
9e33d69f553aaf1 Jan Kara            2008-08-25  4228  
9e33d69f553aaf1 Jan Kara            2008-08-25  4229    status = 
ocfs2_cluster_lock(osb, lockres, level, 0, 0);
9e33d69f553aaf1 Jan Kara            2008-08-25  4230    if (status < 0) {
9e33d69f553aaf1 Jan Kara            2008-08-25  4231            
mlog_errno(status);
9e33d69f553aaf1 Jan Kara            2008-08-25  4232            goto bail;
9e33d69f553aaf1 Jan Kara            2008-08-25  4233    }
9e33d69f553aaf1 Jan Kara            2008-08-25  4234    if 
(!ocfs2_should_refresh_lock_res(lockres))
9e33d69f553aaf1 Jan Kara            2008-08-25  4235            goto bail;
9e33d69f553aaf1 Jan Kara            2008-08-25  4236    /* OK, we have the lock 
but we need to refresh the quota info */
9e33d69f553aaf1 Jan Kara            2008-08-25  4237    status = 
ocfs2_refresh_qinfo(oinfo);
9e33d69f553aaf1 Jan Kara            2008-08-25  4238    if (status)
9e33d69f553aaf1 Jan Kara            2008-08-25  4239            
ocfs2_qinfo_unlock(oinfo, ex);
9e33d69f553aaf1 Jan Kara            2008-08-25  4240    
ocfs2_complete_lock_res_refresh(lockres, status);
9e33d69f553aaf1 Jan Kara            2008-08-25  4241  bail:
9e33d69f553aaf1 Jan Kara            2008-08-25  4242    return status;
9e33d69f553aaf1 Jan Kara            2008-08-25  4243  }
9e33d69f553aaf1 Jan Kara            2008-08-25  4244  
8dec98edfe9684c Tao Ma              2009-08-18  4245  int 
ocfs2_refcount_lock(struct ocfs2_refcount_tree *ref_tree, int ex)
8dec98edfe9684c Tao Ma              2009-08-18  4246  {
8dec98edfe9684c Tao Ma              2009-08-18  4247    int status;
8dec98edfe9684c Tao Ma              2009-08-18  4248    int level = ex ? 
DLM_LOCK_EX : DLM_LOCK_PR;
8dec98edfe9684c Tao Ma              2009-08-18  4249    struct ocfs2_lock_res 
*lockres = &ref_tree->rf_lockres;
8dec98edfe9684c Tao Ma              2009-08-18  4250    struct ocfs2_super *osb 
= lockres->l_priv;
8dec98edfe9684c Tao Ma              2009-08-18  4251  
8dec98edfe9684c Tao Ma              2009-08-18  4252  
8dec98edfe9684c Tao Ma              2009-08-18  4253    if 
(ocfs2_is_hard_readonly(osb))
8dec98edfe9684c Tao Ma              2009-08-18  4254            return -EROFS;
8dec98edfe9684c Tao Ma              2009-08-18  4255  
8dec98edfe9684c Tao Ma              2009-08-18  4256    if 
(ocfs2_mount_local(osb))
8dec98edfe9684c Tao Ma              2009-08-18  4257            return 0;
8dec98edfe9684c Tao Ma              2009-08-18  4258  
8dec98edfe9684c Tao Ma              2009-08-18  4259    status = 
ocfs2_cluster_lock(osb, lockres, level, 0, 0);
8dec98edfe9684c Tao Ma              2009-08-18  4260    if (status < 0)
8dec98edfe9684c Tao Ma              2009-08-18  4261            
mlog_errno(status);
8dec98edfe9684c Tao Ma              2009-08-18  4262  
8dec98edfe9684c Tao Ma              2009-08-18  4263    return status;
8dec98edfe9684c Tao Ma              2009-08-18  4264  }
8dec98edfe9684c Tao Ma              2009-08-18  4265  
8dec98edfe9684c Tao Ma              2009-08-18  4266  void 
ocfs2_refcount_unlock(struct ocfs2_refcount_tree *ref_tree, int ex)
8dec98edfe9684c Tao Ma              2009-08-18  4267  {
8dec98edfe9684c Tao Ma              2009-08-18  4268    int level = ex ? 
DLM_LOCK_EX : DLM_LOCK_PR;
8dec98edfe9684c Tao Ma              2009-08-18  4269    struct ocfs2_lock_res 
*lockres = &ref_tree->rf_lockres;
8dec98edfe9684c Tao Ma              2009-08-18  4270    struct ocfs2_super *osb 
= lockres->l_priv;
8dec98edfe9684c Tao Ma              2009-08-18  4271  
8dec98edfe9684c Tao Ma              2009-08-18  4272    if 
(!ocfs2_mount_local(osb))
8dec98edfe9684c Tao Ma              2009-08-18  4273            
ocfs2_cluster_unlock(osb, lockres, level);
8dec98edfe9684c Tao Ma              2009-08-18  4274  }
8dec98edfe9684c Tao Ma              2009-08-18  4275  
006000566d4e95b Adrian Bunk         2008-01-29  4276  static void 
ocfs2_process_blocked_lock(struct ocfs2_super *osb,
ccd979bdbce9fba Mark Fasheh         2005-12-15  4277                            
       struct ocfs2_lock_res *lockres)
ccd979bdbce9fba Mark Fasheh         2005-12-15  4278  {
ccd979bdbce9fba Mark Fasheh         2005-12-15  4279    int status;
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4280    struct 
ocfs2_unblock_ctl ctl = {0, 0,};
ccd979bdbce9fba Mark Fasheh         2005-12-15  4281    unsigned long flags;
ccd979bdbce9fba Mark Fasheh         2005-12-15  4282  
ccd979bdbce9fba Mark Fasheh         2005-12-15  4283    /* Our reference to the 
lockres in this function can be
ccd979bdbce9fba Mark Fasheh         2005-12-15  4284     * considered valid 
until we remove the OCFS2_LOCK_QUEUED
ccd979bdbce9fba Mark Fasheh         2005-12-15  4285     * flag. */
ccd979bdbce9fba Mark Fasheh         2005-12-15  4286  
ccd979bdbce9fba Mark Fasheh         2005-12-15  4287    BUG_ON(!lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4288    BUG_ON(!lockres->l_ops);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4289  
9b915181af0a99f Sunil Mushran       2010-02-26  4290    mlog(ML_BASTS, "lockres 
%s blocked\n", lockres->l_name);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4291  
ccd979bdbce9fba Mark Fasheh         2005-12-15  4292    /* Detect whether a 
lock has been marked as going away while
34d024f84345807 Mark Fasheh         2007-09-24  4293     * the downconvert 
thread was processing other things. A lock can
ccd979bdbce9fba Mark Fasheh         2005-12-15  4294     * still be marked with 
OCFS2_LOCK_FREEING after this check,
ccd979bdbce9fba Mark Fasheh         2005-12-15  4295     * but short circuiting 
here will still save us some
ccd979bdbce9fba Mark Fasheh         2005-12-15  4296     * performance. */
ccd979bdbce9fba Mark Fasheh         2005-12-15  4297    
spin_lock_irqsave(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4298    if (lockres->l_flags & 
OCFS2_LOCK_FREEING)
ccd979bdbce9fba Mark Fasheh         2005-12-15  4299            goto unqueue;
ccd979bdbce9fba Mark Fasheh         2005-12-15  4300    
spin_unlock_irqrestore(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4301  
b5e500e23e53279 Mark Fasheh         2006-09-13  4302    status = 
ocfs2_unblock_lock(osb, lockres, &ctl);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4303    if (status < 0)
ccd979bdbce9fba Mark Fasheh         2005-12-15  4304            
mlog_errno(status);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4305  
ccd979bdbce9fba Mark Fasheh         2005-12-15  4306    
spin_lock_irqsave(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4307  unqueue:
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4308    if (lockres->l_flags & 
OCFS2_LOCK_FREEING || !ctl.requeue) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  4309            
lockres_clear_flags(lockres, OCFS2_LOCK_QUEUED);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4310    } else
ccd979bdbce9fba Mark Fasheh         2005-12-15  4311            
ocfs2_schedule_blocked_lock(osb, lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4312  
9b915181af0a99f Sunil Mushran       2010-02-26  4313    mlog(ML_BASTS, "lockres 
%s, requeue = %s.\n", lockres->l_name,
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4314         ctl.requeue ? 
"yes" : "no");
ccd979bdbce9fba Mark Fasheh         2005-12-15  4315    
spin_unlock_irqrestore(&lockres->l_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4316  
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4317    if (ctl.unblock_action 
!= UNBLOCK_CONTINUE
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4318        && 
lockres->l_ops->post_unlock)
d680efe9d8fe0eb Mark Fasheh         2006-09-08  4319            
lockres->l_ops->post_unlock(osb, lockres);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4320  }
ccd979bdbce9fba Mark Fasheh         2005-12-15  4321  
ccd979bdbce9fba Mark Fasheh         2005-12-15  4322  static void 
ocfs2_schedule_blocked_lock(struct ocfs2_super *osb,
ccd979bdbce9fba Mark Fasheh         2005-12-15  4323                            
        struct ocfs2_lock_res *lockres)
ccd979bdbce9fba Mark Fasheh         2005-12-15  4324  {
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4325    unsigned long flags;
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4326  
ccd979bdbce9fba Mark Fasheh         2005-12-15  4327    
assert_spin_locked(&lockres->l_lock);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4328  
ccd979bdbce9fba Mark Fasheh         2005-12-15  4329    if (lockres->l_flags & 
OCFS2_LOCK_FREEING) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  4330            /* Do not 
schedule a lock for downconvert when it's on
ccd979bdbce9fba Mark Fasheh         2005-12-15  4331             * the way to 
destruction - any nodes wanting access
ccd979bdbce9fba Mark Fasheh         2005-12-15  4332             * to the 
resource will get it soon. */
9b915181af0a99f Sunil Mushran       2010-02-26  4333            mlog(ML_BASTS, 
"lockres %s won't be scheduled: flags 0x%lx\n",
ccd979bdbce9fba Mark Fasheh         2005-12-15  4334                 
lockres->l_name, lockres->l_flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4335            return;
ccd979bdbce9fba Mark Fasheh         2005-12-15  4336    }
ccd979bdbce9fba Mark Fasheh         2005-12-15  4337  
ccd979bdbce9fba Mark Fasheh         2005-12-15  4338    
lockres_or_flags(lockres, OCFS2_LOCK_QUEUED);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4339  
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4340    
spin_lock_irqsave(&osb->dc_task_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4341    if 
(list_empty(&lockres->l_blocked_list)) {
ccd979bdbce9fba Mark Fasheh         2005-12-15  4342            
list_add_tail(&lockres->l_blocked_list,
ccd979bdbce9fba Mark Fasheh         2005-12-15  4343                          
&osb->blocked_lock_list);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4344            
osb->blocked_lock_count++;
ccd979bdbce9fba Mark Fasheh         2005-12-15  4345    }
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4346    
spin_unlock_irqrestore(&osb->dc_task_lock, flags);
ccd979bdbce9fba Mark Fasheh         2005-12-15  4347  }
34d024f84345807 Mark Fasheh         2007-09-24  4348  
34d024f84345807 Mark Fasheh         2007-09-24  4349  static void 
ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb)
34d024f84345807 Mark Fasheh         2007-09-24  4350  {
34d024f84345807 Mark Fasheh         2007-09-24  4351    unsigned long processed;
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4352    unsigned long flags;
34d024f84345807 Mark Fasheh         2007-09-24  4353    struct ocfs2_lock_res 
*lockres;
34d024f84345807 Mark Fasheh         2007-09-24  4354  
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4355    
spin_lock_irqsave(&osb->dc_task_lock, flags);
34d024f84345807 Mark Fasheh         2007-09-24  4356    /* grab this early so 
we know to try again if a state change and
34d024f84345807 Mark Fasheh         2007-09-24  4357     * wake happens 
part-way through our work  */
34d024f84345807 Mark Fasheh         2007-09-24  4358    osb->dc_work_sequence = 
osb->dc_wake_sequence;
34d024f84345807 Mark Fasheh         2007-09-24  4359  
34d024f84345807 Mark Fasheh         2007-09-24  4360    processed = 
osb->blocked_lock_count;
209f7512d007980 Joseph Qi           2015-08-06  4361    /*
209f7512d007980 Joseph Qi           2015-08-06  4362     * blocked lock 
processing in this loop might call iput which can
209f7512d007980 Joseph Qi           2015-08-06  4363     * remove items off 
osb->blocked_lock_list. Downconvert up to
209f7512d007980 Joseph Qi           2015-08-06  4364     * 'processed' number 
of locks, but stop short if we had some
209f7512d007980 Joseph Qi           2015-08-06  4365     * removed in 
ocfs2_mark_lockres_freeing when downconverting.
209f7512d007980 Joseph Qi           2015-08-06  4366     */
209f7512d007980 Joseph Qi           2015-08-06  4367    while (processed && 
!list_empty(&osb->blocked_lock_list)) {
34d024f84345807 Mark Fasheh         2007-09-24  4368            lockres = 
list_entry(osb->blocked_lock_list.next,
34d024f84345807 Mark Fasheh         2007-09-24  4369                            
     struct ocfs2_lock_res, l_blocked_list);
34d024f84345807 Mark Fasheh         2007-09-24  4370            
list_del_init(&lockres->l_blocked_list);
34d024f84345807 Mark Fasheh         2007-09-24  4371            
osb->blocked_lock_count--;
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4372            
spin_unlock_irqrestore(&osb->dc_task_lock, flags);
34d024f84345807 Mark Fasheh         2007-09-24  4373  
34d024f84345807 Mark Fasheh         2007-09-24  4374            
BUG_ON(!processed);
34d024f84345807 Mark Fasheh         2007-09-24  4375            processed--;
34d024f84345807 Mark Fasheh         2007-09-24  4376  
34d024f84345807 Mark Fasheh         2007-09-24  4377            
ocfs2_process_blocked_lock(osb, lockres);
34d024f84345807 Mark Fasheh         2007-09-24  4378  
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4379            
spin_lock_irqsave(&osb->dc_task_lock, flags);
34d024f84345807 Mark Fasheh         2007-09-24  4380    }
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4381    
spin_unlock_irqrestore(&osb->dc_task_lock, flags);
34d024f84345807 Mark Fasheh         2007-09-24  4382  }
34d024f84345807 Mark Fasheh         2007-09-24  4383  
34d024f84345807 Mark Fasheh         2007-09-24  4384  static int 
ocfs2_downconvert_thread_lists_empty(struct ocfs2_super *osb)
34d024f84345807 Mark Fasheh         2007-09-24  4385  {
34d024f84345807 Mark Fasheh         2007-09-24  4386    int empty = 0;
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4387    unsigned long flags;
34d024f84345807 Mark Fasheh         2007-09-24  4388  
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4389    
spin_lock_irqsave(&osb->dc_task_lock, flags);
34d024f84345807 Mark Fasheh         2007-09-24  4390    if 
(list_empty(&osb->blocked_lock_list))
34d024f84345807 Mark Fasheh         2007-09-24  4391            empty = 1;
34d024f84345807 Mark Fasheh         2007-09-24  4392  
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4393    
spin_unlock_irqrestore(&osb->dc_task_lock, flags);
34d024f84345807 Mark Fasheh         2007-09-24  4394    return empty;
34d024f84345807 Mark Fasheh         2007-09-24  4395  }
34d024f84345807 Mark Fasheh         2007-09-24  4396  
34d024f84345807 Mark Fasheh         2007-09-24  4397  static int 
ocfs2_downconvert_thread_should_wake(struct ocfs2_super *osb)
34d024f84345807 Mark Fasheh         2007-09-24  4398  {
34d024f84345807 Mark Fasheh         2007-09-24  4399    int should_wake = 0;
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4400    unsigned long flags;
34d024f84345807 Mark Fasheh         2007-09-24  4401  
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4402    
spin_lock_irqsave(&osb->dc_task_lock, flags);
34d024f84345807 Mark Fasheh         2007-09-24  4403    if 
(osb->dc_work_sequence != osb->dc_wake_sequence)
34d024f84345807 Mark Fasheh         2007-09-24  4404            should_wake = 1;
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4405    
spin_unlock_irqrestore(&osb->dc_task_lock, flags);
34d024f84345807 Mark Fasheh         2007-09-24  4406  
34d024f84345807 Mark Fasheh         2007-09-24  4407    return should_wake;
34d024f84345807 Mark Fasheh         2007-09-24  4408  }
34d024f84345807 Mark Fasheh         2007-09-24  4409  
200bfae37a15e50 Adrian Bunk         2008-02-17  4410  static int 
ocfs2_downconvert_thread(void *arg)
34d024f84345807 Mark Fasheh         2007-09-24  4411  {
34d024f84345807 Mark Fasheh         2007-09-24  4412    struct ocfs2_super *osb 
= arg;
34d024f84345807 Mark Fasheh         2007-09-24  4413  
34d024f84345807 Mark Fasheh         2007-09-24  4414    /* only quit once we've 
been asked to stop and there is no more
34d024f84345807 Mark Fasheh         2007-09-24  4415     * work available */
34d024f84345807 Mark Fasheh         2007-09-24  4416    while 
(!(kthread_should_stop() &&
34d024f84345807 Mark Fasheh         2007-09-24  4417            
ocfs2_downconvert_thread_lists_empty(osb))) {
34d024f84345807 Mark Fasheh         2007-09-24  4418  
34d024f84345807 Mark Fasheh         2007-09-24  4419            
wait_event_interruptible(osb->dc_event,
34d024f84345807 Mark Fasheh         2007-09-24  4420                            
         ocfs2_downconvert_thread_should_wake(osb) ||
34d024f84345807 Mark Fasheh         2007-09-24  4421                            
         kthread_should_stop());
34d024f84345807 Mark Fasheh         2007-09-24  4422  
34d024f84345807 Mark Fasheh         2007-09-24  4423            mlog(0, 
"downconvert_thread: awoken\n");
34d024f84345807 Mark Fasheh         2007-09-24  4424  
34d024f84345807 Mark Fasheh         2007-09-24  4425            
ocfs2_downconvert_thread_do_work(osb);
34d024f84345807 Mark Fasheh         2007-09-24  4426    }
34d024f84345807 Mark Fasheh         2007-09-24  4427  
34d024f84345807 Mark Fasheh         2007-09-24  4428    osb->dc_task = NULL;
4658d87cb38cb3a Hariprasad Kelam    2019-07-11  4429    return 0;
34d024f84345807 Mark Fasheh         2007-09-24  4430  }
34d024f84345807 Mark Fasheh         2007-09-24  4431  
34d024f84345807 Mark Fasheh         2007-09-24  4432  void 
ocfs2_wake_downconvert_thread(struct ocfs2_super *osb)
34d024f84345807 Mark Fasheh         2007-09-24  4433  {
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4434    unsigned long flags;
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4435  
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4436    
spin_lock_irqsave(&osb->dc_task_lock, flags);
34d024f84345807 Mark Fasheh         2007-09-24  4437    /* make sure the voting 
thread gets a swipe at whatever changes
34d024f84345807 Mark Fasheh         2007-09-24  4438     * the caller may have 
made to the voting state */
34d024f84345807 Mark Fasheh         2007-09-24  4439    osb->dc_wake_sequence++;
a75e9ccabd925d1 Srinivas Eeda       2012-01-30  4440    
spin_unlock_irqrestore(&osb->dc_task_lock, flags);
34d024f84345807 Mark Fasheh         2007-09-24  4441    wake_up(&osb->dc_event);
34d024f84345807 Mark Fasheh         2007-09-24  4442  }

:::::: The code at line 3291 was first introduced by commit
:::::: 8056773ac4b42f36bae6406030218a5f12749c64 ocfs2: add locking filter 
debugfs file

:::::: TO: Gang He <g...@suse.com>
:::::: CC: Linus Torvalds <torva...@linux-foundation.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to