All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Christie <michael.christie@oracle.com>
To: Hannes Reinecke <hare@suse.de>,
	bvanassche@acm.org, bstroesser@ts.fujitsu.com,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	linux-scsi@vger.kernel.org, target-devel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [PATCH 11/17] target: add session sysfs class support
Date: Tue, 09 Jun 2020 03:10:52 +0000	[thread overview]
Message-ID: <3B8F389C-A12D-4222-863F-6A656AF4680F@oracle.com> (raw)
In-Reply-To: <7598A2AE-B43F-41BB-82E0-8882FA7D66E0@oracle.com>



> On Jun 8, 2020, at 10:55 AM, Michael Christie <michael.christie@oracle.com> wrote:
> 
> 
> 
>> On Jun 8, 2020, at 10:21 AM, Mike Christie <michael.christie@oracle.com> wrote:
>> 
>> On 6/8/20 1:14 AM, Hannes Reinecke wrote:
>>>> +    se_sess->target_name = kstrdup(se_tpg->se_tpg_wwn->wwn_group.cg_item.ci_name,
>>>> +                       GFP_KERNEL);
>>>> +    if (!se_sess->target_name)
>>>> +        goto free_acl;
>>>> +
>>>> +    if (se_sess->tfo->fabric_alias)
>>>> +        se_sess->fabric_name = kstrdup(se_sess->tfo->fabric_alias,
>>>> +                           GFP_KERNEL);
>>>> +    else
>>>> +        se_sess->fabric_name = kstrdup(se_sess->tfo->fabric_name,
>>>> +                           GFP_KERNEL);
>>>> +    if (!se_sess->fabric_name)
>>>> +        goto free_target;
>>>> +
>>>> +    se_sess->tpg_name = kstrdup(se_tpg->tpg_group.cg_item.ci_name,
>>>> +                    GFP_KERNEL);
>>>> +    if (!se_sess->tpg_name)
>>>> +        goto free_fabric;
>>>> +
>>>> +    return 0;
>>> I wonder if we need to copy these variables.
>>> Why can't we display them directly, returning an error if the respective
>>> link is not available?
>>> If one is worried about the sysfs/configfs reference counting we can get the reference in the _show() functions; wouldn't that be a better solution?
>> 
>> Do you mean in the sysfs show function do a configfs_depend_item() on the tpg, www, acl, etc? If so, I'm not sure that's safe, because for the tpg for example, we could do:
>> 
>> 1. Userspace starts tpg removal with a rmdir.
>> 2. Userspace also opens sysfs session file and has a ref to the session, but not the tpg yet.
>> 3. kernel tears down tpg and sessions under it. The tpg is freed. The session is not because of the ref taken in #2.
>> 4. sysfs session show function starts to reference se_sess->se_tpg so it can do a configfs_depend_item on the tpg_group.cg_item, but the se_tpg is freed in #3.
>> 
>> We either need to:
>> 1. cp like above.
>> 2. Handle both configfs and device struct refcounts for the same struct. So add a device struct to the www, tpg, acl and then coordinate the refcounting.
>> 3. take a reference to the se_tpg when the session is created then drop it in the session release.
> 
> 
> Ignore #3. That does not work. Userspace expects to be able to rmdir on a tpg and that will remove the underlying sessions. If the session takes a ref to the tpg, then it breaks userspace because something now has to do the session removal before the tpg rmdir.
> 

I was thinking about this some more and we could do the following:

1. When userspace creates a target or tpg, it tells the kernel if it supports the updated session interface.
2. If userspace supports it, when we create a session we get a reference to the tpg with configfs_depend_item(). And create the sysfs interface. We might actually be able to do confifgfs.
3. On tpg deletion, if at #1 it has told us it supports the new interface then userspace just has to tear down the sessions by doing a rmdir on the sessions if we do configfs or write to some new delete file if we use sysfs.

WARNING: multiple messages have this Message-ID (diff)
From: Michael Christie <michael.christie@oracle.com>
To: Hannes Reinecke <hare@suse.de>,
	bvanassche@acm.org, bstroesser@ts.fujitsu.com,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	linux-scsi@vger.kernel.org, target-devel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [PATCH 11/17] target: add session sysfs class support
