diff options
| -rw-r--r-- | drivers/infiniband/core/iwcm.c | 5 | 
1 files changed, 3 insertions, 2 deletions
| diff --git a/drivers/infiniband/core/iwcm.c b/drivers/infiniband/core/iwcm.c index 223b1aa7d92b..81c9195b512a 100644 --- a/drivers/infiniband/core/iwcm.c +++ b/drivers/infiniband/core/iwcm.c | |||
| @@ -839,6 +839,7 @@ static void cm_work_handler(struct work_struct *_work) | |||
| 839 | unsigned long flags; | 839 | unsigned long flags; | 
| 840 | int empty; | 840 | int empty; | 
| 841 | int ret = 0; | 841 | int ret = 0; | 
| 842 | int destroy_id; | ||
| 842 | 843 | ||
| 843 | spin_lock_irqsave(&cm_id_priv->lock, flags); | 844 | spin_lock_irqsave(&cm_id_priv->lock, flags); | 
| 844 | empty = list_empty(&cm_id_priv->work_list); | 845 | empty = list_empty(&cm_id_priv->work_list); | 
| @@ -857,9 +858,9 @@ static void cm_work_handler(struct work_struct *_work) | |||
| 857 | destroy_cm_id(&cm_id_priv->id); | 858 | destroy_cm_id(&cm_id_priv->id); | 
| 858 | } | 859 | } | 
| 859 | BUG_ON(atomic_read(&cm_id_priv->refcount)==0); | 860 | BUG_ON(atomic_read(&cm_id_priv->refcount)==0); | 
| 861 | destroy_id = test_bit(IWCM_F_CALLBACK_DESTROY, &cm_id_priv->flags); | ||
| 860 | if (iwcm_deref_id(cm_id_priv)) { | 862 | if (iwcm_deref_id(cm_id_priv)) { | 
| 861 | if (test_bit(IWCM_F_CALLBACK_DESTROY, | 863 | if (destroy_id) { | 
| 862 | &cm_id_priv->flags)) { | ||
| 863 | BUG_ON(!list_empty(&cm_id_priv->work_list)); | 864 | BUG_ON(!list_empty(&cm_id_priv->work_list)); | 
| 864 | free_cm_id(cm_id_priv); | 865 | free_cm_id(cm_id_priv); | 
| 865 | } | 866 | } | 
