Re: [PATCH] tcmu: Oops in unmap_thread_fn()

2017-11-08 Thread Bryant G. Ly


On 8/6/17 6:27 PM, Nicholas A. Bellinger wrote:
> On Tue, 2017-08-01 at 23:09 +0300, Dan Carpenter wrote:
>> Calling list_del() on the iterator pointer in list_for_each_entry() will
>> cause an oops.  We need to user the _safe() version for that.
>>
>> Fixes: c73d02f63c16 ("tcmu: Add fifo type waiter list support to avoid 
>> starvation")
>> Signed-off-by: Dan Carpenter 
>>
> Applied to target-pending/for-next.
>
> Thanks DanC.
>
> --
> To unsubscribe from this list: send the line "unsubscribe target-devel" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
Also missing.

-Bryant



Re: [PATCH] tcmu: Oops in unmap_thread_fn()

2017-08-06 Thread Nicholas A. Bellinger
On Tue, 2017-08-01 at 23:09 +0300, Dan Carpenter wrote:
> Calling list_del() on the iterator pointer in list_for_each_entry() will
> cause an oops.  We need to user the _safe() version for that.
> 
> Fixes: c73d02f63c16 ("tcmu: Add fifo type waiter list support to avoid 
> starvation")
> Signed-off-by: Dan Carpenter 
> 

Applied to target-pending/for-next.

Thanks DanC.



Re: [PATCH] tcmu: Oops in unmap_thread_fn()

2017-08-03 Thread Mike Christie
On 08/01/2017 03:09 PM, Dan Carpenter wrote:
> Calling list_del() on the iterator pointer in list_for_each_entry() will
> cause an oops.  We need to user the _safe() version for that.
> 
> Fixes: c73d02f63c16 ("tcmu: Add fifo type waiter list support to avoid 
> starvation")
> Signed-off-by: Dan Carpenter 
> 
> diff --git a/drivers/target/target_core_user.c 
> b/drivers/target/target_core_user.c
> index 9258b7dd2c30..fd9fcea68d23 100644
> --- a/drivers/target/target_core_user.c
> +++ b/drivers/target/target_core_user.c
> @@ -1985,7 +1985,7 @@ static struct target_backend_ops tcmu_ops = {
>  
>  static int unmap_thread_fn(void *data)
>  {
> - struct tcmu_dev *udev;
> + struct tcmu_dev *udev, *tmp;
>   loff_t off;
>   uint32_t start, end, block;
>   static uint32_t free_blocks;
> @@ -2056,7 +2056,7 @@ static int unmap_thread_fn(void *data)
>* for the global data pool blocks.
>*/
>   mutex_lock(_udev_waiter_mutex);
> - list_for_each_entry(udev, _udev_waiter, waiter) {
> + list_for_each_entry_safe(udev, tmp, _udev_waiter, waiter) {
>   mutex_lock(>cmdr_lock);
>   if (udev->waiting_blocks < free_blocks) {
>   mutex_unlock(>cmdr_lock);
> 

Thanks.

Reviewed-by: Mike Christie 


Re: [PATCH] tcmu: Oops in unmap_thread_fn()

2017-08-01 Thread Xiubo Li


On 2017年08月02日 04:09, Dan Carpenter wrote:

Calling list_del() on the iterator pointer in list_for_each_entry() will
cause an oops.  We need to user the _safe() version for that.

Fixes: c73d02f63c16 ("tcmu: Add fifo type waiter list support to avoid 
starvation")
Signed-off-by: Dan Carpenter 

diff --git a/drivers/target/target_core_user.c 
b/drivers/target/target_core_user.c
index 9258b7dd2c30..fd9fcea68d23 100644
--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -1985,7 +1985,7 @@ static struct target_backend_ops tcmu_ops = {
  
  static int unmap_thread_fn(void *data)

  {
-   struct tcmu_dev *udev;
+   struct tcmu_dev *udev, *tmp;
loff_t off;
uint32_t start, end, block;
static uint32_t free_blocks;
@@ -2056,7 +2056,7 @@ static int unmap_thread_fn(void *data)
 * for the global data pool blocks.
 */
mutex_lock(_udev_waiter_mutex);
-   list_for_each_entry(udev, _udev_waiter, waiter) {
+   list_for_each_entry_safe(udev, tmp, _udev_waiter, waiter) {
mutex_lock(>cmdr_lock);
if (udev->waiting_blocks < free_blocks) {
mutex_unlock(>cmdr_lock);

Good catch and it looks nice for me.

Thanks,

BRs
Xiubo




[PATCH] tcmu: Oops in unmap_thread_fn()

2017-08-01 Thread Dan Carpenter
Calling list_del() on the iterator pointer in list_for_each_entry() will
cause an oops.  We need to user the _safe() version for that.

Fixes: c73d02f63c16 ("tcmu: Add fifo type waiter list support to avoid 
starvation")
Signed-off-by: Dan Carpenter 

diff --git a/drivers/target/target_core_user.c 
b/drivers/target/target_core_user.c
index 9258b7dd2c30..fd9fcea68d23 100644
--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -1985,7 +1985,7 @@ static struct target_backend_ops tcmu_ops = {
 
 static int unmap_thread_fn(void *data)
 {
-   struct tcmu_dev *udev;
+   struct tcmu_dev *udev, *tmp;
loff_t off;
uint32_t start, end, block;
static uint32_t free_blocks;
@@ -2056,7 +2056,7 @@ static int unmap_thread_fn(void *data)
 * for the global data pool blocks.
 */
mutex_lock(_udev_waiter_mutex);
-   list_for_each_entry(udev, _udev_waiter, waiter) {
+   list_for_each_entry_safe(udev, tmp, _udev_waiter, waiter) {
mutex_lock(>cmdr_lock);
if (udev->waiting_blocks < free_blocks) {
mutex_unlock(>cmdr_lock);