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. | |
1da177e4 | 53 | */ |
c922d5f7 | 54 | struct dm_path *(*select_path) (struct path_selector *ps, |
02ab823f | 55 | size_t nr_bytes); |
1da177e4 LT |
56 | |
57 | /* | |
58 | * Notify the selector that a path has failed. | |
59 | */ | |
c922d5f7 | 60 | void (*fail_path) (struct path_selector *ps, struct dm_path *p); |
1da177e4 LT |
61 | |
62 | /* | |
63 | * Ask selector to reinstate a path. | |
64 | */ | |
c922d5f7 | 65 | int (*reinstate_path) (struct path_selector *ps, struct dm_path *p); |
1da177e4 LT |
66 | |
67 | /* | |
68 | * Table content based on parameters added in ps_add_path_fn | |
69 | * or path selector status | |
70 | */ | |
c922d5f7 | 71 | int (*status) (struct path_selector *ps, struct dm_path *path, |
1da177e4 LT |
72 | status_type_t type, char *result, unsigned int maxlen); |
73 | ||
02ab823f KU |
74 | int (*start_io) (struct path_selector *ps, struct dm_path *path, |
75 | size_t nr_bytes); | |
76 | int (*end_io) (struct path_selector *ps, struct dm_path *path, | |
77 | size_t nr_bytes); | |
1da177e4 LT |
78 | }; |
79 | ||
80 | /* Register a path selector */ | |
81 | int dm_register_path_selector(struct path_selector_type *type); | |
82 | ||
83 | /* Unregister a path selector */ | |
84 | int dm_unregister_path_selector(struct path_selector_type *type); | |
85 | ||
86 | /* Returns a registered path selector type */ | |
87 | struct path_selector_type *dm_get_path_selector(const char *name); | |
88 | ||
89 | /* Releases a path selector */ | |
90 | void dm_put_path_selector(struct path_selector_type *pst); | |
91 | ||
92 | #endif |