Re: [Nbd] [PATCH] nbd-server: Kill dead mainloop()
> On 15 Dec 2016, at 15:53, Eric Blake <eblake@...696...> wrote:
>
> Unused since commit 6c2d8511. Be the chainsaw mentioned in the comment :)
>
> Signed-off-by: Eric Blake <eblake@...696...>
Signed-off-by: Alex Bligh <alex@...872...>
Will wait for Wouter's say so before applying, given the
chain-saw nature.
Alex
> ---
>
> Applies to the master branch; will cause a (trivial) merge conflict with
> the extensions-write-zeroes branch.
>
>
> nbd-server.c | 173 -----------------------------------------------------------
> 1 file changed, 173 deletions(-)
>
> diff --git a/nbd-server.c b/nbd-server.c
> index 3dcfadd..fec397b 100644
> --- a/nbd-server.c
> +++ b/nbd-server.c
> @@ -2019,179 +2019,6 @@ static int mainloop_threaded(CLIENT* client) {
> writeit(client->transactionlogfd, &reply, sizeof(reply)); }
> /** error macro. */
> #define ERROR(client,reply,errcode) { reply.error = nbd_errno(errcode); SEND(client,reply); reply.error = 0; }
> -/**
> - * Serve a file to a single client.
> - *
> - * @todo This beast needs to be split up in many tiny little manageable
> - * pieces. Preferably with a chainsaw.
> - *
> - * @param client The client we're going to serve to.
> - * @return when the client disconnects
> - **/
> -int mainloop(CLIENT *client) {
> - struct nbd_request request;
> - struct nbd_reply reply;
> - gboolean go_on=TRUE;
> -#ifdef DODBG
> - int i = 0;
> -#endif
> - send_export_info(client);
> - DEBUG("Entering request loop!\n");
> - reply.magic = htonl(NBD_REPLY_MAGIC);
> - reply.error = 0;
> - while (go_on) {
> - char buf[BUFSIZE];
> - char* p;
> - size_t len;
> - size_t currlen;
> - size_t writelen;
> - uint16_t command;
> -#ifdef DODBG
> - i++;
> - printf("%d: ", i);
> -#endif
> - socket_read(client, &request, sizeof(request));
> - if (client->transactionlogfd != -1)
> - writeit(client->transactionlogfd, &request, sizeof(request));
> -
> - request.from = ntohll(request.from);
> - request.type = ntohl(request.type);
> - command = request.type & NBD_CMD_MASK_COMMAND;
> - len = ntohl(request.len);
> -
> - DEBUG("%s from %llu (%llu) len %u, ", getcommandname(command),
> - (unsigned long long)request.from,
> - (unsigned long long)request.from / 512, len);
> -
> - if (request.magic != htonl(NBD_REQUEST_MAGIC))
> - err("Not enough magic.");
> -
> - memcpy(reply.handle, request.handle, sizeof(reply.handle));
> -
> - if ((command==NBD_CMD_WRITE) || (command==NBD_CMD_READ) ||
> - (command==NBD_CMD_TRIM)) {
> - if (request.from + len < request.from) { // 64 bit overflow!!
> - DEBUG("[Number too large!]");
> - ERROR(client, reply, EINVAL);
> - continue;
> - }
> -
> - if (((off_t)request.from + len) > client->exportsize) {
> - DEBUG("[RANGE!]");
> - ERROR(client, reply, (command==NBD_CMD_WRITE) ? ENOSPC : EINVAL);
> - continue;
> - }
> -
> - currlen = len;
> - if (currlen > BUFSIZE - sizeof(struct nbd_reply)) {
> - currlen = BUFSIZE - sizeof(struct nbd_reply);
> - if(!logged_oversized) {
> - msg(LOG_DEBUG, "oversized request (this is not a problem)");
> - logged_oversized = true;
> - }
> - }
> - }
> -
> - switch (command) {
> -
> - case NBD_CMD_DISC:
> - msg(LOG_INFO, "Disconnect request received.");
> - if (client->server->flags & F_COPYONWRITE) {
> - if (client->difmap) g_free(client->difmap) ;
> - close(client->difffile);
> - unlink(client->difffilename);
> - free(client->difffilename);
> - }
> - go_on=FALSE;
> - continue;
> -
> - case NBD_CMD_WRITE:
> - DEBUG("wr: net->buf, ");
> - while(len > 0) {
> - socket_read(client, buf, currlen);
> - DEBUG("buf->exp, ");
> - if ((client->server->flags & F_READONLY) ||
> - (client->server->flags & F_AUTOREADONLY)) {
> - DEBUG("[WRITE to READONLY!]");
> - ERROR(client, reply, EPERM);
> - consume(client, len-currlen, buf, BUFSIZE);
> - continue;
> - }
> - if (expwrite(request.from, buf, currlen, client,
> - request.type & NBD_CMD_FLAG_FUA)) {
> - DEBUG("Write failed: %m" );
> - ERROR(client, reply, errno);
> - consume(client, len-currlen, buf, BUFSIZE);
> - continue;
> - }
> - len -= currlen;
> - request.from += currlen;
> - currlen = (len < BUFSIZE) ? len : BUFSIZE;
> - }
> - SEND(client, reply);
> - DEBUG("OK!\n");
> - continue;
> -
> - case NBD_CMD_FLUSH:
> - DEBUG("fl: ");
> - if (expflush(client)) {
> - DEBUG("Flush failed: %m");
> - ERROR(client, reply, errno);
> - continue;
> - }
> - SEND(client, reply);
> - DEBUG("OK!\n");
> - continue;
> -
> - case NBD_CMD_READ:
> - DEBUG("exp->buf, ");
> - if (client->transactionlogfd != -1)
> - writeit(client->transactionlogfd, &reply, sizeof(reply));
> - socket_write(client, &reply, sizeof(reply));
> - p = buf;
> - writelen = currlen;
> - while(len > 0) {
> - if (expread(request.from, p, currlen, client)) {
> - DEBUG("Read failed: %m");
> - ERROR(client, reply, errno);
> - continue;
> - }
> -
> - DEBUG("buf->net, ");
> - socket_write(client, buf, writelen);
> - len -= currlen;
> - request.from += currlen;
> - currlen = (len < BUFSIZE) ? len : BUFSIZE;
> - p = buf;
> - writelen = currlen;
> - }
> - DEBUG("OK!\n");
> - continue;
> -
> - case NBD_CMD_TRIM:
> - /* The kernel module sets discard_zeroes_data == 0,
> - * so it is okay to do nothing. */
> - if ((client->server->flags & F_READONLY) ||
> - (client->server->flags & F_AUTOREADONLY)) {
> - DEBUG("[TRIM to READONLY!]");
> - ERROR(client, reply, EPERM);
> - continue;
> - }
> - if (exptrim(&request, client)) {
> - DEBUG("Trim failed: %m");
> - ERROR(client, reply, errno);
> - continue;
> - }
> - SEND(client, reply);
> - continue;
> -
> - default:
> - DEBUG ("Ignoring unknown command\n");
> - continue;
> - }
> - }
> - return 0;
> -}
>
> /**
> * Set up client export array, which is an array of FILE_INFO.
> --
> 2.9.3
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> _______________________________________________
> Nbd-general mailing list
> Nbd-general@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/nbd-general
>
--
Alex Bligh
Reply to: