blob: 15f5629e231ad93fbab9424815c1495655b242fc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  | 
/*
 * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
 *
 * This file is released under the GPL.
 *
 * Multipath hardware handler registration.
 */
#ifndef	DM_HW_HANDLER_H
#define	DM_HW_HANDLER_H
#include <linux/device-mapper.h>
#include "dm-mpath.h"
struct hw_handler_type;
struct hw_handler {
	struct hw_handler_type *type;
	void *context;
};
/*
 * Constructs a hardware handler object, takes custom arguments
 */
/* Information about a hardware handler type */
struct hw_handler_type {
	char *name;
	struct module *module;
	int (*create) (struct hw_handler *handler, unsigned int argc,
		       char **argv);
	void (*destroy) (struct hw_handler *hwh);
	void (*pg_init) (struct hw_handler *hwh, unsigned bypassed,
			 struct path *path);
	unsigned (*error) (struct hw_handler *hwh, struct bio *bio);
	int (*status) (struct hw_handler *hwh, status_type_t type,
		       char *result, unsigned int maxlen);
};
/* Register a hardware handler */
int dm_register_hw_handler(struct hw_handler_type *type);
/* Unregister a hardware handler */
int dm_unregister_hw_handler(struct hw_handler_type *type);
/* Returns a registered hardware handler type */
struct hw_handler_type *dm_get_hw_handler(const char *name);
/* Releases a hardware handler  */
void dm_put_hw_handler(struct hw_handler_type *hwht);
/* Default err function */
unsigned dm_scsi_err_handler(struct hw_handler *hwh, struct bio *bio);
/* Error flags for err and dm_pg_init_complete */
#define MP_FAIL_PATH 1
#define MP_BYPASS_PG 2
#define MP_ERROR_IO  4	/* Don't retry this I/O */
#endif
 
  |