From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from imap1.codethink.co.uk ([176.9.8.82]:59542 "EHLO imap1.codethink.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751657AbdJKUgM (ORCPT ); Wed, 11 Oct 2017 16:36:12 -0400 Message-ID: <1507754163.22379.1.camel@codethink.co.uk> Subject: Re: Patch "scsi: sg: reset 'res_in_use' after unlinking reserved array" has been added to the 4.4-stable tree From: Ben Hutchings To: hare@suse.de, hare@suse.com, hch@lst.de, jthumshirn@suse.de, martin.petersen@oracle.com, toddpoynor@google.com Cc: stable@vger.kernel.org, Greg Kroah-Hartman Date: Wed, 11 Oct 2017 21:36:03 +0100 In-Reply-To: <15041604342474@kroah.com> References: <15041604342474@kroah.com> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org List-ID: On Thu, 2017-08-31 at 08:20 +0200, gregkh@linuxfoundation.org wrote: [...] > > Subject: scsi: sg: reset 'res_in_use' after unlinking reserved array > > From: Hannes Reinecke > > commit e791ce27c3f6a1d3c746fd6a8f8e36c9540ec6f9 upstream. > > Once the reserved page array is unused we can reset the 'res_in_use' > state; here we can do a lazy update without holding the mutex as we only > need to check against concurrent access, not concurrent release. [...] This description makes no sense. A simple write to a variable cannot be used to synchronise anything as it can be reordered with other memory operations, including those that write to the buffer you're trying to protect. This write needs to be combined with a release barrier or preceded by an smp_wmb(). Every read of res_in_use needs to be combined with an acquire barrier or followed by an smp_rmb(). Ben. > --- a/drivers/scsi/sg.c > +++ b/drivers/scsi/sg.c > @@ -2052,6 +2052,8 @@ sg_unlink_reserve(Sg_fd * sfp, Sg_reques >   req_schp->sglist_len = 0; >   sfp->save_scat_len = 0; >   srp->res_used = 0; > + /* Called without mutex lock to avoid deadlock */ > + sfp->res_in_use = 0; >  } >   >  static Sg_request * -- Ben Hutchings Software Developer, Codethink Ltd.