diff options
author | Neil Brown <neilb@suse.de> | 2008-07-12 20:28:33 +1000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2008-07-12 20:28:33 +1000 |
commit | 6416d5275d65be25a6cd63583bb2b92e6fba95a5 (patch) | |
tree | 23757b31666774c05c405dfd720dc92b3bb03b90 /Manage.c | |
parent | 908ef18519f7d5780ebf00b19b913f8282eb4175 (diff) | |
download | mdadm-6416d5275d65be25a6cd63583bb2b92e6fba95a5.tar.gz mdadm-6416d5275d65be25a6cd63583bb2b92e6fba95a5.tar.xz mdadm-6416d5275d65be25a6cd63583bb2b92e6fba95a5.zip |
Use O_DIRECT for all IO to devices.
Using buffered IO risks non-atomic updates to parts of the
device that we don't actually want to write to. This isn't in
general safe.
So switch to O_DIRECT for all that IO and make sure we have
properly aligned buffers.
Diffstat (limited to 'Manage.c')
-rw-r--r-- | Manage.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -315,7 +315,7 @@ int Manage_subdevs(char *devname, int fd, return 1; } /* Make sure it isn't in use (in 2.6 or later) */ - tfd = open(dv->devname, O_RDONLY|O_EXCL); + tfd = open(dv->devname, O_RDONLY|O_EXCL|O_DIRECT); if (tfd < 0) { fprintf(stderr, Name ": Cannot open %s: %s\n", dv->devname, strerror(errno)); @@ -458,7 +458,7 @@ int Manage_subdevs(char *devname, int fd, int dfd; if (dv->writemostly) disc.state |= 1 << MD_DISK_WRITEMOSTLY; - dfd = open(dv->devname, O_RDWR | O_EXCL); + dfd = open(dv->devname, O_RDWR | O_EXCL|O_DIRECT); tst->ss->add_to_super(tst, &disc, dfd, dv->devname); /* write_init_super will close 'dfd' */ |