firewire: cdev: shut down iso context before freeing the buffer
authorStefan Richter <stefanr@s5r6.in-berlin.de>
Mon, 5 Jan 2009 19:28:10 +0000 (20:28 +0100)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Tue, 24 Mar 2009 19:56:46 +0000 (20:56 +0100)
DMA must be halted before we DMA-unmap and free the DMA buffer.  Since
we cannot rely on the client to stop the context before it closes the
fd, we have to reorder fw_iso_buffer_destroy vs. fw_iso_context_destroy.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
drivers/firewire/fw-cdev.c

index 3d816a6395cd2c575b33db3023b133fef4e557df..b93ad9c0a0d0625723b879708c544cdd98aa16ba 100644 (file)
@@ -1386,12 +1386,12 @@ static int fw_device_op_release(struct inode *inode, struct file *file)
        list_del(&client->link);
        mutex_unlock(&client->device->client_list_mutex);
 
-       if (client->buffer.pages)
-               fw_iso_buffer_destroy(&client->buffer, client->device->card);
-
        if (client->iso_context)
                fw_iso_context_destroy(client->iso_context);
 
+       if (client->buffer.pages)
+               fw_iso_buffer_destroy(&client->buffer, client->device->card);
+
        /* Freeze client->resource_idr and client->event_list */
        spin_lock_irq(&client->lock);
        client->in_shutdown = true;