]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * Copyright (C) 2003 Sistina Software. | |
3 | * Copyright (C) 2004 Red Hat, Inc. All rights reserved. | |
4 | * | |
5 | * Module Author: Heinz Mauelshagen | |
6 | * | |
7 | * This file is released under the GPL. | |
8 | * | |
9 | * Path-Selector registration. | |
10 | */ | |
11 | ||
12 | #ifndef DM_PATH_SELECTOR_H | |
13 | #define DM_PATH_SELECTOR_H | |
14 | ||
15 | #include <linux/device-mapper.h> | |
16 | ||
17 | #include "dm-mpath.h" | |
18 | ||
19 | /* | |
20 | * We provide an abstraction for the code that chooses which path | |
21 | * to send some io down. | |
22 | */ | |
23 | struct path_selector_type; | |
24 | struct path_selector { | |
25 | struct path_selector_type *type; | |
26 | void *context; | |
27 | }; | |
28 | ||
29 | /* Information about a path selector type */ | |
30 | struct path_selector_type { | |
31 | char *name; | |
32 | struct module *module; | |
33 | ||
34 | unsigned int table_args; | |
35 | unsigned int info_args; | |
36 | ||
37 | /* | |
38 | * Constructs a path selector object, takes custom arguments | |
39 | */ | |
40 | int (*create) (struct path_selector *ps, unsigned argc, char **argv); | |
41 | void (*destroy) (struct path_selector *ps); | |
42 | ||
43 | /* | |
44 | * Add an opaque path object, along with some selector specific | |
45 | * path args (eg, path priority). | |
46 | */ | |
c922d5f7 | 47 | int (*add_path) (struct path_selector *ps, struct dm_path *path, |
1da177e4 LT |
48 | int argc, char **argv, char **error); |
49 | ||
50 | /* | |
51 | * Chooses a path for this io, if no paths are available then | |
52 | * NULL will be returned. | |
53 | * | |
54 | * repeat_count is the number of times to use the path before | |
55 | * calling the function again. 0 means don't call it again unless | |
56 | * the path fails. | |
57 | */ | |
c922d5f7 | 58 | struct dm_path *(*select_path) (struct path_selector *ps, |
1da177e4 LT |
59 | unsigned *repeat_count); |
60 | ||
61 | /* | |
62 | * Notify the selector that a path has failed. | |
63 | */ | |
c922d5f7 | 64 | void (*fail_path) (struct path_selector *ps, struct dm_path *p); |
1da177e4 LT |
65 | |
66 | /* | |
67 | * Ask selector to reinstate a path. | |
68 | */ | |
c922d5f7 | 69 | int (*reinstate_path) (struct path_selector *ps, struct dm_path *p); |
1da177e4 LT |
70 | |
71 | /* | |
72 | * Table content based on parameters added in ps_add_path_fn | |
73 | * or path selector status | |
74 | */ | |
c922d5f7 | 75 | int (*status) (struct path_selector *ps, struct dm_path *path, |
1da177e4 LT |
76 | status_type_t type, char *result, unsigned int maxlen); |
77 | ||
c922d5f7 | 78 | int (*end_io) (struct path_selector *ps, struct dm_path *path); |
1da177e4 LT |
79 | }; |
80 | ||
81 | /* Register a path selector */ | |
82 | int dm_register_path_selector(struct path_selector_type *type); | |
83 | ||
84 | /* Unregister a path selector */ | |
85 | int dm_unregister_path_selector(struct path_selector_type *type); | |
86 | ||
87 | /* Returns a registered path selector type */ | |
88 | struct path_selector_type *dm_get_path_selector(const char *name); | |
89 | ||
90 | /* Releases a path selector */ | |
91 | void dm_put_path_selector(struct path_selector_type *pst); | |
92 | ||
93 | #endif |