This patch allows to operate on nbd device file without write permission for the file if read-only option is specified.
Signed-off-by: Ryota Ozaki <ozaki.ry...@gmail.com> --- qemu-nbd.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/qemu-nbd.c b/qemu-nbd.c index 00b8896..7ef409f 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -162,7 +162,7 @@ static int find_partition(BlockDriverState *bs, int partition, return -1; } -static void show_parts(const char *device) +static void show_parts(const char *device, bool readonly) { if (fork() == 0) { int nbd; @@ -172,7 +172,7 @@ static void show_parts(const char *device) * but remember to load the module with max_part != 0 : * modprobe nbd max_part=63 */ - nbd = open(device, O_RDWR); + nbd = open(device, readonly ? O_RDONLY : O_RDWR); if (nbd != -1) { close(nbd); } @@ -322,7 +322,7 @@ int main(int argc, char **argv) } if (disconnect) { - fd = open(argv[optind], O_RDWR); + fd = open(argv[optind], readonly ? O_RDONLY : O_RDWR); if (fd == -1) { errx(EXIT_FAILURE, "Cannot open %s", argv[optind]); } @@ -392,7 +392,7 @@ int main(int argc, char **argv) } } while (sock == -1); - fd = open(device, O_RDWR); + fd = open(device, readonly ? O_RDONLY : O_RDWR); if (fd == -1) { ret = 1; goto out; @@ -415,7 +415,7 @@ int main(int argc, char **argv) /* update partition table */ - show_parts(device); + show_parts(device, readonly); nbd_client(fd, sock); close(fd); -- 1.6.5.2