Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84a80f62 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFSv4.1: Convert pNFS deviceid to use kfree_rcu()



Use of synchronize_rcu() when unmounting and potentially freeing a lot
of deviceids is problematic. There really is no reason why we can't just
use kfree_rcu() here.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 2854475f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ bl_free_deviceid_node(struct nfs4_deviceid_node *d)
		container_of(d, struct pnfs_block_dev, node);

	bl_free_device(dev);
	kfree(dev);
	kfree_rcu(dev, node.rcu);
}

static int
+1 −1
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ nfs4_fl_free_deviceid(struct nfs4_file_layout_dsaddr *dsaddr)
			nfs4_pnfs_ds_put(ds);
	}
	kfree(dsaddr->stripe_indices);
	kfree(dsaddr);
	kfree_rcu(dsaddr, id_node.rcu);
}

/* Decode opaque device data and return the result */
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ void nfs4_ff_layout_free_deviceid(struct nfs4_ff_layout_ds *mirror_ds)
{
	nfs4_print_deviceid(&mirror_ds->id_node.deviceid);
	nfs4_pnfs_ds_put(mirror_ds->ds);
	kfree(mirror_ds);
	kfree_rcu(mirror_ds, id_node.rcu);
}

/* Decode opaque device data and construct new_ds using it */
+1 −1
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ objio_free_deviceid_node(struct nfs4_deviceid_node *d)

	dprintk("%s: free od=%p\n", __func__, de->od.od);
	osduld_put_device(de->od.od);
	kfree(de);
	kfree_rcu(d, rcu);
}

struct objio_segment {
+1 −0
Original line number Diff line number Diff line
@@ -302,6 +302,7 @@ struct nfs4_deviceid_node {
	unsigned long 			flags;
	unsigned long			timestamp_unavailable;
	struct nfs4_deviceid		deviceid;
	struct rcu_head			rcu;
	atomic_t			ref;
};

Loading