This patch relocates cached_en not only to be covered by spin_lock, but also
to set once after checking out completely.
Reviewed-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
while (node) {
en = rb_entry(node, struct extent_node, rb_node);
- if (fofs < en->ei.fofs) {
+ if (fofs < en->ei.fofs)
node = node->rb_left;
- } else if (fofs >= en->ei.fofs + en->ei.len) {
+ else if (fofs >= en->ei.fofs + en->ei.len)
node = node->rb_right;
- } else {
- et->cached_en = en;
+ else
return en;
- }
}
return NULL;
}
spin_lock(&sbi->extent_lock);
if (!list_empty(&en->list))
list_move_tail(&en->list, &sbi->extent_list);
+ et->cached_en = en;
spin_unlock(&sbi->extent_lock);
stat_inc_read_hit(sbi->sb);
}