brintos

brintos / linux-shallow public Read only

0
0
Text · 1.9 KiB · 7651d39 Raw
48 lines · plain
1======2kcopyd3======4 5Kcopyd provides the ability to copy a range of sectors from one block-device6to one or more other block-devices, with an asynchronous completion7notification. It is used by dm-snapshot and dm-mirror.8 9Users of kcopyd must first create a client and indicate how many memory pages10to set aside for their copy jobs. This is done with a call to11kcopyd_client_create()::12 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 describe17the source and destinations of the copy. Each io_region indicates a18block-device along with the starting sector and size of the region. The source19of the copy is given as one io_region structure, and the destinations of the20copy are given as an array of io_region structures::21 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 client29pointer, pointers to the source and destination io_regions, the name of a30completion callback routine, and a pointer to some context data for the copy::31 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 or41write error occurred during the copy.42 43When a user is done with all their copy jobs, they should call44kcopyd_client_destroy() to delete the kcopyd client, which will release the45associated memory pages::46 47   void kcopyd_client_destroy(struct kcopyd_client *kc);48