stm class: Plug stm device's unlink callback
[cascardo/linux.git] / drivers / hwtracing / stm / core.c
index 3018182..de80d45 100644 (file)
@@ -376,14 +376,19 @@ err_free:
 static int stm_char_release(struct inode *inode, struct file *file)
 {
        struct stm_file *stmf = file->private_data;
+       struct stm_device *stm = stmf->stm;
+
+       if (stm->data->unlink)
+               stm->data->unlink(stm->data, stmf->output.master,
+                                 stmf->output.channel);
 
-       stm_output_free(stmf->stm, &stmf->output);
+       stm_output_free(stm, &stmf->output);
 
        /*
         * matches the stm_char_open()'s
         * class_find_device() + try_module_get()
         */
-       stm_put_device(stmf->stm);
+       stm_put_device(stm);
        kfree(stmf);
 
        return 0;
@@ -865,8 +870,18 @@ unlock:
        spin_unlock(&src->link_lock);
        spin_unlock(&stm->link_lock);
 
-       if (!ret && src->data->unlink)
-               src->data->unlink(src->data);
+       /*
+        * Call the unlink callbacks for both source and stm, when we know
+        * that we have actually performed the unlinking.
+        */
+       if (!ret) {
+               if (src->data->unlink)
+                       src->data->unlink(src->data);
+
+               if (stm->data->unlink)
+                       stm->data->unlink(stm->data, src->output.master,
+                                         src->output.channel);
+       }
 
        return ret;
 }