Lines Matching refs:osb

109 static void ocfs2_dentry_post_unlock(struct ocfs2_super *osb,
340 static int ocfs2_lock_create(struct ocfs2_super *osb,
346 static void __ocfs2_cluster_unlock(struct ocfs2_super *osb,
349 static inline void ocfs2_cluster_unlock(struct ocfs2_super *osb, in ocfs2_cluster_unlock() argument
353 __ocfs2_cluster_unlock(osb, lockres, level, _RET_IP_); in ocfs2_cluster_unlock()
360 static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb,
374 static void ocfs2_downconvert_on_unlock(struct ocfs2_super *osb,
378 static void ocfs2_drop_osb_locks(struct ocfs2_super *osb);
382 static int ocfs2_downconvert_lock(struct ocfs2_super *osb,
387 static int ocfs2_prepare_cancel_convert(struct ocfs2_super *osb,
389 static int ocfs2_cancel_convert(struct ocfs2_super *osb,
496 static void ocfs2_lock_res_init_common(struct ocfs2_super *osb, in ocfs2_lock_res_init_common() argument
514 ocfs2_add_lockres_tracking(res, osb->osb_dlm_debug); in ocfs2_lock_res_init_common()
643 struct ocfs2_super *osb) in ocfs2_super_lock_res_init() argument
650 ocfs2_lock_res_init_common(osb, res, OCFS2_LOCK_TYPE_SUPER, in ocfs2_super_lock_res_init()
651 &ocfs2_super_lops, osb); in ocfs2_super_lock_res_init()
655 struct ocfs2_super *osb) in ocfs2_rename_lock_res_init() argument
661 ocfs2_lock_res_init_common(osb, res, OCFS2_LOCK_TYPE_RENAME, in ocfs2_rename_lock_res_init()
662 &ocfs2_rename_lops, osb); in ocfs2_rename_lock_res_init()
666 struct ocfs2_super *osb) in ocfs2_nfs_sync_lock_res_init() argument
672 ocfs2_lock_res_init_common(osb, res, OCFS2_LOCK_TYPE_NFS_SYNC, in ocfs2_nfs_sync_lock_res_init()
673 &ocfs2_nfs_sync_lops, osb); in ocfs2_nfs_sync_lock_res_init()
677 struct ocfs2_super *osb) in ocfs2_orphan_scan_lock_res_init() argument
681 ocfs2_lock_res_init_common(osb, res, OCFS2_LOCK_TYPE_ORPHAN_SCAN, in ocfs2_orphan_scan_lock_res_init()
682 &ocfs2_orphan_scan_lops, osb); in ocfs2_orphan_scan_lock_res_init()
712 struct ocfs2_super *osb, u64 ref_blkno, in ocfs2_refcount_lock_res_init() argument
718 ocfs2_lock_res_init_common(osb, lockres, OCFS2_LOCK_TYPE_REFCOUNT, in ocfs2_refcount_lock_res_init()
719 &ocfs2_refcount_block_lops, osb); in ocfs2_refcount_lock_res_init()
980 struct ocfs2_super *osb) in __lockres_clear_pending() argument
1000 ocfs2_wake_downconvert_thread(osb); in __lockres_clear_pending()
1006 struct ocfs2_super *osb) in lockres_clear_pending() argument
1011 __lockres_clear_pending(lockres, generation, osb); in lockres_clear_pending()
1028 struct ocfs2_super *osb = ocfs2_get_lockres_osb(lockres); in ocfs2_blocking_ast() local
1048 ocfs2_schedule_blocked_lock(osb, lockres); in ocfs2_blocking_ast()
1053 ocfs2_wake_downconvert_thread(osb); in ocfs2_blocking_ast()
1059 struct ocfs2_super *osb = ocfs2_get_lockres_osb(lockres); in ocfs2_locking_ast() local
1116 __lockres_clear_pending(lockres, lockres->l_pending_gen, osb); in ocfs2_locking_ast()
1220 static int ocfs2_lock_create(struct ocfs2_super *osb, in ocfs2_lock_create() argument
1245 ret = ocfs2_dlm_lock(osb->cconn, in ocfs2_lock_create()
1251 lockres_clear_pending(lockres, gen, osb); in ocfs2_lock_create()
1378 static int __ocfs2_cluster_lock(struct ocfs2_super *osb, in __ocfs2_cluster_lock() argument
1387 int wait, catch_signals = !(osb->s_mount_opt & OCFS2_MOUNT_NOINTR); in __ocfs2_cluster_lock()
1491 ret = ocfs2_dlm_lock(osb->cconn, in __ocfs2_cluster_lock()
1497 lockres_clear_pending(lockres, gen, osb); in __ocfs2_cluster_lock()
1533 ocfs2_wake_downconvert_thread(osb); in __ocfs2_cluster_lock()
1581 static inline int ocfs2_cluster_lock(struct ocfs2_super *osb, in ocfs2_cluster_lock() argument
1587 return __ocfs2_cluster_lock(osb, lockres, level, lkm_flags, arg_flags, in ocfs2_cluster_lock()
1592 static void __ocfs2_cluster_unlock(struct ocfs2_super *osb, in __ocfs2_cluster_unlock() argument
1601 ocfs2_downconvert_on_unlock(osb, lockres); in __ocfs2_cluster_unlock()
1609 static int ocfs2_create_new_lock(struct ocfs2_super *osb, in ocfs2_create_new_lock() argument
1623 return ocfs2_lock_create(osb, lockres, level, lkm_flags); in ocfs2_create_new_lock()
1635 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_create_new_inode_locks() local
1650 ret = ocfs2_create_new_lock(osb, &OCFS2_I(inode)->ip_rw_lockres, 1, 1); in ocfs2_create_new_inode_locks()
1660 ret = ocfs2_create_new_lock(osb, &OCFS2_I(inode)->ip_inode_lockres, 1, 0); in ocfs2_create_new_inode_locks()
1666 ret = ocfs2_create_new_lock(osb, &OCFS2_I(inode)->ip_open_lockres, 0, 0); in ocfs2_create_new_inode_locks()
1680 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_rw_lock() local
1688 if (ocfs2_mount_local(osb)) in ocfs2_rw_lock()
1707 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_rw_unlock() local
1713 if (!ocfs2_mount_local(osb)) in ocfs2_rw_unlock()
1724 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_open_lock() local
1731 if (ocfs2_is_hard_readonly(osb) || ocfs2_mount_local(osb)) in ocfs2_open_lock()
1749 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_try_open_lock() local
1757 if (ocfs2_is_hard_readonly(osb)) { in ocfs2_try_open_lock()
1763 if (ocfs2_mount_local(osb)) in ocfs2_try_open_lock()
1789 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_open_unlock() local
1794 if (ocfs2_mount_local(osb)) in ocfs2_open_unlock()
1812 struct ocfs2_super *osb = ocfs2_get_lockres_osb(lockres); in ocfs2_flock_handle_signal() local
1821 ret = ocfs2_prepare_cancel_convert(osb, lockres); in ocfs2_flock_handle_signal()
1824 ret = ocfs2_cancel_convert(osb, lockres); in ocfs2_flock_handle_signal()
1883 struct ocfs2_super *osb = OCFS2_SB(file->f_mapping->host->i_sb); in ocfs2_file_lock() local
1906 ret = ocfs2_lock_create(osb, lockres, DLM_LOCK_NL, 0); in ocfs2_file_lock()
1928 ret = ocfs2_dlm_lock(osb->cconn, level, &lockres->l_lksb, lkm_flags, in ocfs2_file_lock()
1979 struct ocfs2_super *osb = OCFS2_SB(file->f_mapping->host->i_sb); in ocfs2_file_unlock() local
2005 ret = ocfs2_downconvert_lock(osb, lockres, DLM_LOCK_NL, 0, gen); in ocfs2_file_unlock()
2016 static void ocfs2_downconvert_on_unlock(struct ocfs2_super *osb, in ocfs2_downconvert_on_unlock() argument
2040 ocfs2_wake_downconvert_thread(osb); in ocfs2_downconvert_on_unlock()
2219 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_inode_lock_update() local
2221 if (ocfs2_mount_local(osb)) in ocfs2_inode_lock_update()
2327 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_inode_lock_full_nested() local
2340 if (ocfs2_is_hard_readonly(osb)) { in ocfs2_inode_lock_full_nested()
2346 if (ocfs2_mount_local(osb)) in ocfs2_inode_lock_full_nested()
2350 ocfs2_wait_for_recovery(osb); in ocfs2_inode_lock_full_nested()
2358 status = __ocfs2_cluster_lock(osb, lockres, level, dlm_flags, in ocfs2_inode_lock_full_nested()
2374 ocfs2_wait_for_recovery(osb); in ocfs2_inode_lock_full_nested()
2507 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_inode_unlock() local
2514 !ocfs2_mount_local(osb)) in ocfs2_inode_unlock()
2518 int ocfs2_orphan_scan_lock(struct ocfs2_super *osb, u32 *seqno) in ocfs2_orphan_scan_lock() argument
2524 if (ocfs2_is_hard_readonly(osb)) in ocfs2_orphan_scan_lock()
2527 if (ocfs2_mount_local(osb)) in ocfs2_orphan_scan_lock()
2530 lockres = &osb->osb_orphan_scan.os_lockres; in ocfs2_orphan_scan_lock()
2531 status = ocfs2_cluster_lock(osb, lockres, DLM_LOCK_EX, 0, 0); in ocfs2_orphan_scan_lock()
2540 *seqno = osb->osb_orphan_scan.os_seqno + 1; in ocfs2_orphan_scan_lock()
2545 void ocfs2_orphan_scan_unlock(struct ocfs2_super *osb, u32 seqno) in ocfs2_orphan_scan_unlock() argument
2550 if (!ocfs2_is_hard_readonly(osb) && !ocfs2_mount_local(osb)) { in ocfs2_orphan_scan_unlock()
2551 lockres = &osb->osb_orphan_scan.os_lockres; in ocfs2_orphan_scan_unlock()
2555 ocfs2_cluster_unlock(osb, lockres, DLM_LOCK_EX); in ocfs2_orphan_scan_unlock()
2559 int ocfs2_super_lock(struct ocfs2_super *osb, in ocfs2_super_lock() argument
2564 struct ocfs2_lock_res *lockres = &osb->osb_super_lockres; in ocfs2_super_lock()
2566 if (ocfs2_is_hard_readonly(osb)) in ocfs2_super_lock()
2569 if (ocfs2_mount_local(osb)) in ocfs2_super_lock()
2572 status = ocfs2_cluster_lock(osb, lockres, level, 0, 0); in ocfs2_super_lock()
2584 status = ocfs2_refresh_slot_info(osb); in ocfs2_super_lock()
2589 ocfs2_cluster_unlock(osb, lockres, level); in ocfs2_super_lock()
2598 void ocfs2_super_unlock(struct ocfs2_super *osb, in ocfs2_super_unlock() argument
2602 struct ocfs2_lock_res *lockres = &osb->osb_super_lockres; in ocfs2_super_unlock()
2604 if (!ocfs2_mount_local(osb)) in ocfs2_super_unlock()
2605 ocfs2_cluster_unlock(osb, lockres, level); in ocfs2_super_unlock()
2608 int ocfs2_rename_lock(struct ocfs2_super *osb) in ocfs2_rename_lock() argument
2611 struct ocfs2_lock_res *lockres = &osb->osb_rename_lockres; in ocfs2_rename_lock()
2613 if (ocfs2_is_hard_readonly(osb)) in ocfs2_rename_lock()
2616 if (ocfs2_mount_local(osb)) in ocfs2_rename_lock()
2619 status = ocfs2_cluster_lock(osb, lockres, DLM_LOCK_EX, 0, 0); in ocfs2_rename_lock()
2626 void ocfs2_rename_unlock(struct ocfs2_super *osb) in ocfs2_rename_unlock() argument
2628 struct ocfs2_lock_res *lockres = &osb->osb_rename_lockres; in ocfs2_rename_unlock()
2630 if (!ocfs2_mount_local(osb)) in ocfs2_rename_unlock()
2631 ocfs2_cluster_unlock(osb, lockres, DLM_LOCK_EX); in ocfs2_rename_unlock()
2634 int ocfs2_nfs_sync_lock(struct ocfs2_super *osb, int ex) in ocfs2_nfs_sync_lock() argument
2637 struct ocfs2_lock_res *lockres = &osb->osb_nfs_sync_lockres; in ocfs2_nfs_sync_lock()
2639 if (ocfs2_is_hard_readonly(osb)) in ocfs2_nfs_sync_lock()
2642 if (ocfs2_mount_local(osb)) in ocfs2_nfs_sync_lock()
2645 status = ocfs2_cluster_lock(osb, lockres, ex ? LKM_EXMODE : LKM_PRMODE, in ocfs2_nfs_sync_lock()
2653 void ocfs2_nfs_sync_unlock(struct ocfs2_super *osb, int ex) in ocfs2_nfs_sync_unlock() argument
2655 struct ocfs2_lock_res *lockres = &osb->osb_nfs_sync_lockres; in ocfs2_nfs_sync_unlock()
2657 if (!ocfs2_mount_local(osb)) in ocfs2_nfs_sync_unlock()
2658 ocfs2_cluster_unlock(osb, lockres, in ocfs2_nfs_sync_unlock()
2667 struct ocfs2_super *osb = OCFS2_SB(dentry->d_sb); in ocfs2_dentry_lock() local
2671 if (ocfs2_is_hard_readonly(osb)) { in ocfs2_dentry_lock()
2677 if (ocfs2_mount_local(osb)) in ocfs2_dentry_lock()
2680 ret = ocfs2_cluster_lock(osb, &dl->dl_lockres, level, 0, 0); in ocfs2_dentry_lock()
2691 struct ocfs2_super *osb = OCFS2_SB(dentry->d_sb); in ocfs2_dentry_unlock() local
2693 if (!ocfs2_is_hard_readonly(osb) && !ocfs2_mount_local(osb)) in ocfs2_dentry_unlock()
2694 ocfs2_cluster_unlock(osb, &dl->dl_lockres, level); in ocfs2_dentry_unlock()
2932 struct ocfs2_super *osb; in ocfs2_dlm_debug_open() local
2940 osb = inode->i_private; in ocfs2_dlm_debug_open()
2941 ocfs2_get_dlm_debug(osb->osb_dlm_debug); in ocfs2_dlm_debug_open()
2942 priv->p_dlm_debug = osb->osb_dlm_debug; in ocfs2_dlm_debug_open()
2958 static int ocfs2_dlm_init_debug(struct ocfs2_super *osb) in ocfs2_dlm_init_debug() argument
2961 struct ocfs2_dlm_debug *dlm_debug = osb->osb_dlm_debug; in ocfs2_dlm_init_debug()
2965 osb->osb_debug_root, in ocfs2_dlm_init_debug()
2966 osb, in ocfs2_dlm_init_debug()
2980 static void ocfs2_dlm_shutdown_debug(struct ocfs2_super *osb) in ocfs2_dlm_shutdown_debug() argument
2982 struct ocfs2_dlm_debug *dlm_debug = osb->osb_dlm_debug; in ocfs2_dlm_shutdown_debug()
2990 int ocfs2_dlm_init(struct ocfs2_super *osb) in ocfs2_dlm_init() argument
2995 if (ocfs2_mount_local(osb)) { in ocfs2_dlm_init()
2996 osb->node_num = 0; in ocfs2_dlm_init()
3000 status = ocfs2_dlm_init_debug(osb); in ocfs2_dlm_init()
3007 osb->dc_task = kthread_run(ocfs2_downconvert_thread, osb, "ocfs2dc-%s", in ocfs2_dlm_init()
3008 osb->uuid_str); in ocfs2_dlm_init()
3009 if (IS_ERR(osb->dc_task)) { in ocfs2_dlm_init()
3010 status = PTR_ERR(osb->dc_task); in ocfs2_dlm_init()
3011 osb->dc_task = NULL; in ocfs2_dlm_init()
3017 status = ocfs2_cluster_connect(osb->osb_cluster_stack, in ocfs2_dlm_init()
3018 osb->osb_cluster_name, in ocfs2_dlm_init()
3019 strlen(osb->osb_cluster_name), in ocfs2_dlm_init()
3020 osb->uuid_str, in ocfs2_dlm_init()
3021 strlen(osb->uuid_str), in ocfs2_dlm_init()
3022 &lproto, ocfs2_do_node_down, osb, in ocfs2_dlm_init()
3029 status = ocfs2_cluster_this_node(conn, &osb->node_num); in ocfs2_dlm_init()
3039 ocfs2_super_lock_res_init(&osb->osb_super_lockres, osb); in ocfs2_dlm_init()
3040 ocfs2_rename_lock_res_init(&osb->osb_rename_lockres, osb); in ocfs2_dlm_init()
3041 ocfs2_nfs_sync_lock_res_init(&osb->osb_nfs_sync_lockres, osb); in ocfs2_dlm_init()
3042 ocfs2_orphan_scan_lock_res_init(&osb->osb_orphan_scan.os_lockres, osb); in ocfs2_dlm_init()
3044 osb->cconn = conn; in ocfs2_dlm_init()
3047 ocfs2_dlm_shutdown_debug(osb); in ocfs2_dlm_init()
3048 if (osb->dc_task) in ocfs2_dlm_init()
3049 kthread_stop(osb->dc_task); in ocfs2_dlm_init()
3055 void ocfs2_dlm_shutdown(struct ocfs2_super *osb, in ocfs2_dlm_shutdown() argument
3058 ocfs2_drop_osb_locks(osb); in ocfs2_dlm_shutdown()
3066 if (osb->dc_task) { in ocfs2_dlm_shutdown()
3067 kthread_stop(osb->dc_task); in ocfs2_dlm_shutdown()
3068 osb->dc_task = NULL; in ocfs2_dlm_shutdown()
3071 ocfs2_lock_res_free(&osb->osb_super_lockres); in ocfs2_dlm_shutdown()
3072 ocfs2_lock_res_free(&osb->osb_rename_lockres); in ocfs2_dlm_shutdown()
3073 ocfs2_lock_res_free(&osb->osb_nfs_sync_lockres); in ocfs2_dlm_shutdown()
3074 ocfs2_lock_res_free(&osb->osb_orphan_scan.os_lockres); in ocfs2_dlm_shutdown()
3076 ocfs2_cluster_disconnect(osb->cconn, hangup_pending); in ocfs2_dlm_shutdown()
3077 osb->cconn = NULL; in ocfs2_dlm_shutdown()
3079 ocfs2_dlm_shutdown_debug(osb); in ocfs2_dlm_shutdown()
3082 static int ocfs2_drop_lock(struct ocfs2_super *osb, in ocfs2_drop_lock() argument
3149 ret = ocfs2_dlm_unlock(osb->cconn, &lockres->l_lksb, lkm_flags); in ocfs2_drop_lock()
3164 static void ocfs2_process_blocked_lock(struct ocfs2_super *osb,
3173 void ocfs2_mark_lockres_freeing(struct ocfs2_super *osb, in ocfs2_mark_lockres_freeing() argument
3184 if (lockres->l_flags & OCFS2_LOCK_QUEUED && current == osb->dc_task) { in ocfs2_mark_lockres_freeing()
3203 spin_lock_irqsave(&osb->dc_task_lock, flags2); in ocfs2_mark_lockres_freeing()
3205 osb->blocked_lock_count--; in ocfs2_mark_lockres_freeing()
3206 spin_unlock_irqrestore(&osb->dc_task_lock, flags2); in ocfs2_mark_lockres_freeing()
3215 ocfs2_process_blocked_lock(osb, lockres); in ocfs2_mark_lockres_freeing()
3233 void ocfs2_simple_drop_lockres(struct ocfs2_super *osb, in ocfs2_simple_drop_lockres() argument
3238 ocfs2_mark_lockres_freeing(osb, lockres); in ocfs2_simple_drop_lockres()
3239 ret = ocfs2_drop_lock(osb, lockres); in ocfs2_simple_drop_lockres()
3244 static void ocfs2_drop_osb_locks(struct ocfs2_super *osb) in ocfs2_drop_osb_locks() argument
3246 ocfs2_simple_drop_lockres(osb, &osb->osb_super_lockres); in ocfs2_drop_osb_locks()
3247 ocfs2_simple_drop_lockres(osb, &osb->osb_rename_lockres); in ocfs2_drop_osb_locks()
3248 ocfs2_simple_drop_lockres(osb, &osb->osb_nfs_sync_lockres); in ocfs2_drop_osb_locks()
3249 ocfs2_simple_drop_lockres(osb, &osb->osb_orphan_scan.os_lockres); in ocfs2_drop_osb_locks()
3312 static int ocfs2_downconvert_lock(struct ocfs2_super *osb, in ocfs2_downconvert_lock() argument
3327 ret = ocfs2_dlm_lock(osb->cconn, in ocfs2_downconvert_lock()
3333 lockres_clear_pending(lockres, generation, osb); in ocfs2_downconvert_lock()
3346 static int ocfs2_prepare_cancel_convert(struct ocfs2_super *osb, in ocfs2_prepare_cancel_convert() argument
3375 static int ocfs2_cancel_convert(struct ocfs2_super *osb, in ocfs2_cancel_convert() argument
3380 ret = ocfs2_dlm_unlock(osb->cconn, &lockres->l_lksb, in ocfs2_cancel_convert()
3392 static int ocfs2_unblock_lock(struct ocfs2_super *osb, in ocfs2_unblock_lock() argument
3448 ret = ocfs2_prepare_cancel_convert(osb, lockres); in ocfs2_unblock_lock()
3451 ret = ocfs2_cancel_convert(osb, lockres); in ocfs2_unblock_lock()
3574 ret = ocfs2_downconvert_lock(osb, lockres, new_level, set_lvb, in ocfs2_unblock_lock()
3674 static void ocfs2_dentry_post_unlock(struct ocfs2_super *osb, in ocfs2_dentry_post_unlock() argument
3678 ocfs2_dentry_lock_put(osb, dl); in ocfs2_dentry_post_unlock()
3833 struct ocfs2_super *osb = OCFS2_SB(oinfo->dqi_gi.dqi_sb); in ocfs2_qinfo_unlock() local
3836 if (!ocfs2_is_hard_readonly(osb) && !ocfs2_mount_local(osb)) in ocfs2_qinfo_unlock()
3837 ocfs2_cluster_unlock(osb, lockres, level); in ocfs2_qinfo_unlock()
3888 struct ocfs2_super *osb = OCFS2_SB(oinfo->dqi_gi.dqi_sb); in ocfs2_qinfo_lock() local
3893 if (ocfs2_is_hard_readonly(osb)) { in ocfs2_qinfo_lock()
3898 if (ocfs2_mount_local(osb)) in ocfs2_qinfo_lock()
3901 status = ocfs2_cluster_lock(osb, lockres, level, 0, 0); in ocfs2_qinfo_lock()
3922 struct ocfs2_super *osb = lockres->l_priv; in ocfs2_refcount_lock() local
3925 if (ocfs2_is_hard_readonly(osb)) in ocfs2_refcount_lock()
3928 if (ocfs2_mount_local(osb)) in ocfs2_refcount_lock()
3931 status = ocfs2_cluster_lock(osb, lockres, level, 0, 0); in ocfs2_refcount_lock()
3942 struct ocfs2_super *osb = lockres->l_priv; in ocfs2_refcount_unlock() local
3944 if (!ocfs2_mount_local(osb)) in ocfs2_refcount_unlock()
3945 ocfs2_cluster_unlock(osb, lockres, level); in ocfs2_refcount_unlock()
3948 static void ocfs2_process_blocked_lock(struct ocfs2_super *osb, in ocfs2_process_blocked_lock() argument
3974 status = ocfs2_unblock_lock(osb, lockres, &ctl); in ocfs2_process_blocked_lock()
3983 ocfs2_schedule_blocked_lock(osb, lockres); in ocfs2_process_blocked_lock()
3991 lockres->l_ops->post_unlock(osb, lockres); in ocfs2_process_blocked_lock()
3994 static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb, in ocfs2_schedule_blocked_lock() argument
4012 spin_lock_irqsave(&osb->dc_task_lock, flags); in ocfs2_schedule_blocked_lock()
4015 &osb->blocked_lock_list); in ocfs2_schedule_blocked_lock()
4016 osb->blocked_lock_count++; in ocfs2_schedule_blocked_lock()
4018 spin_unlock_irqrestore(&osb->dc_task_lock, flags); in ocfs2_schedule_blocked_lock()
4021 static void ocfs2_downconvert_thread_do_work(struct ocfs2_super *osb) in ocfs2_downconvert_thread_do_work() argument
4027 spin_lock_irqsave(&osb->dc_task_lock, flags); in ocfs2_downconvert_thread_do_work()
4030 osb->dc_work_sequence = osb->dc_wake_sequence; in ocfs2_downconvert_thread_do_work()
4032 processed = osb->blocked_lock_count; in ocfs2_downconvert_thread_do_work()
4039 while (processed && !list_empty(&osb->blocked_lock_list)) { in ocfs2_downconvert_thread_do_work()
4040 lockres = list_entry(osb->blocked_lock_list.next, in ocfs2_downconvert_thread_do_work()
4043 osb->blocked_lock_count--; in ocfs2_downconvert_thread_do_work()
4044 spin_unlock_irqrestore(&osb->dc_task_lock, flags); in ocfs2_downconvert_thread_do_work()
4049 ocfs2_process_blocked_lock(osb, lockres); in ocfs2_downconvert_thread_do_work()
4051 spin_lock_irqsave(&osb->dc_task_lock, flags); in ocfs2_downconvert_thread_do_work()
4053 spin_unlock_irqrestore(&osb->dc_task_lock, flags); in ocfs2_downconvert_thread_do_work()
4056 static int ocfs2_downconvert_thread_lists_empty(struct ocfs2_super *osb) in ocfs2_downconvert_thread_lists_empty() argument
4061 spin_lock_irqsave(&osb->dc_task_lock, flags); in ocfs2_downconvert_thread_lists_empty()
4062 if (list_empty(&osb->blocked_lock_list)) in ocfs2_downconvert_thread_lists_empty()
4065 spin_unlock_irqrestore(&osb->dc_task_lock, flags); in ocfs2_downconvert_thread_lists_empty()
4069 static int ocfs2_downconvert_thread_should_wake(struct ocfs2_super *osb) in ocfs2_downconvert_thread_should_wake() argument
4074 spin_lock_irqsave(&osb->dc_task_lock, flags); in ocfs2_downconvert_thread_should_wake()
4075 if (osb->dc_work_sequence != osb->dc_wake_sequence) in ocfs2_downconvert_thread_should_wake()
4077 spin_unlock_irqrestore(&osb->dc_task_lock, flags); in ocfs2_downconvert_thread_should_wake()
4085 struct ocfs2_super *osb = arg; in ocfs2_downconvert_thread() local
4090 ocfs2_downconvert_thread_lists_empty(osb))) { in ocfs2_downconvert_thread()
4092 wait_event_interruptible(osb->dc_event, in ocfs2_downconvert_thread()
4093 ocfs2_downconvert_thread_should_wake(osb) || in ocfs2_downconvert_thread()
4098 ocfs2_downconvert_thread_do_work(osb); in ocfs2_downconvert_thread()
4101 osb->dc_task = NULL; in ocfs2_downconvert_thread()
4105 void ocfs2_wake_downconvert_thread(struct ocfs2_super *osb) in ocfs2_wake_downconvert_thread() argument
4109 spin_lock_irqsave(&osb->dc_task_lock, flags); in ocfs2_wake_downconvert_thread()
4112 osb->dc_wake_sequence++; in ocfs2_wake_downconvert_thread()
4113 spin_unlock_irqrestore(&osb->dc_task_lock, flags); in ocfs2_wake_downconvert_thread()
4114 wake_up(&osb->dc_event); in ocfs2_wake_downconvert_thread()