Re: [PATCH rdma-next 03/16] RDMA/restrack: Add an API to attach a task to a resource

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Apr 01, 2019 at 02:59:58PM +0300, Gal Pressman wrote:
> On 01-Apr-19 11:47, Leon Romanovsky wrote:
> > From: Mark Zhang <markz@xxxxxxxxxxxx>
> >
> > Add rdma_restrack_attach_task() which is able to attach a task
> > other then "current" to a resource.
> >
> > Signed-off-by: Mark Zhang <markz@xxxxxxxxxxxx>
> > Reviewed-by: Majd Dibbiny <majd@xxxxxxxxxxxx>
> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx>
> > ---
> >  drivers/infiniband/core/restrack.c | 14 ++++++++++++++
> >  drivers/infiniband/core/restrack.h |  2 ++
> >  2 files changed, 16 insertions(+)
> >
> > diff --git a/drivers/infiniband/core/restrack.c b/drivers/infiniband/core/restrack.c
> > index 95573f292aae..3714634ae296 100644
> > --- a/drivers/infiniband/core/restrack.c
> > +++ b/drivers/infiniband/core/restrack.c
> > @@ -194,6 +194,20 @@ void rdma_restrack_set_task(struct rdma_restrack_entry *res,
> >  }
> >  EXPORT_SYMBOL(rdma_restrack_set_task);
> >
> > +/**
> > + * rdma_restrack_attach_task() - attach the task onto this resource
> > + * @res:  resource entry
> > + * @task: the task to attach, the current task will be used if it is NULL.
> > + */
> > +void rdma_restrack_attach_task(struct rdma_restrack_entry *res,
> > +			       struct task_struct *task)
> > +{
> > +	if (res->task)
> > +		put_task_struct(res->task);
> > +	get_task_struct(task);
> > +	res->task = task;
> > +}
>
> Don't we need a detach API as well?

No, it is part of resource unbinding/release. The "detach" is simple
subtraction of task struct reference counter and isn't performed as
standalone call.

"Attach" is needed to properly present the process owner name in
rdmatool, because all counters are created through rdmatool and need to
be bound to "real" process.

>
> > +
> >  static void rdma_restrack_add(struct rdma_restrack_entry *res)
> >  {
> >  	struct ib_device *dev = res_to_dev(res);
> > diff --git a/drivers/infiniband/core/restrack.h b/drivers/infiniband/core/restrack.h
> > index 09a1fbdf578e..d084e5f89849 100644
> > --- a/drivers/infiniband/core/restrack.h
> > +++ b/drivers/infiniband/core/restrack.h
> > @@ -25,4 +25,6 @@ struct rdma_restrack_root {
> >
> >  int rdma_restrack_init(struct ib_device *dev);
> >  void rdma_restrack_clean(struct ib_device *dev);
> > +void rdma_restrack_attach_task(struct rdma_restrack_entry *res,
> > +			       struct task_struct *task);
> >  #endif /* _RDMA_CORE_RESTRACK_H_ */
> >
>

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux