blob: 7651d395127fffdb2c442c486eca9855976dbae2 [file] [log] [blame]
Mauro Carvalho Chehabf0ba4372019-06-12 14:52:43 -03001======
Linus Torvalds1da177e2005-04-16 15:20:36 -07002kcopyd
3======
4
5Kcopyd provides the ability to copy a range of sectors from one block-device
6to one or more other block-devices, with an asynchronous completion
7notification. It is used by dm-snapshot and dm-mirror.
8
9Users of kcopyd must first create a client and indicate how many memory pages
10to set aside for their copy jobs. This is done with a call to
Mauro Carvalho Chehabf0ba4372019-06-12 14:52:43 -030011kcopyd_client_create()::
Linus Torvalds1da177e2005-04-16 15:20:36 -070012
13 int kcopyd_client_create(unsigned int num_pages,
14 struct kcopyd_client **result);
15
16To start a copy job, the user must set up io_region structures to describe
17the source and destinations of the copy. Each io_region indicates a
18block-device along with the starting sector and size of the region. The source
19of the copy is given as one io_region structure, and the destinations of the
Mauro Carvalho Chehabf0ba4372019-06-12 14:52:43 -030020copy are given as an array of io_region structures::
Linus Torvalds1da177e2005-04-16 15:20:36 -070021
22 struct io_region {
23 struct block_device *bdev;
24 sector_t sector;
25 sector_t count;
26 };
27
28To start the copy, the user calls kcopyd_copy(), passing in the client
29pointer, pointers to the source and destination io_regions, the name of a
Mauro Carvalho Chehabf0ba4372019-06-12 14:52:43 -030030completion callback routine, and a pointer to some context data for the copy::
Linus Torvalds1da177e2005-04-16 15:20:36 -070031
32 int kcopyd_copy(struct kcopyd_client *kc, struct io_region *from,
33 unsigned int num_dests, struct io_region *dests,
34 unsigned int flags, kcopyd_notify_fn fn, void *context);
35
36 typedef void (*kcopyd_notify_fn)(int read_err, unsigned int write_err,
37 void *context);
38
39When the copy completes, kcopyd will call the user's completion routine,
40passing back the user's context pointer. It will also indicate if a read or
41write error occurred during the copy.
42
43When a user is done with all their copy jobs, they should call
44kcopyd_client_destroy() to delete the kcopyd client, which will release the
Mauro Carvalho Chehabf0ba4372019-06-12 14:52:43 -030045associated memory pages::
Linus Torvalds1da177e2005-04-16 15:20:36 -070046
47 void kcopyd_client_destroy(struct kcopyd_client *kc);