Thread (25 messages) 25 messages, 3 authors, 2018-09-25

Re: [PATCH v7 02/13] PCI/P2PDMA: Add sysfs group to display p2pmem stats

From: Logan Gunthorpe <logang@deltatee.com>
Date: 2018-09-25 18:51:26
Also in: linux-nvme, linux-pci, linux-rdma, lkml, nvdimm


On 2018-09-25 12:31 p.m., Bart Van Assche wrote:
On Tue, 2018-09-25 at 12:15 -0600, Logan Gunthorpe wrote:
quoted
On 2018-09-25 11:29 a.m., Bart Van Assche wrote:
quoted
On Tue, 2018-09-25 at 10:22 -0600, Logan Gunthorpe wrote:
quoted
@@ -83,9 +132,14 @@ static int pci_p2pdma_setup(struct pci_dev *pdev)
 
 	pdev->p2pdma = p2p;
 
+	error = sysfs_create_group(&pdev->dev.kobj, &p2pmem_group);
+	if (error)
+		goto out_pool_destroy;
+
 	return 0;
 
 out_pool_destroy:
+	pdev->p2pdma = NULL;
 	gen_pool_destroy(p2p->pool);
 out:
 	devm_kfree(&pdev->dev, p2p);
This doesn't look right to me. Shouldn't devm_remove_action() be called instead
of devm_kfree() if sysfs_create_group() fails?
That makes no sense to me. We are reversing a devm_kzalloc() not a
custom action....
In case what I wrote was not clear: both devm_kzalloc() and
devm_add_action_or_reset() have to be reversed if sysfs_create_group() fails.
devm_add_action_or_reset() calls devres_add(). The latter function adds an
element to the dev->devres_head list. So I think that only calling devm_kfree()
if sysfs_create_group() fails will lead to corruption of the dev->devres_head
list.
I don't see how it would corrupt the list. devres_remove() uses
list_del_init() which doesn't require that you only remove the tail from
the list... The way I read the code, you can remove any devm action at
any time.

Logan
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help