[openib-general] user_mad::ib_umad_read question
Sean Hefty
mshefty at ichips.intel.com
Thu May 19 09:46:44 PDT 2005
Hal Rosenstock wrote:
> In ib_umad_read, there is currently (or soon to be something like) the
> following:
> ...
> packet = list_entry(file->recv_list.next, struct ib_umad_packet, list);
> list_del(&packet->list);
>
> spin_unlock_irq(&file->recv_lock);
>
> if (copy_to_user(buf, &packet->mad,
> min(count, packet->length +
> sizeof (struct ib_user_mad))))
> ret = -EFAULT;
> else
> ret = count;
>
> kfree(packet);
> return ret;
>
> Should the packet be thrown away because copy_to_user() fails ?
> Shouldn't it be placed back at the head of the list ? Unfortunately,
> that would mean holding the recv lock longer (through the duration of
> copy_to_user).
In the failure case, could you just re-acquire the lock and insert the
packet at the head of the list? Even if this results in reading MADs out of
order, I wouldn't think that this would matter.
- Sean
More information about the general
mailing list