From 002daf3c1c5775615835dcbfbc97ed4b594b6bcb Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Thu, 21 Jun 2018 10:27:16 -0700 Subject: [PATCH] scoutfs: return -ENOSPC to client alloc segno The server send_reply interface is confusing. It uses errors to shut down the connection. Clients getting enospc needs to happen in the message reply payload. The segno allocation server processing needs to set the segno to 0 so that the client gets it and translates that into -ENOSPC. Signed-off-by: Zach Brown --- kmod/src/server.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kmod/src/server.c b/kmod/src/server.c index ee52e8cc..6eed54ca 100644 --- a/kmod/src/server.c +++ b/kmod/src/server.c @@ -753,7 +753,7 @@ static int process_alloc_segno(struct server_connection *conn, struct server_info *server = conn->server; struct super_block *sb = server->sb; struct commit_waiter cw; - __le64 lesegno; + __le64 lesegno = 0; u64 segno; int ret; @@ -767,10 +767,12 @@ static int process_alloc_segno(struct server_connection *conn, if (ret == 0) { lesegno = cpu_to_le64(segno); queue_commit_work(server, &cw); + } else if (ret == -ENOSPC) { + ret = 0; } up_read(&server->commit_rwsem); - if (ret == 0) + if (ret == 0 && lesegno != 0) ret = wait_for_commit(server, &cw, id, type); out: return send_reply(conn, id, type, ret, &lesegno, sizeof(lesegno));