linux/drivers/md/dm-path-selector.h
<<
>>
Prefs
   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 */
  23struct path_selector_type;
  24struct path_selector {
  25        struct path_selector_type *type;
  26        void *context;
  27};
  28
  29/* Information about a path selector type */
  30struct 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         */
  47        int (*add_path) (struct path_selector *ps, struct dm_path *path,
  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         */
  58        struct dm_path *(*select_path) (struct path_selector *ps,
  59                                     unsigned *repeat_count);
  60
  61        /*
  62         * Notify the selector that a path has failed.
  63         */
  64        void (*fail_path) (struct path_selector *ps, struct dm_path *p);
  65
  66        /*
  67         * Ask selector to reinstate a path.
  68         */
  69        int (*reinstate_path) (struct path_selector *ps, struct dm_path *p);
  70
  71        /*
  72         * Table content based on parameters added in ps_add_path_fn
  73         * or path selector status
  74         */
  75        int (*status) (struct path_selector *ps, struct dm_path *path,
  76                       status_type_t type, char *result, unsigned int maxlen);
  77
  78        int (*end_io) (struct path_selector *ps, struct dm_path *path);
  79};
  80
  81/* Register a path selector */
  82int dm_register_path_selector(struct path_selector_type *type);
  83
  84/* Unregister a path selector */
  85int dm_unregister_path_selector(struct path_selector_type *type);
  86
  87/* Returns a registered path selector type */
  88struct path_selector_type *dm_get_path_selector(const char *name);
  89
  90/* Releases a path selector  */
  91void dm_put_path_selector(struct path_selector_type *pst);
  92
  93#endif
  94