The latest -mm removes the page->list field, so we're going to have to make changes to dm-io and kcopyd. - Joe dm-io: stop using page->list --- diff/drivers/md/dm-io.c 2004-03-11 11:15:07.000000000 +0000 +++ source/drivers/md/dm-io.c 2004-03-11 11:15:58.000000000 +0000 @@ -373,25 +373,26 @@ void list_get_page(struct dpages *dp, struct page **p, unsigned long *len, unsigned *offset) { unsigned o = dp->context_u; + struct page_list *pl = (struct page_list *) dp->context_ptr; - *p = (struct page *) dp->context_ptr; + *p = pl->page; *len = PAGE_SIZE - o; *offset = o; } void list_next_page(struct dpages *dp) { - struct page *page = (struct page *) dp->context_ptr; - dp->context_ptr = list_entry(page->list.next, struct page, list); + struct page_list *pl = (struct page_list *) dp->context_ptr; + dp->context_ptr = pl->next; dp->context_u = 0; } -void list_dp_init(struct dpages *dp, struct page *page, unsigned offset) +void list_dp_init(struct dpages *dp, struct page_list *pl, unsigned offset) { dp->get_page = list_get_page; dp->next_page = list_next_page; dp->context_u = offset; - dp->context_ptr = page; + dp->context_ptr = pl; } /* @@ -537,11 +538,11 @@ int async_io(unsigned int num_regions, s } int dm_io_sync(unsigned int num_regions, struct io_region *where, int rw, - struct page *pages, unsigned int offset, + struct page_list *pl, unsigned int offset, unsigned long *error_bits) { struct dpages dp; - list_dp_init(&dp, pages, offset); + list_dp_init(&dp, pl, offset); return sync_io(num_regions, where, rw, &dp, error_bits); } @@ -554,11 +555,11 @@ int dm_io_sync_bvec(unsigned int num_reg } int dm_io_async(unsigned int num_regions, struct io_region *where, int rw, - struct page *pages, unsigned int offset, + struct page_list *pl, unsigned int offset, io_notify_fn fn, void *context) { struct dpages dp; - list_dp_init(&dp, pages, offset); + list_dp_init(&dp, pl, offset); return async_io(num_regions, where, rw, &dp, fn, context); } --- diff/drivers/md/dm-io.h 2004-03-11 11:15:07.000000000 +0000 +++ source/drivers/md/dm-io.h 2004-03-11 11:15:58.000000000 +0000 @@ -18,6 +18,11 @@ struct io_region { sector_t count; }; +struct page_list { + struct page_list *next; + struct page *page; +}; + /* * 'error' is a bitset, with each bit indicating whether an error @@ -36,7 +41,6 @@ typedef void (*io_notify_fn)(unsigned lo int dm_io_get(unsigned int num_pages); void dm_io_put(unsigned int num_pages); - /* * Synchronous IO. * @@ -45,7 +49,7 @@ void dm_io_put(unsigned int num_pages); * regions with a zero count field will be ignored. */ int dm_io_sync(unsigned int num_regions, struct io_region *where, int rw, - struct page *pages, unsigned int offset, + struct page_list *pl, unsigned int offset, unsigned long *error_bits); int dm_io_sync_bvec(unsigned int num_regions, struct io_region *where, int rw, @@ -59,7 +63,7 @@ int dm_io_sync_bvec(unsigned int num_reg * the function takes a copy. */ int dm_io_async(unsigned int num_regions, struct io_region *where, int rw, - struct page *pages, unsigned int offset, + struct page_list *pl, unsigned int offset, io_notify_fn fn, void *context); int dm_io_async_bvec(unsigned int num_regions, struct io_region *where, int rw,