aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>2003-01-26 21:55:43 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>2003-01-26 21:55:43 +0000
commit74c041ac57c7d0f7f93977f0adbe1510932a543c (patch)
tree281363e0e7a5981d1edb3d338d89cb4c9147ba17
parent7253da9c05bf01c0d932bf598a44229bbfe10de8 (diff)
Notes
-rw-r--r--sbin/bsdlabel/bsdlabel.c6
-rw-r--r--sbin/disklabel/disklabel.c6
2 files changed, 12 insertions, 0 deletions
diff --git a/sbin/bsdlabel/bsdlabel.c b/sbin/bsdlabel/bsdlabel.c
index d01f0ea00be2a..ecb1705e9efd0 100644
--- a/sbin/bsdlabel/bsdlabel.c
+++ b/sbin/bsdlabel/bsdlabel.c
@@ -228,6 +228,10 @@ main(int argc, char *argv[])
np = namebuf + strlen(specname) + 1;
f = open(specname, op == READ ? O_RDONLY : O_RDWR);
}
+ if (f < 0 && errno == EBUSY) {
+ /* lets try to get by with ioctls */
+ f = open(specname, O_RDONLY);
+ }
if (f < 0)
err(4, "%s", specname);
@@ -378,6 +382,8 @@ writelabel(int f, const char *boot, struct disklabel *lp)
sum += p[i];
p[63] = sum;
#endif
+ if (ioctl(f, DIOCBSDBB, &boot) == 0)
+ return (0);
if (write(f, boot, lp->d_bbsize) != (int)lp->d_bbsize) {
warn("write");
return (1);
diff --git a/sbin/disklabel/disklabel.c b/sbin/disklabel/disklabel.c
index d01f0ea00be2a..ecb1705e9efd0 100644
--- a/sbin/disklabel/disklabel.c
+++ b/sbin/disklabel/disklabel.c
@@ -228,6 +228,10 @@ main(int argc, char *argv[])
np = namebuf + strlen(specname) + 1;
f = open(specname, op == READ ? O_RDONLY : O_RDWR);
}
+ if (f < 0 && errno == EBUSY) {
+ /* lets try to get by with ioctls */
+ f = open(specname, O_RDONLY);
+ }
if (f < 0)
err(4, "%s", specname);
@@ -378,6 +382,8 @@ writelabel(int f, const char *boot, struct disklabel *lp)
sum += p[i];
p[63] = sum;
#endif
+ if (ioctl(f, DIOCBSDBB, &boot) == 0)
+ return (0);
if (write(f, boot, lp->d_bbsize) != (int)lp->d_bbsize) {
warn("write");
return (1);