diff options
author | NeilBrown <neilb@suse.de> | 2008-10-25 18:20:49 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2008-10-25 18:20:49 +1100 |
commit | b3d3195538e315b3863235731112eee7398d4340 (patch) | |
tree | 7decf7dd32fe805c1206efc93e54fea1f23af378 | |
parent | 11cd8b79c0690bf39b40a25352f86a82a838622a (diff) | |
download | mdadm-b3d3195538e315b3863235731112eee7398d4340.tar.gz mdadm-b3d3195538e315b3863235731112eee7398d4340.tar.xz mdadm-b3d3195538e315b3863235731112eee7398d4340.zip |
Allow WRITEMOSTLY to be cleared on --readd using --readwrite.
Previously it was possible to set the WRITEMOSTLY flag when
adding a device to an array, but not to clear the flag when re-adding.
This is now possible with --readwrite.
Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r-- | Build.c | 2 | ||||
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | Create.c | 2 | ||||
-rw-r--r-- | Manage.c | 8 | ||||
-rw-r--r-- | mdadm.8 | 11 | ||||
-rw-r--r-- | mdadm.c | 21 | ||||
-rw-r--r-- | mdadm.h | 2 |
7 files changed, 29 insertions, 21 deletions
@@ -183,7 +183,7 @@ int Build(char *mddev, int mdfd, int chunk, int level, int layout, disk.number = i; disk.raid_disk = i; disk.state = (1<<MD_DISK_SYNC) | (1<<MD_DISK_ACTIVE); - if (dv->writemostly) + if (dv->writemostly == 1) disk.state |= 1<<MD_DISK_WRITEMOSTLY; disk.major = major(stb.st_rdev); disk.minor = minor(stb.st_rdev); @@ -1,3 +1,7 @@ +Changed Prior to this release + - --readwrite can be used with --re-add to clear the writemostly + flag. + Changes Prior to 2.6.7 release - Avoid NULL reference calling free_super and elsewhere. - Remove stray semicolon (Causes compile error with gcc-2.95) @@ -534,7 +534,7 @@ int Create(struct supertype *st, char *mddev, int mdfd, (1<<MD_DISK_SYNC); else info.disk.state = 0; - if (dv->writemostly) + if (dv->writemostly == 1) info.disk.state |= (1<<MD_DISK_WRITEMOSTLY); if (dnum == insert_point || @@ -413,8 +413,10 @@ int Manage_subdevs(char *devname, int fd, disc.number = mdi.disk.number; disc.raid_disk = mdi.disk.raid_disk; disc.state = mdi.disk.state; - if (dv->writemostly) + if (dv->writemostly == 1) disc.state |= 1 << MD_DISK_WRITEMOSTLY; + if (dv->writemostly == 2) + disc.state &= ~(1 << MD_DISK_WRITEMOSTLY); if (ioctl(fd, ADD_NEW_DISK, &disc) == 0) { if (verbose >= 0) fprintf(stderr, Name ": re-added %s\n", dv->devname); @@ -452,7 +454,7 @@ int Manage_subdevs(char *devname, int fd, disc.number =j; disc.state = 0; if (array.not_persistent==0) { - if (dv->writemostly) + if (dv->writemostly == 1) disc.state |= 1 << MD_DISK_WRITEMOSTLY; tst->ss->add_to_super(tst, &disc); if (tst->ss->write_init_super(tst, &disc, @@ -487,7 +489,7 @@ int Manage_subdevs(char *devname, int fd, break; } } - if (dv->writemostly) + if (dv->writemostly == 1) disc.state |= (1 << MD_DISK_WRITEMOSTLY); if (ioctl(fd,ADD_NEW_DISK, &disc)) { fprintf(stderr, Name ": add new device failed for %s as %d: %s\n", @@ -905,6 +905,17 @@ the system to be marked as failed. It can then be removed. same as .BR \-\-fail . +.TP +.BR \-\-write\-mostly +Subsequent devices that are added or re-added will have the 'write-mostly' +flag set. This is only valid for RAID! and means that the 'md' driver +will avoid reading from these devices if possible. +.TP +.BR \-\-readwrite +Subsequent devices that are added or re-added will have the 'write-mostly' +flag cleared. + + .P Each of these options require that the first device listed is the array to be acted upon, and the remainder are component devices to be added, @@ -360,6 +360,12 @@ int main(int argc, char *argv[]) writemostly = 1; continue; + case O(MANAGE,'w'): + /* clear write-mostly for following devices */ + writemostly = 2; + continue; + + case O(GROW,'z'): case O(CREATE,'z'): /* size */ if (size >= 0) { @@ -745,21 +751,6 @@ int main(int argc, char *argv[]) runstop = -1; continue; - case O(MANAGE,'o'): - if (readonly < 0) { - fprintf(stderr, Name ": Cannot have both readonly and readwrite\n"); - exit(2); - } - readonly = 1; - continue; - case O(MANAGE,'w'): - if (readonly > 0) { - fprintf(stderr, Name ": Cannot have both readwrite and readonly.\n"); - exit(2); - } - readonly = -1; - continue; - case O(MISC,'Q'): case O(MISC,'D'): case O(MISC,'E'): @@ -232,7 +232,7 @@ typedef struct mddev_dev_s { char disposition; /* 'a' for add, 'r' for remove, 'f' for fail. * Not set for names read from .config */ - char writemostly; + char writemostly; /* 1 for 'set writemostly', 2 for 'clear writemostly' */ char re_add; char used; /* set when used */ struct mddev_dev_s *next; |