435
431
#ifdef CONFIG_OCFS2_FS_STATS
436
432
static void ocfs2_init_lock_stats(struct ocfs2_lock_res *res)
438
res->l_lock_num_prmode = 0;
439
res->l_lock_num_prmode_failed = 0;
440
res->l_lock_total_prmode = 0;
441
res->l_lock_max_prmode = 0;
442
res->l_lock_num_exmode = 0;
443
res->l_lock_num_exmode_failed = 0;
444
res->l_lock_total_exmode = 0;
445
res->l_lock_max_exmode = 0;
446
434
res->l_lock_refresh = 0;
435
memset(&res->l_lock_prmode, 0, sizeof(struct ocfs2_lock_stats));
436
memset(&res->l_lock_exmode, 0, sizeof(struct ocfs2_lock_stats));
449
439
static void ocfs2_update_lock_stats(struct ocfs2_lock_res *res, int level,
450
440
struct ocfs2_mask_waiter *mw, int ret)
452
unsigned long long *num, *sum;
453
unsigned int *max, *failed;
454
struct timespec ts = current_kernel_time();
455
unsigned long long time = timespec_to_ns(&ts) - mw->mw_lock_start;
444
struct ocfs2_lock_stats *stats;
457
if (level == LKM_PRMODE) {
458
num = &res->l_lock_num_prmode;
459
sum = &res->l_lock_total_prmode;
460
max = &res->l_lock_max_prmode;
461
failed = &res->l_lock_num_prmode_failed;
462
} else if (level == LKM_EXMODE) {
463
num = &res->l_lock_num_exmode;
464
sum = &res->l_lock_total_exmode;
465
max = &res->l_lock_max_exmode;
466
failed = &res->l_lock_num_exmode_failed;
446
if (level == LKM_PRMODE)
447
stats = &res->l_lock_prmode;
448
else if (level == LKM_EXMODE)
449
stats = &res->l_lock_exmode;
453
kt = ktime_sub(ktime_get(), mw->mw_lock_start);
454
usec = ktime_to_us(kt);
457
stats->ls_total += ktime_to_ns(kt);
459
if (unlikely(stats->ls_gets) == 0) {
461
stats->ls_total = ktime_to_ns(kt);
464
if (stats->ls_max < usec)
465
stats->ls_max = usec;
478
471
static inline void ocfs2_track_lock_refresh(struct ocfs2_lock_res *lockres)
483
476
static inline void ocfs2_init_start_time(struct ocfs2_mask_waiter *mw)
485
struct timespec ts = current_kernel_time();
486
mw->mw_lock_start = timespec_to_ns(&ts);
478
mw->mw_lock_start = ktime_get();
489
481
static inline void ocfs2_init_lock_stats(struct ocfs2_lock_res *res)
860
840
lockres_clear_flags(lockres, OCFS2_LOCK_BLOCKED);
862
842
lockres_clear_flags(lockres, OCFS2_LOCK_BUSY);
867
845
static inline void ocfs2_generic_handle_convert_action(struct ocfs2_lock_res *lockres)
871
847
BUG_ON(!(lockres->l_flags & OCFS2_LOCK_BUSY));
872
848
BUG_ON(!(lockres->l_flags & OCFS2_LOCK_ATTACHED));
889
865
lockres_or_flags(lockres, OCFS2_LOCK_UPCONVERT_FINISHING);
891
867
lockres_clear_flags(lockres, OCFS2_LOCK_BUSY);
896
870
static inline void ocfs2_generic_handle_attach_action(struct ocfs2_lock_res *lockres)
900
872
BUG_ON((!(lockres->l_flags & OCFS2_LOCK_BUSY)));
901
873
BUG_ON(lockres->l_flags & OCFS2_LOCK_ATTACHED);
908
880
lockres->l_level = lockres->l_requested;
909
881
lockres_or_flags(lockres, OCFS2_LOCK_ATTACHED);
910
882
lockres_clear_flags(lockres, OCFS2_LOCK_BUSY);
915
885
static int ocfs2_generic_handle_bast(struct ocfs2_lock_res *lockres,
918
888
int needs_downconvert = 0;
921
890
assert_spin_locked(&lockres->l_lock);
939
908
if (needs_downconvert)
940
909
lockres_or_flags(lockres, OCFS2_LOCK_BLOCKED);
942
mlog_exit(needs_downconvert);
910
mlog(0, "needs_downconvert = %d\n", needs_downconvert);
943
911
return needs_downconvert;
1696
1646
BUG_ON(!inode);
1700
1648
mlog(0, "inode %llu take %s RW lock\n",
1701
1649
(unsigned long long)OCFS2_I(inode)->ip_blkno,
1702
1650
write ? "EXMODE" : "PRMODE");
1704
if (ocfs2_mount_local(osb)) {
1652
if (ocfs2_mount_local(osb))
1709
1655
lockres = &OCFS2_I(inode)->ip_rw_lockres;
1725
1670
struct ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_rw_lockres;
1726
1671
struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1730
1673
mlog(0, "inode %llu drop %s RW lock\n",
1731
1674
(unsigned long long)OCFS2_I(inode)->ip_blkno,
1732
1675
write ? "EXMODE" : "PRMODE");
1734
1677
if (!ocfs2_mount_local(osb))
1735
1678
ocfs2_cluster_unlock(OCFS2_SB(inode->i_sb), lockres, level);
2556
2464
struct ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_inode_lockres;
2557
2465
struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2561
2467
mlog(0, "inode %llu drop %s META lock\n",
2562
2468
(unsigned long long)OCFS2_I(inode)->ip_blkno,
2563
2469
ex ? "EXMODE" : "PRMODE");
2872
/* So that debugfs.ocfs2 can determine which format is being used */
2873
#define OCFS2_DLM_DEBUG_STR_VERSION 2
2774
* Version is used by debugfs.ocfs2 to determine the format being used
2777
* - Lock stats printed
2779
* - Max time in lock stats is in usecs (instead of nsecs)
2781
#define OCFS2_DLM_DEBUG_STR_VERSION 3
2874
2782
static int ocfs2_dlm_seq_show(struct seq_file *m, void *v)
2912
2820
seq_printf(m, "0x%x\t", lvb[i]);
2914
2822
#ifdef CONFIG_OCFS2_FS_STATS
2915
# define lock_num_prmode(_l) (_l)->l_lock_num_prmode
2916
# define lock_num_exmode(_l) (_l)->l_lock_num_exmode
2917
# define lock_num_prmode_failed(_l) (_l)->l_lock_num_prmode_failed
2918
# define lock_num_exmode_failed(_l) (_l)->l_lock_num_exmode_failed
2919
# define lock_total_prmode(_l) (_l)->l_lock_total_prmode
2920
# define lock_total_exmode(_l) (_l)->l_lock_total_exmode
2921
# define lock_max_prmode(_l) (_l)->l_lock_max_prmode
2922
# define lock_max_exmode(_l) (_l)->l_lock_max_exmode
2923
# define lock_refresh(_l) (_l)->l_lock_refresh
2823
# define lock_num_prmode(_l) ((_l)->l_lock_prmode.ls_gets)
2824
# define lock_num_exmode(_l) ((_l)->l_lock_exmode.ls_gets)
2825
# define lock_num_prmode_failed(_l) ((_l)->l_lock_prmode.ls_fail)
2826
# define lock_num_exmode_failed(_l) ((_l)->l_lock_exmode.ls_fail)
2827
# define lock_total_prmode(_l) ((_l)->l_lock_prmode.ls_total)
2828
# define lock_total_exmode(_l) ((_l)->l_lock_exmode.ls_total)
2829
# define lock_max_prmode(_l) ((_l)->l_lock_prmode.ls_max)
2830
# define lock_max_exmode(_l) ((_l)->l_lock_exmode.ls_max)
2831
# define lock_refresh(_l) ((_l)->l_lock_refresh)
2925
# define lock_num_prmode(_l) (0ULL)
2926
# define lock_num_exmode(_l) (0ULL)
2833
# define lock_num_prmode(_l) (0)
2834
# define lock_num_exmode(_l) (0)
2927
2835
# define lock_num_prmode_failed(_l) (0)
2928
2836
# define lock_num_exmode_failed(_l) (0)
2929
2837
# define lock_total_prmode(_l) (0ULL)
3353
3250
u32 dlm_flags = DLM_LKF_CONVERT;
3357
3252
mlog(ML_BASTS, "lockres %s, level %d => %d\n", lockres->l_name,
3358
3253
lockres->l_level, new_level);
3879
3762
struct ocfs2_super *osb = OCFS2_SB(oinfo->dqi_gi.dqi_sb);
3880
3763
int level = ex ? DLM_LOCK_EX : DLM_LOCK_PR;
3883
3765
if (!ocfs2_is_hard_readonly(osb) && !ocfs2_mount_local(osb))
3884
3766
ocfs2_cluster_unlock(osb, lockres, level);
3888
3769
static int ocfs2_refresh_qinfo(struct ocfs2_mem_dqinfo *oinfo)
4042
3918
if (ctl.unblock_action != UNBLOCK_CONTINUE
4043
3919
&& lockres->l_ops->post_unlock)
4044
3920
lockres->l_ops->post_unlock(osb, lockres);
4049
3923
static void ocfs2_schedule_blocked_lock(struct ocfs2_super *osb,
4050
3924
struct ocfs2_lock_res *lockres)
4054
3926
assert_spin_locked(&lockres->l_lock);
4056
3928
if (lockres->l_flags & OCFS2_LOCK_FREEING) {