git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[POWERPC] Add spinlock to request_phb_iospace()
[safe/jmp/linux-2.6]
/
drivers
/
md
/
kcopyd.c
diff --git
a/drivers/md/kcopyd.c
b/drivers/md/kcopyd.c
index
b46f6c5
..
dbc234e
100644
(file)
--- a/
drivers/md/kcopyd.c
+++ b/
drivers/md/kcopyd.c
@@
-1,5
+1,6
@@
/*
* Copyright (C) 2002 Sistina Software (UK) Limited.
/*
* Copyright (C) 2002 Sistina Software (UK) Limited.
+ * Copyright (C) 2006 Red Hat GmbH
*
* This file is released under the GPL.
*
*
* This file is released under the GPL.
*
@@
-45,6
+46,8
@@
struct kcopyd_client {
unsigned int nr_pages;
unsigned int nr_free_pages;
unsigned int nr_pages;
unsigned int nr_free_pages;
+ struct dm_io_client *io_client;
+
wait_queue_head_t destroyq;
atomic_t nr_jobs;
};
wait_queue_head_t destroyq;
atomic_t nr_jobs;
};
@@
-342,16
+345,20
@@
static void complete_io(unsigned long error, void *context)
static int run_io_job(struct kcopyd_job *job)
{
int r;
static int run_io_job(struct kcopyd_job *job)
{
int r;
+ struct dm_io_request io_req = {
+ .bi_rw = job->rw,
+ .mem.type = DM_IO_PAGE_LIST,
+ .mem.ptr.pl = job->pages,
+ .mem.offset = job->offset,
+ .notify.fn = complete_io,
+ .notify.context = job,
+ .client = job->kc->io_client,
+ };
if (job->rw == READ)
if (job->rw == READ)
- r = dm_io_async(1, &job->source, job->rw,
- job->pages,
- job->offset, complete_io, job);
-
+ r = dm_io(&io_req, 1, &job->source, NULL);
else
else
- r = dm_io_async(job->num_dests, job->dests, job->rw,
- job->pages,
- job->offset, complete_io, job);
+ r = dm_io(&io_req, job->num_dests, job->dests, NULL);
return r;
}
return r;
}
@@
-670,8
+677,9
@@
int kcopyd_client_create(unsigned int nr_pages, struct kcopyd_client **result)
return r;
}
return r;
}
- r = dm_io_get(nr_pages);
- if (r) {
+ kc->io_client = dm_io_client_create(nr_pages);
+ if (IS_ERR(kc->io_client)) {
+ r = PTR_ERR(kc->io_client);
client_free_pages(kc);
kfree(kc);
kcopyd_exit();
client_free_pages(kc);
kfree(kc);
kcopyd_exit();
@@
-691,7
+699,7
@@
void kcopyd_client_destroy(struct kcopyd_client *kc)
/* Wait for completion of all jobs submitted by this client. */
wait_event(kc->destroyq, !atomic_read(&kc->nr_jobs));
/* Wait for completion of all jobs submitted by this client. */
wait_event(kc->destroyq, !atomic_read(&kc->nr_jobs));
- dm_io_
put(kc->nr_pages
);
+ dm_io_
client_destroy(kc->io_client
);
client_free_pages(kc);
client_del(kc);
kfree(kc);
client_free_pages(kc);
client_del(kc);
kfree(kc);