Add block_subarray()

Put code for blocking subarray in to separate function.
This little code/function will be used for blocking arrays from mdmon
monitoring during assembly process. Arrays cannot wait for container
assembly finish, because meanwhile monitor can enable arrays for writing.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Adam Kwolek 2011-03-02 12:28:13 +11:00 committed by NeilBrown
parent ef5414b282
commit 2a09369774
2 changed files with 16 additions and 4 deletions

18
msg.c
View File

@ -235,7 +235,7 @@ static char *ping_monitor_version(char *devname)
return msg.buf;
}
static int unblock_subarray(struct mdinfo *sra, const int unfreeze)
int unblock_subarray(struct mdinfo *sra, const int unfreeze)
{
char buf[64];
int rc = 0;
@ -255,6 +255,18 @@ static int unblock_subarray(struct mdinfo *sra, const int unfreeze)
return rc;
}
int block_subarray(struct mdinfo *sra)
{
char buf[64];
int rc = 0;
sprintf(buf, "external:%s\n", sra->text_version);
buf[9] = '-';
if (sysfs_set_str(sra, NULL, "metadata_version", buf))
rc = -1;
return rc;
}
/**
* block_monitor - prevent mdmon spare assignment
* @container - container to block
@ -334,9 +346,7 @@ int block_monitor(char *container, const int freeze)
* takeover in reshape case and spare reassignment in the
* auto-rebuild case)
*/
sprintf(buf, "external:%s\n", sra->text_version);
buf[9] = '-';
if (sysfs_set_str(sra, NULL, "metadata_version", buf))
if (block_subarray(sra))
break;
ping_monitor(container);

2
msg.h
View File

@ -27,6 +27,8 @@ 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_subarray(struct mdinfo *sra);
extern int unblock_subarray(struct mdinfo *sra, const int unfreeze);
extern int block_monitor(char *container, const int freeze);
extern void unblock_monitor(char *container, const int unfreeze);
extern int fping_monitor(int sock);