net/9p: split message size argument into 't_size' and 'r_size' pair
authorChristian Schoenebeck <linux_oss@crudebyte.com>
Fri, 15 Jul 2022 21:32:28 +0000 (23:32 +0200)
committerDominique Martinet <asmadeus@codewreck.org>
Tue, 4 Oct 2022 22:05:41 +0000 (07:05 +0900)
Refactor 'max_size' argument of p9_tag_alloc() and 'req_size' argument
of p9_client_prepare_req() both into a pair of arguments 't_size' and
'r_size' respectively to allow handling the buffer size for request and
reply separately from each other.

Link: https://lkml.kernel.org/r/9431a25fe4b37fd12cecbd715c13af71f701f220.1657920926.git.linux_oss@crudebyte.com
Signed-off-by: Christian Schoenebeck <linux_oss@crudebyte.com>
Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
net/9p/client.c

index 0a6110e..0bd7e43 100644 (file)
@@ -255,24 +255,26 @@ static struct kmem_cache *p9_req_cache;
  * p9_tag_alloc - Allocate a new request.
  * @c: Client session.
  * @type: Transaction type.
- * @max_size: Maximum packet size for this request.
+ * @t_size: Buffer size for holding this request.
+ * @r_size: Buffer size for holding server's reply on this request.
  *
  * Context: Process context.
  * Return: Pointer to new request.
  */
 static struct p9_req_t *
-p9_tag_alloc(struct p9_client *c, int8_t type, unsigned int max_size)
+p9_tag_alloc(struct p9_client *c, int8_t type, uint t_size, uint r_size)
 {
        struct p9_req_t *req = kmem_cache_alloc(p9_req_cache, GFP_NOFS);
-       int alloc_msize = min(c->msize, max_size);
+       int alloc_tsize = min(c->msize, t_size);
+       int alloc_rsize = min(c->msize, r_size);
        int tag;
 
        if (!req)
                return ERR_PTR(-ENOMEM);
 
-       if (p9_fcall_init(c, &req->tc, alloc_msize))
+       if (p9_fcall_init(c, &req->tc, alloc_tsize))
                goto free_req;
-       if (p9_fcall_init(c, &req->rc, alloc_msize))
+       if (p9_fcall_init(c, &req->rc, alloc_rsize))
                goto free;
 
        p9pdu_reset(&req->tc);
@@ -592,7 +594,7 @@ static int p9_client_flush(struct p9_client *c, struct p9_req_t *oldreq)
 }
 
 static struct p9_req_t *p9_client_prepare_req(struct p9_client *c,
-                                             int8_t type, int req_size,
+                                             int8_t type, uint t_size, uint r_size,
                                              const char *fmt, va_list ap)
 {
        int err;
@@ -608,7 +610,7 @@ static struct p9_req_t *p9_client_prepare_req(struct p9_client *c,
        if (c->status == BeginDisconnect && type != P9_TCLUNK)
                return ERR_PTR(-EIO);
 
-       req = p9_tag_alloc(c, type, req_size);
+       req = p9_tag_alloc(c, type, t_size, r_size);
        if (IS_ERR(req))
                return req;
 
@@ -645,7 +647,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...)
        struct p9_req_t *req;
 
        va_start(ap, fmt);
-       req = p9_client_prepare_req(c, type, c->msize, fmt, ap);
+       req = p9_client_prepare_req(c, type, c->msize, c->msize, fmt, ap);
        va_end(ap);
        if (IS_ERR(req))
                return req;
@@ -743,7 +745,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
        /* We allocate a inline protocol data of only 4k bytes.
         * The actual content is passed in zero-copy fashion.
         */
-       req = p9_client_prepare_req(c, type, P9_ZC_HDR_SZ, fmt, ap);
+       req = p9_client_prepare_req(c, type, P9_ZC_HDR_SZ, P9_ZC_HDR_SZ, fmt, ap);
        va_end(ap);
        if (IS_ERR(req))
                return req;