Date: Mon, 8 Jun 2020 22:10:52 -0500	[thread overview]
Message-ID: <3B8F389C-A12D-4222-863F-6A656AF4680F@oracle.com> (raw)
In-Reply-To: <7598A2AE-B43F-41BB-82E0-8882FA7D66E0@oracle.com>



> On Jun 8, 2020, at 10:55 AM, Michael Christie <michael.christie@oracle.com> wrote:
> 
> 
> 
>> On Jun 8, 2020, at 10:21 AM, Mike Christie <michael.christie@oracle.com> wrote:
>> 
>> On 6/8/20 1:14 AM, Hannes Reinecke wrote:
>>>> +    se_sess->target_name = kstrdup(se_tpg->se_tpg_wwn->wwn_group.cg_item.ci_name,
>>>> +                       GFP_KERNEL);
>>>> +    if (!se_sess->target_name)
>>>> +        goto free_acl;
>>>> +
>>>> +    if (se_sess->tfo->fabric_alias)
>>>> +        se_sess->fabric_name = kstrdup(se_sess->tfo->fabric_alias,
>>>> +                           GFP_KERNEL);
>>>> +    else
>>>> +        se_sess->fabric_name = kstrdup(se_sess->tfo->fabric_name,
>>>> +                           GFP_KERNEL);
>>>> +    if (!se_sess->fabric_name)
>>>> +        goto free_target;
>>>> +
>>>> +    se_sess->tpg_name = kstrdup(se_tpg->tpg_group.cg_item.ci_name,
>>>> +                    GFP_KERNEL);
>>>> +    if (!se_sess->tpg_name)
>>>> +        goto free_fabric;
>>>> +
>>>> +    return 0;
>>> I wonder if we need to copy these variables.
>>> Why can't we display them directly, returning an error if the respective
>>> link is not available?
>>> If one is worried about the sysfs/configfs reference counting we can get the reference in the _show() functions; wouldn't that be a better solution?
>> 
>> Do you mean in the sysfs show function do a configfs_depend_item() on the tpg, www, acl, etc? If so, I'm not sure that's safe, because for the tpg for example, we could do:
>> 
>> 1. Userspace starts tpg removal with a rmdir.
>> 2. Userspace also opens sysfs session file and has a ref to the session, but not the tpg yet.
>> 3. kernel tears down tpg and sessions under it. The tpg is freed. The session is not because of the ref taken in #2.
>> 4. sysfs session show function starts to reference se_sess->se_tpg so it can do a configfs_depend_item on the tpg_group.cg_item, but the se_tpg is freed in #3.
>> 
>> We either need to:
>> 1. cp like above.
>> 2. Handle both configfs and device struct refcounts for the same struct. So add a device struct to the www, tpg, acl and then coordinate the refcounting.
>> 3. take a reference to the se_tpg when the session is created then drop it in the session release.
> 
> 
> Ignore #3. That does not work. Userspace expects to be able to rmdir on a tpg and that will remove the underlying sessions. If the session takes a ref to the tpg, then it breaks userspace because something now has to do the session removal before the tpg rmdir.
> 

I was thinking about this some more and we could do the following:

