From: Christoph Hellwig <hch@lst.de>
To: Hannes Reinecke <hare@suse.de>
Cc: Christoph Hellwig <hch@lst.de>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
James Bottomley <james.bottomley@hansenpartnership.com>,
Bart von Assche <bart.vanassche@sandisk.com>,
Ewan Milne <emilne@redhat.com>,
linux-scsi@vger.kernel.org
Subject: Re: [PATCHv2 13/22] scsi_dh_alua: Use workqueue for RTPG
Date: Wed, 13 Jan 2016 11:04:25 +0100 [thread overview]
Message-ID: <20160113100425.GA15163@lst.de> (raw)
In-Reply-To: <5695F66A.9040709@suse.de>
On Wed, Jan 13, 2016 at 08:02:02AM +0100, Hannes Reinecke wrote:
>>> + /* Check for existing port_group references */
>>> + spin_lock(&h->pg_lock);
>>> + if (h->pg) {
>>> + old_pg = pg;
>>> + /* port_group has changed. Update to new port group */
>>> + if (h->pg != pg) {
>>> + old_pg = h->pg;
>>> + rcu_assign_pointer(h->pg, pg);
>>> + pg_updated = true;
>>> + }
>>> + } else {
>>> + rcu_assign_pointer(h->pg, pg);
>>> + pg_updated = true;
>>> + }
>>> + alua_rtpg_queue(h->pg, sdev, NULL);
>>> + spin_unlock(&h->pg_lock);
>>> +
>>> + if (pg_updated)
>>> + synchronize_rcu();
>>> + if (old_pg) {
>>> + if (old_pg->rtpg_sdev)
>>> + flush_delayed_work(&old_pg->rtpg_work);
>>> + kref_put(&old_pg->kref, release_port_group);
>>> + }
>>
>> The synchronize_rcu() needs to be done in release_port_group, or even
>> better be replaced by doing a kfree_rcu there instead of a kfree.
>>
> Point is that we don't necessarily have an old_pg to call
> release_port_group() on, but we still need to call synchronize_rcu()
> to inform everyong that h->pg now has a new value.
No, you don't. synchronize_rcu() just waits for all previously
started RCU grace periods to finish. If old_pg doesn't get freed
you don't need to wait for the grace period. synchronize_rcu does
not notify anyone about anything, it just waits.
>> And unless I'm mistaken the flush_delayed_work should probably be
>> done in release_port_group as well.
>>
> _Actually_ we only need to call flush_delayed_work if sdev == rtgp_sdev.
> Otherwise the workqueue item is running off a different device and won't be
> affected.
I'm actually pretty sure I suggested that in an earlier iteratation,
but you said that's not the case. So please only run it if
sdev == rtgp_sdev only then.
next prev parent reply other threads:[~2016-01-13 10:04 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-12 15:40 [PATCHv2 00/22] ALUA device handler update, part II Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 01/22] scsi_dh_alua: Pass buffer as function argument Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 02/22] scsi_dh_alua: separate out alua_stpg() Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 03/22] scsi_dh_alua: Make stpg synchronous Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 04/22] scsi_dh_alua: call alua_rtpg() if stpg fails Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 05/22] scsi_dh_alua: switch to scsi_execute_req_flags() Hannes Reinecke
2016-01-13 5:48 ` kbuild test robot
2016-01-12 15:40 ` [PATCHv2 06/22] scsi_dh_alua: allocate RTPG buffer separately Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 07/22] scsi_dh_alua: Use separate alua_port_group structure Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 08/22] scsi_dh_alua: use unique device id Hannes Reinecke
2016-01-12 17:10 ` Christoph Hellwig
2016-01-12 15:40 ` [PATCHv2 09/22] scsi_dh_alua: simplify alua_initialize() Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 10/22] revert commit a8e5a2d593cb ("[SCSI] scsi_dh_alua: ALUA handler attach should succeed while TPG is transitioning") Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 11/22] scsi_dh_alua: move optimize_stpg evaluation Hannes Reinecke
2016-01-12 17:11 ` Christoph Hellwig
2016-01-12 15:40 ` [PATCHv2 12/22] scsi_dh_alua: remove 'rel_port' from alua_dh_data structure Hannes Reinecke
2016-01-12 17:11 ` Christoph Hellwig
2016-01-12 15:40 ` [PATCHv2 13/22] scsi_dh_alua: Use workqueue for RTPG Hannes Reinecke
2016-01-12 16:43 ` kbuild test robot
2016-01-12 17:14 ` Christoph Hellwig
2016-01-13 7:02 ` Hannes Reinecke
2016-01-13 7:13 ` Hannes Reinecke
2016-01-13 10:05 ` Christoph Hellwig
2016-01-13 10:04 ` Christoph Hellwig [this message]
2016-01-13 10:27 ` Hannes Reinecke
2016-01-13 6:10 ` kbuild test robot
2016-01-12 15:40 ` [PATCHv2 14/22] scsi_dh_alua: Allow workqueue to run synchronously Hannes Reinecke
2016-01-12 17:16 ` Christoph Hellwig
2016-01-12 15:40 ` [PATCHv2 15/22] scsi_dh_alua: Recheck state on unit attention Hannes Reinecke
2016-01-12 17:17 ` Christoph Hellwig
2016-01-12 15:40 ` [PATCHv2 16/22] scsi_dh_alua: update all port states Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 17/22] scsi_dh_alua: Send TEST UNIT READY to poll for transitioning Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 18/22] scsi_dh: add 'rescan' callback Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 19/22] scsi: Add 'access_state' attribute Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 20/22] scsi_dh_alua: use common definitions for ALUA state Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 21/22] scsi_dh_alua: update 'access_state' field Hannes Reinecke
2016-01-12 15:40 ` [PATCHv2 22/22] scsi_dh_alua: Update version to 2.0 Hannes Reinecke
2016-01-12 17:09 ` [PATCHv2 00/22] ALUA device handler update, part II Christoph Hellwig
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=20160113100425.GA15163@lst.de \
--to=hch@lst.de \
--cc=bart.vanassche@sandisk.com \
--cc=emilne@redhat.com \
--cc=hare@suse.de \
--cc=james.bottomley@hansenpartnership.com \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).