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