Message ID | 20250220130546.2289555-3-yangxingui@huawei.com |
---|---|
State | New |
Headers | show |
Series | scsi: hisi_sas: Fixed IO error caused by port id not updated | expand |
在 2025/2/20 21:05, Xingui Yang 写道: > As sas_put_device() needs to be called in lldd, it is now moved to libsas.h > > Signed-off-by: Xingui Yang <yangxingui@huawei.com> > --- > drivers/scsi/libsas/sas_discover.c | 1 + > drivers/scsi/libsas/sas_internal.h | 6 ------ > include/scsi/libsas.h | 6 ++++++ > 3 files changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_discover.c > index 951bdc554a10..43a65d0542ab 100644 > --- a/drivers/scsi/libsas/sas_discover.c > +++ b/drivers/scsi/libsas/sas_discover.c > @@ -309,6 +309,7 @@ void sas_free_device(struct kref *kref) > > kfree(dev); > } > +EXPORT_SYMBOL_GPL(sas_free_device); > > static void sas_unregister_common_dev(struct asd_sas_port *port, struct domain_device *dev) > { > diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_internal.h > index 03d6ec1eb970..a1e364deb3ee 100644 > --- a/drivers/scsi/libsas/sas_internal.h > +++ b/drivers/scsi/libsas/sas_internal.h > @@ -98,7 +98,6 @@ int sas_get_phy_attached_dev(struct domain_device *dev, int phy_id, > u8 *sas_addr, enum sas_device_type *type); > int sas_try_ata_reset(struct asd_sas_phy *phy); > > -void sas_free_device(struct kref *kref); > void sas_destruct_devices(struct asd_sas_port *port); > > extern const work_func_t sas_phy_event_fns[PHY_NUM_EVENTS]; > @@ -217,9 +216,4 @@ static inline struct domain_device *sas_alloc_device(void) > return dev; > } > > -static inline void sas_put_device(struct domain_device *dev) > -{ > - kref_put(&dev->kref, sas_free_device); > -} > - > #endif /* _SAS_INTERNAL_H_ */ > diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h > index ba460b6c0374..f67137f50980 100644 > --- a/include/scsi/libsas.h > +++ b/include/scsi/libsas.h > @@ -425,6 +425,12 @@ static inline void sas_put_local_phy(struct sas_phy *phy) > put_device(&phy->dev); > } > > +void sas_free_device(struct kref *kref); > +static inline void sas_put_device(struct domain_device *dev) > +{ > + kref_put(&dev->kref, sas_free_device); > +} As we have discussed internally, I still think exporting sas_put_device() is not a good idea. I prefer exporting an interface to iterate sas_port->dev_list and let the caller operate the domain device. Thanks, Jason > + > #ifdef CONFIG_SCSI_SAS_HOST_SMP > int try_test_sas_gpio_gp_bit(unsigned int od, u8 *data, u8 index, u8 count); > #else
diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_discover.c index 951bdc554a10..43a65d0542ab 100644 --- a/drivers/scsi/libsas/sas_discover.c +++ b/drivers/scsi/libsas/sas_discover.c @@ -309,6 +309,7 @@ void sas_free_device(struct kref *kref) kfree(dev); } +EXPORT_SYMBOL_GPL(sas_free_device); static void sas_unregister_common_dev(struct asd_sas_port *port, struct domain_device *dev) { diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_internal.h index 03d6ec1eb970..a1e364deb3ee 100644 --- a/drivers/scsi/libsas/sas_internal.h +++ b/drivers/scsi/libsas/sas_internal.h @@ -98,7 +98,6 @@ int sas_get_phy_attached_dev(struct domain_device *dev, int phy_id, u8 *sas_addr, enum sas_device_type *type); int sas_try_ata_reset(struct asd_sas_phy *phy); -void sas_free_device(struct kref *kref); void sas_destruct_devices(struct asd_sas_port *port); extern const work_func_t sas_phy_event_fns[PHY_NUM_EVENTS]; @@ -217,9 +216,4 @@ static inline struct domain_device *sas_alloc_device(void) return dev; } -static inline void sas_put_device(struct domain_device *dev) -{ - kref_put(&dev->kref, sas_free_device); -} - #endif /* _SAS_INTERNAL_H_ */ diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index ba460b6c0374..f67137f50980 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h @@ -425,6 +425,12 @@ static inline void sas_put_local_phy(struct sas_phy *phy) put_device(&phy->dev); } +void sas_free_device(struct kref *kref); +static inline void sas_put_device(struct domain_device *dev) +{ + kref_put(&dev->kref, sas_free_device); +} + #ifdef CONFIG_SCSI_SAS_HOST_SMP int try_test_sas_gpio_gp_bit(unsigned int od, u8 *data, u8 index, u8 count); #else
As sas_put_device() needs to be called in lldd, it is now moved to libsas.h Signed-off-by: Xingui Yang <yangxingui@huawei.com> --- drivers/scsi/libsas/sas_discover.c | 1 + drivers/scsi/libsas/sas_internal.h | 6 ------ include/scsi/libsas.h | 6 ++++++ 3 files changed, 7 insertions(+), 6 deletions(-)