Revision c8969ede
b/nbd.c | ||
---|---|---|
596 | 596 |
return -serrno; |
597 | 597 |
} |
598 | 598 |
|
599 |
if (flags & NBD_FLAG_READ_ONLY) { |
|
600 |
int read_only = 1; |
|
601 |
TRACE("Setting readonly attribute"); |
|
602 |
|
|
603 |
if (ioctl(fd, BLKROSET, (unsigned long) &read_only) < 0) { |
|
599 |
if (ioctl(fd, NBD_SET_FLAGS, flags) < 0) { |
|
600 |
if (errno == ENOTTY) { |
|
601 |
int read_only = (flags & NBD_FLAG_READ_ONLY) != 0; |
|
602 |
TRACE("Setting readonly attribute"); |
|
603 |
|
|
604 |
if (ioctl(fd, BLKROSET, (unsigned long) &read_only) < 0) { |
|
605 |
int serrno = errno; |
|
606 |
LOG("Failed setting read-only attribute"); |
|
607 |
return -serrno; |
|
608 |
} |
|
609 |
} else { |
|
604 | 610 |
int serrno = errno; |
605 |
LOG("Failed setting read-only attribute");
|
|
611 |
LOG("Failed setting flags");
|
|
606 | 612 |
return -serrno; |
607 | 613 |
} |
608 | 614 |
} |
609 | 615 |
|
610 |
if (ioctl(fd, NBD_SET_FLAGS, flags) < 0 |
|
611 |
&& errno != ENOTTY) { |
|
612 |
int serrno = errno; |
|
613 |
LOG("Failed setting flags"); |
|
614 |
return -serrno; |
|
615 |
} |
|
616 |
|
|
617 | 616 |
TRACE("Negotiation ended"); |
618 | 617 |
|
619 | 618 |
return 0; |
Also available in: Unified diff