In order to support reshape and atomic removal of spares from containers we need to prevent mdmon from activating spares. In the reshape case we additionally need to freeze sync_action while the reshape transaction is initiated with the kernel and recorded in the metadata. When reshaping a raid0 array we need to freeze the array *before* it is transitioned to a redundant raid level. Since sync_action does not exist at this point we extend the '-' prefix of a subarray string to flag mdmon not to activate spares. Mdadm needs to be reasonably certain that the version of mdmon in the system honors this 'freeze' indication. If mdmon is not already active then we assume the version that gets started is the same as the mdadm version. Otherwise, we check the version of mdmon as returned by the extended ping_monitor() operation. This is to catch cases where mdadm is upgraded in the filesystem, but mdmon started in the initramfs is from a previous release. Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
36 lines
1.3 KiB
C
36 lines
1.3 KiB
C
/*
|
|
* Copyright (C) 2008 Intel Corporation
|
|
*
|
|
* mdmon socket / message handling
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
|
|
struct mdinfo;
|
|
struct metadata_update;
|
|
|
|
extern int receive_message(int fd, struct metadata_update *msg, int tmo);
|
|
extern int send_message(int fd, struct metadata_update *msg, int tmo);
|
|
extern int ack(int fd, int tmo);
|
|
extern int wait_reply(int fd, int tmo);
|
|
extern int connect_monitor(char *devname);
|
|
extern int ping_monitor(char *devname);
|
|
extern int block_monitor(char *container, const int freeze);
|
|
extern void unblock_monitor(char *container, const int unfreeze);
|
|
extern int fping_monitor(int sock);
|
|
extern int ping_manager(char *devname);
|
|
|
|
#define MSG_MAX_LEN (4*1024*1024)
|