mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-09-21 11:53:01 +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
|
@ -312,7 +312,7 @@ static void new_wbuf_timer_nolock(struct ubifs_wbuf *wbuf)
|
||||||
{
|
{
|
||||||
ubifs_assert(!hrtimer_active(&wbuf->timer));
|
ubifs_assert(!hrtimer_active(&wbuf->timer));
|
||||||
|
|
||||||
if (!ktime_to_ns(wbuf->softlimit))
|
if (wbuf->no_timer)
|
||||||
return;
|
return;
|
||||||
dbg_io("set timer for jhead %d, %llu-%llu millisecs", wbuf->jhead,
|
dbg_io("set timer for jhead %d, %llu-%llu millisecs", wbuf->jhead,
|
||||||
ktime_to_ns(wbuf->softlimit)/USEC_PER_SEC,
|
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)
|
static void cancel_wbuf_timer_nolock(struct ubifs_wbuf *wbuf)
|
||||||
{
|
{
|
||||||
/*
|
if (wbuf->no_timer)
|
||||||
* If the syncer is waiting for the lock (from the background thread's
|
return;
|
||||||
* context) and another task is changing write-buffer then the syncing
|
|
||||||
* should be canceled.
|
|
||||||
*/
|
|
||||||
wbuf->need_sync = 0;
|
wbuf->need_sync = 0;
|
||||||
hrtimer_cancel(&wbuf->timer);
|
hrtimer_cancel(&wbuf->timer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -797,7 +797,7 @@ static int alloc_wbufs(struct ubifs_info *c)
|
||||||
* does not need to be synchronized by timer.
|
* does not need to be synchronized by timer.
|
||||||
*/
|
*/
|
||||||
c->jheads[GCHD].wbuf.dtype = UBI_LONGTERM;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1754,10 +1754,8 @@ static void ubifs_put_super(struct super_block *sb)
|
||||||
|
|
||||||
/* Synchronize write-buffers */
|
/* Synchronize write-buffers */
|
||||||
if (c->jheads)
|
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);
|
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
|
* 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
|
* @delta: hard and soft timeouts delta (the timer expire inteval is @softlimit
|
||||||
* and @softlimit + @delta)
|
* and @softlimit + @delta)
|
||||||
* @timer: write-buffer timer
|
* @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
|
* @next_ino: points to the next position of the following inode number
|
||||||
* @inodes: stores the inode numbers of the nodes which are in wbuf
|
* @inodes: stores the inode numbers of the nodes which are in wbuf
|
||||||
*
|
*
|
||||||
|
@ -683,7 +684,8 @@ struct ubifs_wbuf {
|
||||||
ktime_t softlimit;
|
ktime_t softlimit;
|
||||||
unsigned long long delta;
|
unsigned long long delta;
|
||||||
struct hrtimer timer;
|
struct hrtimer timer;
|
||||||
int need_sync;
|
unsigned int no_timer:1;
|
||||||
|
unsigned int need_sync:1;
|
||||||
int next_ino;
|
int next_ino;
|
||||||
ino_t *inodes;
|
ino_t *inodes;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue