OSDN Git Service

pNFS: Add helpers for allocation/free of struct nfs4_pnfs_ds_addr
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Tue, 10 Nov 2020 14:21:48 +0000 (09:21 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 2 Dec 2020 19:05:53 +0000 (14:05 -0500)
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/pnfs_nfs.c

index ee6d003..c3c04a7 100644 (file)
@@ -661,6 +661,20 @@ _data_server_lookup_locked(const struct list_head *dsaddrs)
        return NULL;
 }
 
+static struct nfs4_pnfs_ds_addr *nfs4_pnfs_ds_addr_alloc(gfp_t gfp_flags)
+{
+       struct nfs4_pnfs_ds_addr *da = kzalloc(sizeof(*da), gfp_flags);
+       if (da)
+               INIT_LIST_HEAD(&da->da_node);
+       return da;
+}
+
+static void nfs4_pnfs_ds_addr_free(struct nfs4_pnfs_ds_addr *da)
+{
+       kfree(da->da_remotestr);
+       kfree(da);
+}
+
 static void destroy_ds(struct nfs4_pnfs_ds *ds)
 {
        struct nfs4_pnfs_ds_addr *da;
@@ -676,8 +690,7 @@ static void destroy_ds(struct nfs4_pnfs_ds *ds)
                                      struct nfs4_pnfs_ds_addr,
                                      da_node);
                list_del_init(&da->da_node);
-               kfree(da->da_remotestr);
-               kfree(da);
+               nfs4_pnfs_ds_addr_free(da);
        }
 
        kfree(ds->ds_remotestr);
@@ -1094,12 +1107,10 @@ nfs4_decode_mp_ds_addr(struct net *net, struct xdr_stream *xdr, gfp_t gfp_flags)
        }
        *portstr = '\0';
 
-       da = kzalloc(sizeof(*da), gfp_flags);
+       da = nfs4_pnfs_ds_addr_alloc(gfp_flags);
        if (unlikely(!da))
                goto out_free_buf;
 
-       INIT_LIST_HEAD(&da->da_node);
-
        if (!rpc_pton(net, buf, portstr-buf, (struct sockaddr *)&da->da_addr,
                      sizeof(da->da_addr))) {
                dprintk("%s: error parsing address %s\n", __func__, buf);