mirror of https://gitee.com/openkylin/linux.git
dm io: clean interface
Clean up the dm-io interface to prepare for publishing it in include/linux. Signed-off-by: Heinz Mauelshagen <hjm@redhat.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
This commit is contained in:
parent
e01fd7eeb0
commit
22a1ceb1e6
|
@ -159,7 +159,7 @@ static void free_area(struct pstore *ps)
|
|||
}
|
||||
|
||||
struct mdata_req {
|
||||
struct io_region *where;
|
||||
struct dm_io_region *where;
|
||||
struct dm_io_request *io_req;
|
||||
struct work_struct work;
|
||||
int result;
|
||||
|
@ -177,7 +177,7 @@ static void do_metadata(struct work_struct *work)
|
|||
*/
|
||||
static int chunk_io(struct pstore *ps, uint32_t chunk, int rw, int metadata)
|
||||
{
|
||||
struct io_region where = {
|
||||
struct dm_io_region where = {
|
||||
.bdev = ps->snap->cow->bdev,
|
||||
.sector = ps->snap->chunk_size * chunk,
|
||||
.count = ps->snap->chunk_size,
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
*/
|
||||
|
||||
#include "dm-io.h"
|
||||
#include "dm.h"
|
||||
|
||||
#include <linux/bio.h>
|
||||
#include <linux/mempool.h>
|
||||
|
@ -271,7 +272,7 @@ static void km_dp_init(struct dpages *dp, void *data)
|
|||
/*-----------------------------------------------------------------
|
||||
* IO routines that accept a list of pages.
|
||||
*---------------------------------------------------------------*/
|
||||
static void do_region(int rw, unsigned int region, struct io_region *where,
|
||||
static void do_region(int rw, unsigned region, struct dm_io_region *where,
|
||||
struct dpages *dp, struct io *io)
|
||||
{
|
||||
struct bio *bio;
|
||||
|
@ -320,7 +321,7 @@ static void do_region(int rw, unsigned int region, struct io_region *where,
|
|||
}
|
||||
|
||||
static void dispatch_io(int rw, unsigned int num_regions,
|
||||
struct io_region *where, struct dpages *dp,
|
||||
struct dm_io_region *where, struct dpages *dp,
|
||||
struct io *io, int sync)
|
||||
{
|
||||
int i;
|
||||
|
@ -347,7 +348,7 @@ static void dispatch_io(int rw, unsigned int num_regions,
|
|||
}
|
||||
|
||||
static int sync_io(struct dm_io_client *client, unsigned int num_regions,
|
||||
struct io_region *where, int rw, struct dpages *dp,
|
||||
struct dm_io_region *where, int rw, struct dpages *dp,
|
||||
unsigned long *error_bits)
|
||||
{
|
||||
struct io io;
|
||||
|
@ -384,7 +385,7 @@ static int sync_io(struct dm_io_client *client, unsigned int num_regions,
|
|||
}
|
||||
|
||||
static int async_io(struct dm_io_client *client, unsigned int num_regions,
|
||||
struct io_region *where, int rw, struct dpages *dp,
|
||||
struct dm_io_region *where, int rw, struct dpages *dp,
|
||||
io_notify_fn fn, void *context)
|
||||
{
|
||||
struct io *io;
|
||||
|
@ -438,7 +439,7 @@ static int dp_init(struct dm_io_request *io_req, struct dpages *dp)
|
|||
* New collapsed (a)synchronous interface
|
||||
*/
|
||||
int dm_io(struct dm_io_request *io_req, unsigned num_regions,
|
||||
struct io_region *where, unsigned long *sync_error_bits)
|
||||
struct dm_io_region *where, unsigned long *sync_error_bits)
|
||||
{
|
||||
int r;
|
||||
struct dpages dp;
|
||||
|
|
|
@ -1,15 +1,20 @@
|
|||
/*
|
||||
* Copyright (C) 2003 Sistina Software
|
||||
* Copyright (C) 2004 - 2008 Red Hat, Inc. All rights reserved.
|
||||
*
|
||||
* Device-Mapper low-level I/O.
|
||||
*
|
||||
* This file is released under the GPL.
|
||||
*/
|
||||
|
||||
#ifndef _DM_IO_H
|
||||
#define _DM_IO_H
|
||||
#ifndef _LINUX_DM_IO_H
|
||||
#define _LINUX_DM_IO_H
|
||||
|
||||
#include "dm.h"
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct io_region {
|
||||
#include <linux/types.h>
|
||||
|
||||
struct dm_io_region {
|
||||
struct block_device *bdev;
|
||||
sector_t sector;
|
||||
sector_t count; /* If this is zero the region is ignored. */
|
||||
|
@ -74,6 +79,7 @@ void dm_io_client_destroy(struct dm_io_client *client);
|
|||
* error occurred doing io to the corresponding region.
|
||||
*/
|
||||
int dm_io(struct dm_io_request *io_req, unsigned num_regions,
|
||||
struct io_region *region, unsigned long *sync_error_bits);
|
||||
struct dm_io_region *region, unsigned long *sync_error_bits);
|
||||
|
||||
#endif
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_DM_IO_H */
|
||||
|
|
|
@ -208,7 +208,7 @@ struct log_c {
|
|||
struct dm_dev *log_dev;
|
||||
struct log_header header;
|
||||
|
||||
struct io_region header_location;
|
||||
struct dm_io_region header_location;
|
||||
struct log_header *disk_header;
|
||||
};
|
||||
|
||||
|
|
|
@ -788,7 +788,7 @@ static int recover(struct mirror_set *ms, struct region *reg)
|
|||
{
|
||||
int r;
|
||||
unsigned int i;
|
||||
struct io_region from, to[KCOPYD_MAX_REGIONS], *dest;
|
||||
struct dm_io_region from, to[KCOPYD_MAX_REGIONS], *dest;
|
||||
struct mirror *m;
|
||||
unsigned long flags = 0;
|
||||
|
||||
|
@ -907,7 +907,7 @@ static void map_bio(struct mirror *m, struct bio *bio)
|
|||
bio->bi_sector = map_sector(m, bio);
|
||||
}
|
||||
|
||||
static void map_region(struct io_region *io, struct mirror *m,
|
||||
static void map_region(struct dm_io_region *io, struct mirror *m,
|
||||
struct bio *bio)
|
||||
{
|
||||
io->bdev = m->dev->bdev;
|
||||
|
@ -949,7 +949,7 @@ static void read_callback(unsigned long error, void *context)
|
|||
/* Asynchronous read. */
|
||||
static void read_async_bio(struct mirror *m, struct bio *bio)
|
||||
{
|
||||
struct io_region io;
|
||||
struct dm_io_region io;
|
||||
struct dm_io_request io_req = {
|
||||
.bi_rw = READ,
|
||||
.mem.type = DM_IO_BVEC,
|
||||
|
@ -1105,7 +1105,7 @@ static void write_callback(unsigned long error, void *context)
|
|||
static void do_write(struct mirror_set *ms, struct bio *bio)
|
||||
{
|
||||
unsigned int i;
|
||||
struct io_region io[ms->nr_mirrors], *dest = io;
|
||||
struct dm_io_region io[ms->nr_mirrors], *dest = io;
|
||||
struct mirror *m;
|
||||
struct dm_io_request io_req = {
|
||||
.bi_rw = WRITE,
|
||||
|
|
|
@ -824,7 +824,7 @@ static void copy_callback(int read_err, unsigned long write_err, void *context)
|
|||
static void start_copy(struct dm_snap_pending_exception *pe)
|
||||
{
|
||||
struct dm_snapshot *s = pe->snap;
|
||||
struct io_region src, dest;
|
||||
struct dm_io_region src, dest;
|
||||
struct block_device *bdev = s->origin->bdev;
|
||||
sector_t dev_size;
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/mutex.h>
|
||||
|
||||
#include "kcopyd.h"
|
||||
#include "dm.h"
|
||||
|
||||
static struct workqueue_struct *_kcopyd_wq;
|
||||
static struct work_struct _kcopyd_work;
|
||||
|
@ -175,13 +176,13 @@ struct kcopyd_job {
|
|||
* Either READ or WRITE
|
||||
*/
|
||||
int rw;
|
||||
struct io_region source;
|
||||
struct dm_io_region source;
|
||||
|
||||
/*
|
||||
* The destinations for the transfer.
|
||||
*/
|
||||
unsigned int num_dests;
|
||||
struct io_region dests[KCOPYD_MAX_REGIONS];
|
||||
struct dm_io_region dests[KCOPYD_MAX_REGIONS];
|
||||
|
||||
sector_t offset;
|
||||
unsigned int nr_pages;
|
||||
|
@ -526,8 +527,8 @@ static void split_job(struct kcopyd_job *job)
|
|||
segment_complete(0, 0u, job);
|
||||
}
|
||||
|
||||
int kcopyd_copy(struct kcopyd_client *kc, struct io_region *from,
|
||||
unsigned int num_dests, struct io_region *dests,
|
||||
int kcopyd_copy(struct kcopyd_client *kc, struct dm_io_region *from,
|
||||
unsigned int num_dests, struct dm_io_region *dests,
|
||||
unsigned int flags, kcopyd_notify_fn fn, void *context)
|
||||
{
|
||||
struct kcopyd_job *job;
|
||||
|
|
|
@ -35,8 +35,8 @@ void kcopyd_client_destroy(struct kcopyd_client *kc);
|
|||
typedef void (*kcopyd_notify_fn)(int read_err, unsigned long write_err,
|
||||
void *context);
|
||||
|
||||
int kcopyd_copy(struct kcopyd_client *kc, struct io_region *from,
|
||||
unsigned int num_dests, struct io_region *dests,
|
||||
int kcopyd_copy(struct kcopyd_client *kc, struct dm_io_region *from,
|
||||
unsigned num_dests, struct dm_io_region *dests,
|
||||
unsigned int flags, kcopyd_notify_fn fn, void *context);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue