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)
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;
if (list_empty(src))
return;
struct lazy_iov *iov;
if (list_empty(dst)) {
iov = list_first_entry(src, struct lazy_iov, l);
list_move(&iov->l, dst);
list_move(&new->l, dst);
return;
}
list_for_each_entry_safe(iov, n, src, l) {
list_for_each_entry(p, dst, l) {
if (iov->start < p->start) {
list_move_tail(&iov->l, &p->l);
break;
}
if (list_is_last(&p->l, dst) &&
iov->start > p->start) {
list_move(&iov->l, &p->l);
break;
}
list_for_each_entry(iov, dst, l) {
if (new->start < iov->start) {
list_move_tail(&new->l, &iov->l);
break;
}
if (list_is_last(&iov->l, dst) &&
new->start > iov->start) {
list_move(&new->l, &iov->l);
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)
{
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