]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdmon.h
mdmon: pass symbolic name to mdmon instead of device name.
[thirdparty/mdadm.git] / mdmon.h
diff --git a/mdmon.h b/mdmon.h
index ad1a678112d33716c3d87142cf9bac167430cb2b..e4904baa438b389e3837f2498e80ad909248d8bd 100644 (file)
--- a/mdmon.h
+++ b/mdmon.h
@@ -1,3 +1,22 @@
+/*
+ * mdmon - monitor external metadata arrays
+ *
+ * Copyright (C) 2007-2008 Neil Brown <neilb@suse.de>
+ * Copyright (C) 2007-2008 Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ */
 
 enum array_state { clear, inactive, suspended, readonly, read_auto,
                   clean, active, write_pending, active_idle, bad_word};
@@ -12,16 +31,30 @@ struct active_array {
 
        int action_fd;
        int resync_start_fd;
+       int metadata_fd; /* for monitoring rw/ro status */
 
        enum array_state prev_state, curr_state, next_state;
        enum sync_action prev_action, curr_action, next_action;
 
+       int check_degraded; /* flag set by mon, read by manage */
+
        int devnum;
 
        unsigned long long resync_start;
 };
 
-
+/*
+ * Metadata updates are handled by the monitor thread,
+ * as it has exclusive access to the metadata.
+ * When the manager want to updates metadata, either
+ * for it's own reason (e.g. committing a spare) or
+ * on behalf of mdadm, it creates a metadata_update
+ * structure and queues it to the monitor.
+ * Updates are created and processed by code under the
+ * superswitch.  All common code sees them as opaque
+ * blobs.
+ */
+extern struct metadata_update *update_queue, *update_queue_handled;
 
 #define MD_MAJOR 9
 
@@ -34,11 +67,28 @@ extern struct md_generic_cmd *active_cmd;
 void remove_pidfile(char *devname);
 void do_monitor(struct supertype *container);
 void do_manager(struct supertype *container);
+int make_control_sock(char *devname);
+int make_pidfile(char *devname, int o_excl);
+extern int socket_hup_requested;
+extern int sigterm;
 
 int read_dev_state(int fd);
+int get_resync_start(struct active_array *a);
+int is_container_member(struct mdstat_ent *mdstat, char *container);
 
 struct mdstat_ent *mdstat_read(int hold, int start);
 
-extern struct superswitch super_ddf, super_ddf_bvd, super_ddf_svd;
-
 extern int exit_now, manager_ready;
+extern int mon_tid, mgr_tid;
+extern int monitor_loop_cnt;
+
+/* helper routine to determine resync completion since MaxSector is a
+ * moving target
+ */
+static inline int is_resync_complete(struct active_array *a)
+{
+       if (a->resync_start >= a->info.component_size)
+               return 1;
+       return 0;
+}
+