Linux-2.6.12-rc2
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
This commit is contained in:
93
drivers/md/dm-path-selector.h
Normal file
93
drivers/md/dm-path-selector.h
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright (C) 2003 Sistina Software.
|
||||
* Copyright (C) 2004 Red Hat, Inc. All rights reserved.
|
||||
*
|
||||
* Module Author: Heinz Mauelshagen
|
||||
*
|
||||
* This file is released under the GPL.
|
||||
*
|
||||
* Path-Selector registration.
|
||||
*/
|
||||
|
||||
#ifndef DM_PATH_SELECTOR_H
|
||||
#define DM_PATH_SELECTOR_H
|
||||
|
||||
#include <linux/device-mapper.h>
|
||||
|
||||
#include "dm-mpath.h"
|
||||
|
||||
/*
|
||||
* We provide an abstraction for the code that chooses which path
|
||||
* to send some io down.
|
||||
*/
|
||||
struct path_selector_type;
|
||||
struct path_selector {
|
||||
struct path_selector_type *type;
|
||||
void *context;
|
||||
};
|
||||
|
||||
/* Information about a path selector type */
|
||||
struct path_selector_type {
|
||||
char *name;
|
||||
struct module *module;
|
||||
|
||||
unsigned int table_args;
|
||||
unsigned int info_args;
|
||||
|
||||
/*
|
||||
* Constructs a path selector object, takes custom arguments
|
||||
*/
|
||||
int (*create) (struct path_selector *ps, unsigned argc, char **argv);
|
||||
void (*destroy) (struct path_selector *ps);
|
||||
|
||||
/*
|
||||
* Add an opaque path object, along with some selector specific
|
||||
* path args (eg, path priority).
|
||||
*/
|
||||
int (*add_path) (struct path_selector *ps, struct path *path,
|
||||
int argc, char **argv, char **error);
|
||||
|
||||
/*
|
||||
* Chooses a path for this io, if no paths are available then
|
||||
* NULL will be returned.
|
||||
*
|
||||
* repeat_count is the number of times to use the path before
|
||||
* calling the function again. 0 means don't call it again unless
|
||||
* the path fails.
|
||||
*/
|
||||
struct path *(*select_path) (struct path_selector *ps,
|
||||
unsigned *repeat_count);
|
||||
|
||||
/*
|
||||
* Notify the selector that a path has failed.
|
||||
*/
|
||||
void (*fail_path) (struct path_selector *ps, struct path *p);
|
||||
|
||||
/*
|
||||
* Ask selector to reinstate a path.
|
||||
*/
|
||||
int (*reinstate_path) (struct path_selector *ps, struct path *p);
|
||||
|
||||
/*
|
||||
* Table content based on parameters added in ps_add_path_fn
|
||||
* or path selector status
|
||||
*/
|
||||
int (*status) (struct path_selector *ps, struct path *path,
|
||||
status_type_t type, char *result, unsigned int maxlen);
|
||||
|
||||
int (*end_io) (struct path_selector *ps, struct path *path);
|
||||
};
|
||||
|
||||
/* Register a path selector */
|
||||
int dm_register_path_selector(struct path_selector_type *type);
|
||||
|
||||
/* Unregister a path selector */
|
||||
int dm_unregister_path_selector(struct path_selector_type *type);
|
||||
|
||||
/* Returns a registered path selector type */
|
||||
struct path_selector_type *dm_get_path_selector(const char *name);
|
||||
|
||||
/* Releases a path selector */
|
||||
void dm_put_path_selector(struct path_selector_type *pst);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user