dlm: change lock time stamping

Use ktime instead of jiffies for timestamping lkb's. Also stamp the
time on every lkb whenever it's added to a resource queue, instead of
just stamping locks subject to timeouts. This will allow us to use
timestamps more widely for debugging all locks.

Signed-off-by: David Teigland <teigland@redhat.com>

+19 -19
+7 -7
fs/dlm/debug_fs.c
··· 162 162 163 163 static void print_lock(struct seq_file *s, struct dlm_lkb *lkb, struct dlm_rsb *r) 164 164 { 165 - unsigned int waiting = 0; 166 - uint64_t xid = 0; 165 + u64 xid = 0; 166 + u64 us; 167 167 168 168 if (lkb->lkb_flags & DLM_IFL_USER) { 169 169 if (lkb->lkb_ua) 170 170 xid = lkb->lkb_ua->xid; 171 171 } 172 172 173 - if (lkb->lkb_timestamp) 174 - waiting = jiffies_to_msecs(jiffies - lkb->lkb_timestamp); 173 + /* microseconds since lkb was added to current queue */ 174 + us = ktime_to_us(ktime_sub(ktime_get(), lkb->lkb_timestamp)); 175 175 176 - /* id nodeid remid pid xid exflags flags sts grmode rqmode time_ms 176 + /* id nodeid remid pid xid exflags flags sts grmode rqmode time_us 177 177 r_nodeid r_len r_name */ 178 178 179 - seq_printf(s, "%x %d %x %u %llu %x %x %d %d %d %u %u %d \"%s\"\n", 179 + seq_printf(s, "%x %d %x %u %llu %x %x %d %d %d %llu %u %d \"%s\"\n", 180 180 lkb->lkb_id, 181 181 lkb->lkb_nodeid, 182 182 lkb->lkb_remid, ··· 187 187 lkb->lkb_status, 188 188 lkb->lkb_grmode, 189 189 lkb->lkb_rqmode, 190 - waiting, 190 + (unsigned long long)us, 191 191 r->res_nodeid, 192 192 r->res_length, 193 193 r->res_name);
+1 -1
fs/dlm/dlm_internal.h
··· 245 245 struct list_head lkb_astqueue; /* need ast to be sent */ 246 246 struct list_head lkb_ownqueue; /* list of locks for a process */ 247 247 struct list_head lkb_time_list; 248 - unsigned long lkb_timestamp; 248 + ktime_t lkb_timestamp; 249 249 unsigned long lkb_timeout_cs; 250 250 251 251 char *lkb_lvbptr;
+11 -10
fs/dlm/lock.c
··· 742 742 743 743 DLM_ASSERT(!lkb->lkb_status, dlm_print_lkb(lkb);); 744 744 745 + lkb->lkb_timestamp = ktime_get(); 746 + 745 747 lkb->lkb_status = status; 746 748 747 749 switch (status) { ··· 1013 1011 { 1014 1012 struct dlm_ls *ls = lkb->lkb_resource->res_ls; 1015 1013 1016 - if (is_master_copy(lkb)) { 1017 - lkb->lkb_timestamp = jiffies; 1014 + if (is_master_copy(lkb)) 1018 1015 return; 1019 - } 1020 1016 1021 1017 if (test_bit(LSFL_TIMEWARN, &ls->ls_flags) && 1022 1018 !(lkb->lkb_exflags & DLM_LKF_NODLCKWT)) { ··· 1029 1029 DLM_ASSERT(list_empty(&lkb->lkb_time_list), dlm_print_lkb(lkb);); 1030 1030 mutex_lock(&ls->ls_timeout_mutex); 1031 1031 hold_lkb(lkb); 1032 - lkb->lkb_timestamp = jiffies; 1033 1032 list_add_tail(&lkb->lkb_time_list, &ls->ls_timeout); 1034 1033 mutex_unlock(&ls->ls_timeout_mutex); 1035 1034 } ··· 1056 1057 struct dlm_rsb *r; 1057 1058 struct dlm_lkb *lkb; 1058 1059 int do_cancel, do_warn; 1060 + s64 wait_us; 1059 1061 1060 1062 for (;;) { 1061 1063 if (dlm_locking_stopped(ls)) ··· 1067 1067 mutex_lock(&ls->ls_timeout_mutex); 1068 1068 list_for_each_entry(lkb, &ls->ls_timeout, lkb_time_list) { 1069 1069 1070 + wait_us = ktime_to_us(ktime_sub(ktime_get(), 1071 + lkb->lkb_timestamp)); 1072 + 1070 1073 if ((lkb->lkb_exflags & DLM_LKF_TIMEOUT) && 1071 - time_after_eq(jiffies, lkb->lkb_timestamp + 1072 - lkb->lkb_timeout_cs * HZ/100)) 1074 + wait_us >= (lkb->lkb_timeout_cs * 10000)) 1073 1075 do_cancel = 1; 1074 1076 1075 1077 if ((lkb->lkb_flags & DLM_IFL_WATCH_TIMEWARN) && 1076 - time_after_eq(jiffies, lkb->lkb_timestamp + 1077 - dlm_config.ci_timewarn_cs * HZ/100)) 1078 + wait_us >= dlm_config.ci_timewarn_cs * 10000) 1078 1079 do_warn = 1; 1079 1080 1080 1081 if (!do_cancel && !do_warn) ··· 1121 1120 void dlm_adjust_timeouts(struct dlm_ls *ls) 1122 1121 { 1123 1122 struct dlm_lkb *lkb; 1124 - long adj = jiffies - ls->ls_recover_begin; 1123 + u64 adj_us = jiffies_to_usecs(jiffies - ls->ls_recover_begin); 1125 1124 1126 1125 ls->ls_recover_begin = 0; 1127 1126 mutex_lock(&ls->ls_timeout_mutex); 1128 1127 list_for_each_entry(lkb, &ls->ls_timeout, lkb_time_list) 1129 - lkb->lkb_timestamp += adj; 1128 + lkb->lkb_timestamp = ktime_add_us(lkb->lkb_timestamp, adj_us); 1130 1129 mutex_unlock(&ls->ls_timeout_mutex); 1131 1130 } 1132 1131
-1
fs/dlm/netlink.c
··· 115 115 data->status = lkb->lkb_status; 116 116 data->grmode = lkb->lkb_grmode; 117 117 data->rqmode = lkb->lkb_rqmode; 118 - data->timestamp = lkb->lkb_timestamp; 119 118 if (lkb->lkb_ua) 120 119 data->xid = lkb->lkb_ua->xid; 121 120 if (r) {