1. When userspace creates a target or tpg, it tells the kernel if it supports the updated session interface.
2. If userspace supports it, when we create a session we get a reference to the tpg with configfs_depend_item(). And create the sysfs interface. We might actually be able to do confifgfs.
3. On tpg deletion, if at #1 it has told us it supports the new interface then userspace just has to tear down the sessions by doing a rmdir on the sessions if we do configfs or write to some new delete file if we use sysfs.

  reply	other threads:[~2020-06-09  3:10 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-07 20:35 [PATCH v6 00/17] target: add sysfs support Mike Christie
2020-06-07 20:35 ` Mike Christie
2020-06-07 20:35 ` [PATCH 01/17] target: check enforce_pr_isids during registration Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-07 20:35 ` [PATCH 02/17] target: separate acl name from port ids Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-09 10:11   ` Stefan Hajnoczi
2020-06-09 10:11     ` Stefan Hajnoczi
2020-06-09 14:13   ` Himanshu Madhani
2020-06-09 14:13     ` Himanshu Madhani
2020-06-07 20:35 ` [PATCH 03/17] target: add helper to parse acl and transport name Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-07 20:35 ` [PATCH 04/17] tcm loop: use target_parse_emulated_name Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-07 20:35 ` [PATCH 05/17] vhost scsi: " Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-09 10:21   ` Stefan Hajnoczi
2020-06-09 10:21     ` Stefan Hajnoczi
2020-06-07 20:35 ` [PATCH 06/17] xen scsiback: " Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-07 20:35 ` [PATCH 07/17] iscsi target: setup transport_id Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-07 20:35 ` [PATCH 08/17] target: use tpt_id in target_stat_iport_port_ident_show Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-07 20:35 ` [PATCH 09/17] target: drop sess_get_initiator_sid from PR code Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-07 20:35 ` [PATCH 10/17] target: drop sess_get_initiator_sid Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-07 20:35 ` [PATCH 11/17] target: add session sysfs class support Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-08  5:32   ` Greg Kroah-Hartman
2020-06-08  5:32     ` Greg Kroah-Hartman
2020-06-08 15:35     ` Mike Christie
2020-06-08 15:35       ` Mike Christie
2020-06-08 16:36       ` Greg Kroah-Hartman
2020-06-08 16:36         ` Greg Kroah-Hartman
2020-06-08 19:02         ` Mike Christie
2020-06-08 19:02           ` Mike Christie
2020-06-09  6:05           ` Greg Kroah-Hartman
2020-06-09  6:05             ` Greg Kroah-Hartman
2020-06-08  6:14   ` Hannes Reinecke
2020-06-08  6:14     ` Hannes Reinecke
2020-06-08 15:21     ` Mike Christie
2020-06-08 15:21       ` Mike Christie
2020-06-08 15:55       ` Michael Christie
2020-06-08 15:55         ` Michael Christie
2020-06-09  3:10         ` Michael Christie [this message]
2020-06-09  3:10           ` Michael Christie
2020-06-08 12:06   ` Bodo Stroesser
2020-06-08 12:06     ` Bodo Stroesser
2020-06-08 14:49     ` Mike Christie
2020-06-08 14:49       ` Mike Christie
2020-06-08 12:18   ` Greg Kroah-Hartman
2020-06-08 12:18     ` Greg Kroah-Hartman
2020-06-08 12:18   ` Greg Kroah-Hartman
2020-06-08 12:18     ` Greg Kroah-Hartman
2020-06-07 20:35 ` [PATCH 12/17] target: hook most target users into sysfs API Mike Christie
2020-06-07 20:35   ` Mike Christie
2020-06-08  6:15   ` Hannes Reinecke
2020-06-08  6:15     ` Hannes Reinecke
2020-06-08 10:20   ` kernel test robot
2020-06-08 10:20     ` kernel test robot
2020-06-08 10:20     ` kernel test robot
2020-06-07 20:36 ` [PATCH 13/17] iscsi target: replace module sids with lio's sid Mike Christie
2020-06-07 20:36   ` Mike Christie
2020-06-08  6:16   ` Hannes Reinecke
2020-06-08  6:16     ` Hannes Reinecke
2020-06-07 20:36 ` [PATCH 14/17] target: add free_session callout Mike Christie
2020-06-07 20:36   ` Mike Christie
2020-06-08  6:19   ` Hannes Reinecke
2020-06-08  6:19     ` Hannes Reinecke
2020-06-07 20:36 ` [PATCH 15/17] iscsi target: hook iscsi target into sysfs API Mike Christie
2020-06-07 20:36   ` Mike Christie
2020-06-08  6:20   ` Hannes Reinecke
2020-06-08  6:20     ` Hannes Reinecke
2020-06-07 20:36 ` [PATCH 16/17] iscsi target: export session state and alias in sysfs Mike Christie
2020-06-07 20:36   ` Mike Christie
2020-06-08  6:21   ` Hannes Reinecke
2020-06-08  6:21     ` Hannes Reinecke
2020-06-07 20:36 ` [PATCH 17/17] target: drop sess_get_index Mike Christie
2020-06-07 20:36   ` Mike Christie
2020-06-08  6:21   ` Hannes Reinecke
2020-06-08  6:21     ` Hannes Reinecke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3B8F389C-A12D-4222-863F-6A656AF4680F@oracle.com \
    --to=michael.christie@oracle.com \
    --cc=bstroesser@ts.fujitsu.com \
    --cc=bvanassche@acm.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hare@suse.de \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=target-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.