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:
parent
ac97393dc7
commit
3f4726596d
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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
15
nbd.c
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user