|
@@ -452,16 +452,22 @@ static enum hrtimer_restart wbuf_timer_callback_nolock(struct hrtimer *timer)
|
|
|
*/
|
|
|
static void new_wbuf_timer_nolock(struct ubifs_wbuf *wbuf)
|
|
|
{
|
|
|
+ ktime_t softlimit = ktime_set(WBUF_TIMEOUT_SOFTLIMIT, 0);
|
|
|
+ unsigned long long delta;
|
|
|
+
|
|
|
+ delta = WBUF_TIMEOUT_HARDLIMIT - WBUF_TIMEOUT_SOFTLIMIT;
|
|
|
+ delta *= 1000000000ULL;
|
|
|
+
|
|
|
ubifs_assert(!hrtimer_active(&wbuf->timer));
|
|
|
+ ubifs_assert(delta <= ULONG_MAX);
|
|
|
|
|
|
if (wbuf->no_timer)
|
|
|
return;
|
|
|
dbg_io("set timer for jhead %s, %llu-%llu millisecs",
|
|
|
dbg_jhead(wbuf->jhead),
|
|
|
- div_u64(ktime_to_ns(wbuf->softlimit), USEC_PER_SEC),
|
|
|
- div_u64(ktime_to_ns(wbuf->softlimit) + wbuf->delta,
|
|
|
- USEC_PER_SEC));
|
|
|
- hrtimer_start_range_ns(&wbuf->timer, wbuf->softlimit, wbuf->delta,
|
|
|
+ div_u64(ktime_to_ns(softlimit), USEC_PER_SEC),
|
|
|
+ div_u64(ktime_to_ns(softlimit) + delta, USEC_PER_SEC));
|
|
|
+ hrtimer_start_range_ns(&wbuf->timer, softlimit, delta,
|
|
|
HRTIMER_MODE_REL);
|
|
|
}
|
|
|
|
|
@@ -1059,10 +1065,6 @@ int ubifs_wbuf_init(struct ubifs_info *c, struct ubifs_wbuf *wbuf)
|
|
|
|
|
|
hrtimer_init(&wbuf->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
|
|
|
wbuf->timer.function = wbuf_timer_callback_nolock;
|
|
|
- wbuf->softlimit = ktime_set(WBUF_TIMEOUT_SOFTLIMIT, 0);
|
|
|
- wbuf->delta = WBUF_TIMEOUT_HARDLIMIT - WBUF_TIMEOUT_SOFTLIMIT;
|
|
|
- wbuf->delta *= 1000000000ULL;
|
|
|
- ubifs_assert(wbuf->delta <= ULONG_MAX);
|
|
|
return 0;
|
|
|
}
|
|
|
|