Message ID | c04a11a590628c2497cef113b0dfea781de90416.1611719814.git.asutoshd@codeaurora.org (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Series | Fix deadlock in ufs | expand |
> > Resumes the scsi device before accessing it. > > Change-Id: I2929af60f2a92c89704a582fcdb285d35b429fde > Signed-off-by: Asutosh Das <asutoshd@codeaurora.org> > Signed-off-by: Can Guo <cang@codeaurora.org> > Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org> Following this patch, is it possible to revert commit 74e5e468b664d? Thanks, Avri
On 2021-01-27 15:09, Avri Altman wrote: >> >> Resumes the scsi device before accessing it. >> >> Change-Id: I2929af60f2a92c89704a582fcdb285d35b429fde >> Signed-off-by: Asutosh Das <asutoshd@codeaurora.org> >> Signed-off-by: Can Guo <cang@codeaurora.org> >> Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org> > Following this patch, is it possible to revert commit 74e5e468b664d? > No, but this is a good finding... This change assumes that the queue->queue_data is a scsi_device, which is why we call scsi_auto_pm_get(). But for ufs_bsg's case, queue->queue_data is a device... Thanks, Can Guo. > Thanks, > Avri
On 2021-01-27 15:59, Can Guo wrote: > On 2021-01-27 15:09, Avri Altman wrote: >>> >>> Resumes the scsi device before accessing it. >>> >>> Change-Id: I2929af60f2a92c89704a582fcdb285d35b429fde >>> Signed-off-by: Asutosh Das <asutoshd@codeaurora.org> >>> Signed-off-by: Can Guo <cang@codeaurora.org> >>> Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org> >> Following this patch, is it possible to revert commit 74e5e468b664d? >> > > No, but this is a good finding... This change assumes > that the queue->queue_data is a scsi_device, which is > why we call scsi_auto_pm_get(). But for ufs_bsg's case, > queue->queue_data is a device... > If we call pm_runtime_get/put_sync(bcd->class_dev->parent) in bsg_get/put_device(), commit 74e5e468b664d can be reverted. This is just a rough idea. > Thanks, > Can Guo. > >> Thanks, >> Avri
On 1/26/21 8:00 PM, Asutosh Das wrote: > Resumes the scsi device before accessing it. > > Change-Id: I2929af60f2a92c89704a582fcdb285d35b429fde > Signed-off-by: Asutosh Das <asutoshd@codeaurora.org> > Signed-off-by: Can Guo <cang@codeaurora.org> > Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org> No Change-Id tags in upstream patches please. Thanks, Bart.
diff --git a/block/bsg.c b/block/bsg.c index d7bae94..f4c197f 100644 --- a/block/bsg.c +++ b/block/bsg.c @@ -306,12 +306,16 @@ static struct bsg_device *bsg_get_device(struct inode *inode, struct file *file) static int bsg_open(struct inode *inode, struct file *file) { struct bsg_device *bd; + struct scsi_device *sd; bd = bsg_get_device(inode, file); if (IS_ERR(bd)) return PTR_ERR(bd); + sd = (struct scsi_device *) bd->queue->queuedata; + if (scsi_autopm_get_device(sd)) + return -EIO; file->private_data = bd; return 0; } @@ -319,8 +323,12 @@ static int bsg_open(struct inode *inode, struct file *file) static int bsg_release(struct inode *inode, struct file *file) { struct bsg_device *bd = file->private_data; + struct scsi_device *sd; file->private_data = NULL; + sd = (struct scsi_device *) bd->queue->queuedata; + scsi_autopm_put_device(sd); + return bsg_put_device(bd); }