Commit 7e10b43b authored by Mike Rapoport's avatar Mike Rapoport Committed by Andrei Vagin

lazy-pages: factor out insertion to sorted IOV list

Signed-off-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent 95ea4e92
...@@ -416,33 +416,39 @@ static int split_iov(struct lazy_iov *iov, unsigned long addr) ...@@ -416,33 +416,39 @@ static int split_iov(struct lazy_iov *iov, unsigned long addr)
return 0; return 0;
} }
static void merge_iov_lists(struct list_head *src, struct list_head *dst) static void iov_list_insert(struct lazy_iov *new, struct list_head *dst)
{ {
struct lazy_iov *iov, *p, *n; struct lazy_iov *iov;
if (list_empty(src))
return;
if (list_empty(dst)) { if (list_empty(dst)) {
iov = list_first_entry(src, struct lazy_iov, l); list_move(&new->l, dst);
list_move(&iov->l, dst); return;
} }
list_for_each_entry_safe(iov, n, src, l) { list_for_each_entry(iov, dst, l) {
list_for_each_entry(p, dst, l) { if (new->start < iov->start) {
if (iov->start < p->start) { list_move_tail(&new->l, &iov->l);
list_move_tail(&iov->l, &p->l); break;
break; }
} if (list_is_last(&iov->l, dst) &&
if (list_is_last(&p->l, dst) && new->start > iov->start) {
iov->start > p->start) { list_move(&new->l, &iov->l);
list_move(&iov->l, &p->l); break;
break;
}
} }
} }
} }
static void merge_iov_lists(struct list_head *src, struct list_head *dst)
{
struct lazy_iov *iov, *n;
if (list_empty(src))
return;
list_for_each_entry_safe(iov, n, src, l)
iov_list_insert(iov, dst);
}
static int __copy_iov_list(struct list_head *src, struct list_head *dst) static int __copy_iov_list(struct list_head *src, struct list_head *dst)
{ {
struct lazy_iov *iov, *new; struct lazy_iov *iov, *new;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment