Revision b90fb4b8 qemu-nbd.c
b/qemu-nbd.c | ||
---|---|---|
185 | 185 |
BlockDriverState *bs; |
186 | 186 |
off_t dev_offset = 0; |
187 | 187 |
off_t offset = 0; |
188 |
bool readonly = false;
|
|
188 |
uint32_t nbdflags = 0;
|
|
189 | 189 |
bool disconnect = false; |
190 | 190 |
const char *bindto = "0.0.0.0"; |
191 | 191 |
int port = NBD_DEFAULT_PORT; |
... | ... | |
230 | 230 |
int nb_fds = 0; |
231 | 231 |
int max_fd; |
232 | 232 |
int persistent = 0; |
233 |
uint32_t nbdflags; |
|
234 | 233 |
|
235 | 234 |
while ((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) { |
236 | 235 |
switch (ch) { |
... | ... | |
263 | 262 |
} |
264 | 263 |
break; |
265 | 264 |
case 'r': |
266 |
readonly = true;
|
|
265 |
nbdflags |= NBD_FLAG_READ_ONLY;
|
|
267 | 266 |
flags &= ~BDRV_O_RDWR; |
268 | 267 |
break; |
269 | 268 |
case 'P': |
... | ... | |
398 | 397 |
} |
399 | 398 |
|
400 | 399 |
ret = nbd_receive_negotiate(sock, NULL, &nbdflags, |
401 |
&size, &blocksize);
|
|
400 |
&size, &blocksize);
|
|
402 | 401 |
if (ret == -1) { |
403 | 402 |
ret = 1; |
404 | 403 |
goto out; |
405 | 404 |
} |
406 | 405 |
|
407 |
ret = nbd_init(fd, sock, size, blocksize); |
|
406 |
ret = nbd_init(fd, sock, nbdflags, size, blocksize);
|
|
408 | 407 |
if (ret == -1) { |
409 | 408 |
ret = 1; |
410 | 409 |
goto out; |
... | ... | |
463 | 462 |
for (i = 1; i < nb_fds && ret; i++) { |
464 | 463 |
if (FD_ISSET(sharing_fds[i], &fds)) { |
465 | 464 |
if (nbd_trip(bs, sharing_fds[i], fd_size, dev_offset, |
466 |
&offset, readonly, data, NBD_BUFFER_SIZE) != 0) {
|
|
465 |
&offset, nbdflags, data, NBD_BUFFER_SIZE) != 0) {
|
|
467 | 466 |
close(sharing_fds[i]); |
468 | 467 |
nb_fds--; |
469 | 468 |
sharing_fds[i] = sharing_fds[nb_fds]; |
... | ... | |
479 | 478 |
(struct sockaddr *)&addr, |
480 | 479 |
&addr_len); |
481 | 480 |
if (sharing_fds[nb_fds] != -1 && |
482 |
nbd_negotiate(sharing_fds[nb_fds], fd_size) != -1) { |
|
481 |
nbd_negotiate(sharing_fds[nb_fds], fd_size, nbdflags) != -1) {
|
|
483 | 482 |
if (sharing_fds[nb_fds] > max_fd) |
484 | 483 |
max_fd = sharing_fds[nb_fds]; |
485 | 484 |
nb_fds++; |
Also available in: Unified diff