nbd: Set block size to BDRV_SECTOR_SIZE

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-Id: <1424887718-10800-13-git-send-email-mreitz@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Max Reitz 2015-02-25 13:08:25 -05:00 committed by Paolo Bonzini
parent ac97393dc7
commit 3f4726596d
5 changed files with 12 additions and 16 deletions

View File

@ -386,8 +386,7 @@ int nbd_client_init(BlockDriverState *bs, int sock, const char *export,
logout("session init %s\n", export); logout("session init %s\n", export);
qemu_set_block(sock); qemu_set_block(sock);
ret = nbd_receive_negotiate(sock, export, ret = nbd_receive_negotiate(sock, export,
&client->nbdflags, &client->size, &client->nbdflags, &client->size, errp);
&client->blocksize, errp);
if (ret < 0) { if (ret < 0) {
logout("Failed to negotiate with the NBD server\n"); logout("Failed to negotiate with the NBD server\n");
closesocket(sock); closesocket(sock);

View File

@ -20,7 +20,6 @@ typedef struct NbdClientSession {
int sock; int sock;
uint32_t nbdflags; uint32_t nbdflags;
off_t size; off_t size;
size_t blocksize;
CoMutex send_mutex; CoMutex send_mutex;
CoMutex free_sema; CoMutex free_sema;

View File

@ -75,8 +75,8 @@ enum {
ssize_t nbd_wr_sync(int fd, void *buffer, size_t size, bool do_read); ssize_t nbd_wr_sync(int fd, void *buffer, size_t size, bool do_read);
int nbd_receive_negotiate(int csock, const char *name, uint32_t *flags, int nbd_receive_negotiate(int csock, const char *name, uint32_t *flags,
off_t *size, size_t *blocksize, Error **errp); off_t *size, Error **errp);
int nbd_init(int fd, int csock, uint32_t flags, off_t size, size_t blocksize); int nbd_init(int fd, int csock, uint32_t flags, off_t size);
ssize_t nbd_send_request(int csock, struct nbd_request *request); ssize_t nbd_send_request(int csock, struct nbd_request *request);
ssize_t nbd_receive_reply(int csock, struct nbd_reply *reply); ssize_t nbd_receive_reply(int csock, struct nbd_reply *reply);
int nbd_client(int fd); int nbd_client(int fd);

15
nbd.c
View File

@ -495,7 +495,7 @@ fail:
} }
int nbd_receive_negotiate(int csock, const char *name, uint32_t *flags, int nbd_receive_negotiate(int csock, const char *name, uint32_t *flags,
off_t *size, size_t *blocksize, Error **errp) off_t *size, Error **errp)
{ {
char buf[256]; char buf[256];
uint64_t magic, s; uint64_t magic, s;
@ -603,7 +603,6 @@ int nbd_receive_negotiate(int csock, const char *name, uint32_t *flags,
goto fail; goto fail;
} }
*size = be64_to_cpu(s); *size = be64_to_cpu(s);
*blocksize = 1024;
TRACE("Size is %" PRIu64, *size); TRACE("Size is %" PRIu64, *size);
if (!name) { if (!name) {
@ -630,7 +629,7 @@ fail:
} }
#ifdef __linux__ #ifdef __linux__
int nbd_init(int fd, int csock, uint32_t flags, off_t size, size_t blocksize) int nbd_init(int fd, int csock, uint32_t flags, off_t size)
{ {
TRACE("Setting NBD socket"); TRACE("Setting NBD socket");
@ -640,17 +639,17 @@ int nbd_init(int fd, int csock, uint32_t flags, off_t size, size_t blocksize)
return -serrno; return -serrno;
} }
TRACE("Setting block size to %lu", (unsigned long)blocksize); TRACE("Setting block size to %lu", (unsigned long)BDRV_SECTOR_SIZE);
if (ioctl(fd, NBD_SET_BLKSIZE, blocksize) < 0) { if (ioctl(fd, NBD_SET_BLKSIZE, (size_t)BDRV_SECTOR_SIZE) < 0) {
int serrno = errno; int serrno = errno;
LOG("Failed setting NBD block size"); LOG("Failed setting NBD block size");
return -serrno; return -serrno;
} }
TRACE("Setting size to %zd block(s)", (size_t)(size / blocksize)); TRACE("Setting size to %zd block(s)", (size_t)(size / BDRV_SECTOR_SIZE));
if (ioctl(fd, NBD_SET_SIZE_BLOCKS, size / blocksize) < 0) { if (ioctl(fd, NBD_SET_SIZE_BLOCKS, size / (size_t)BDRV_SECTOR_SIZE) < 0) {
int serrno = errno; int serrno = errno;
LOG("Failed setting size (in blocks)"); LOG("Failed setting size (in blocks)");
return -serrno; return -serrno;
@ -715,7 +714,7 @@ int nbd_client(int fd)
return ret; return ret;
} }
#else #else
int nbd_init(int fd, int csock, uint32_t flags, off_t size, size_t blocksize) int nbd_init(int fd, int csock, uint32_t flags, off_t size)
{ {
return -ENOTSUP; return -ENOTSUP;
} }

View File

@ -279,7 +279,6 @@ static void *nbd_client_thread(void *arg)
{ {
char *device = arg; char *device = arg;
off_t size; off_t size;
size_t blocksize;
uint32_t nbdflags; uint32_t nbdflags;
int fd, sock; int fd, sock;
int ret; int ret;
@ -292,7 +291,7 @@ static void *nbd_client_thread(void *arg)
} }
ret = nbd_receive_negotiate(sock, NULL, &nbdflags, ret = nbd_receive_negotiate(sock, NULL, &nbdflags,
&size, &blocksize, &local_error); &size, &local_error);
if (ret < 0) { if (ret < 0) {
if (local_error) { if (local_error) {
fprintf(stderr, "%s\n", error_get_pretty(local_error)); fprintf(stderr, "%s\n", error_get_pretty(local_error));
@ -308,7 +307,7 @@ static void *nbd_client_thread(void *arg)
goto out_socket; goto out_socket;
} }
ret = nbd_init(fd, sock, nbdflags, size, blocksize); ret = nbd_init(fd, sock, nbdflags, size);
if (ret < 0) { if (ret < 0) {
goto out_fd; goto out_fd;
} }