mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
UBIFS: slightly optimize write-buffer timer usage
This patch adds the following minor optimization: 1. If write-buffer does not use the timer, indicate it with the wbuf->no_timer variable, instead of using the wbuf->softlimit variable. This is better because wbuf->softlimit is of ktime_t type, and the ktime_to_ns function contains 64-bit multiplication. 2. Do not call the 'hrtimer_cancel()' function for write-buffers which do not use timers. 3. Do not cancel the timer in 'ubifs_put_super()' because the synchronization function does this. This patch also removes a confusing comment. Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This commit is contained in:
parent
70aee2f153
commit
0b335b9d7d
3 changed files with 9 additions and 12 deletions
|
@ -312,7 +312,7 @@ static void new_wbuf_timer_nolock(struct ubifs_wbuf *wbuf)
|
|||
{
|
||||
ubifs_assert(!hrtimer_active(&wbuf->timer));
|
||||
|
||||
if (!ktime_to_ns(wbuf->softlimit))
|
||||
if (wbuf->no_timer)
|
||||
return;
|
||||
dbg_io("set timer for jhead %d, %llu-%llu millisecs", wbuf->jhead,
|
||||
ktime_to_ns(wbuf->softlimit)/USEC_PER_SEC,
|
||||
|
@ -327,11 +327,8 @@ static void new_wbuf_timer_nolock(struct ubifs_wbuf *wbuf)
|
|||
*/
|
||||
static void cancel_wbuf_timer_nolock(struct ubifs_wbuf *wbuf)
|
||||
{
|
||||
/*
|
||||
* If the syncer is waiting for the lock (from the background thread's
|
||||
* context) and another task is changing write-buffer then the syncing
|
||||
* should be canceled.
|
||||
*/
|
||||
if (wbuf->no_timer)
|
||||
return;
|
||||
wbuf->need_sync = 0;
|
||||
hrtimer_cancel(&wbuf->timer);
|
||||
}
|
||||
|
|
|
@ -797,7 +797,7 @@ static int alloc_wbufs(struct ubifs_info *c)
|
|||
* does not need to be synchronized by timer.
|
||||
*/
|
||||
c->jheads[GCHD].wbuf.dtype = UBI_LONGTERM;
|
||||
c->jheads[GCHD].wbuf.softlimit = ktime_set(0, 0);
|
||||
c->jheads[GCHD].wbuf.no_timer = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1754,10 +1754,8 @@ static void ubifs_put_super(struct super_block *sb)
|
|||
|
||||
/* Synchronize write-buffers */
|
||||
if (c->jheads)
|
||||
for (i = 0; i < c->jhead_cnt; i++) {
|
||||
for (i = 0; i < c->jhead_cnt; i++)
|
||||
ubifs_wbuf_sync(&c->jheads[i].wbuf);
|
||||
hrtimer_cancel(&c->jheads[i].wbuf.timer);
|
||||
}
|
||||
|
||||
/*
|
||||
* On fatal errors c->ro_media is set to 1, in which case we do
|
||||
|
|
|
@ -654,7 +654,8 @@ typedef int (*ubifs_lpt_scan_callback)(struct ubifs_info *c,
|
|||
* @delta: hard and soft timeouts delta (the timer expire inteval is @softlimit
|
||||
* and @softlimit + @delta)
|
||||
* @timer: write-buffer timer
|
||||
* @need_sync: it is set if its timer expired and needs sync
|
||||
* @no_timer: non-zero if this write-buffer does not timer
|
||||
* @need_sync: non-zero if its timer expired and needs sync
|
||||
* @next_ino: points to the next position of the following inode number
|
||||
* @inodes: stores the inode numbers of the nodes which are in wbuf
|
||||
*
|
||||
|
@ -683,7 +684,8 @@ struct ubifs_wbuf {
|
|||
ktime_t softlimit;
|
||||
unsigned long long delta;
|
||||
struct hrtimer timer;
|
||||
int need_sync;
|
||||
unsigned int no_timer:1;
|
||||
unsigned int need_sync:1;
|
||||
int next_ino;
|
||||
ino_t *inodes;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue