• Jay Fenlason's avatar
    firewire: cdev: use an idr rather than a linked list for resources · 45ee3199
    Jay Fenlason authored
    The current code uses a linked list and a counter for storing
    resources and the corresponding handle numbers.  By changing to an idr
    we can be safe from counter wrap-around giving two resources the same
    handle.
    
    Furthermore, the deallocation ioctls now check whether the resource to
    be freed is of the intended type.
    Signed-off-by: default avatarJay Fenlason <fenlason@redhat.com>
    
    Some rework by Stefan R:
      - The idr API documentation says we get an ID within 0...0x7fffffff.
        Hence we can rest assured that idr handles fit into cdev handles.
      - Fix some races.  Add a client->in_shutdown flag for this purpose.
      - Add allocation retry to add_client_resource().
      - It is possible to use idr_for_each() in fw_device_op_release().
      - Fix ioctl_send_response() regression.
      - Small style changes.
    Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
    45ee3199
fw-cdev.c 27.5 KB