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