tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: proposal: some pointer and arithmetic utilities
Date: Thu, 21 Mar 2013 22:25:05 +0100
From: Rhialto <rhialto%falu.nl@localhost>
Even if you use your container_of macro, there is no proof that the
pointer you receive is actually of the type you expect, only that you're
using the correct offsets if by accident it is.
What you should IMHO really do is convert the function pointer to
physio_done() to the correct type as expected by workqueue_enqueue(),
and at *that* point prove somehow that it is correct. Not inside
physio_done().
We could also add a void * member to struct work:
bp->b_work.wk_data = &bp;
workqueue_enqueue(physio_workqueue, &bp->b_work, NULL);
...
struct buf *bp = wk->wk_data;
Of course, you would have to prove that the pointer that got put into
wk->wk_data was actually a struct buf. With any of these three
approaches -- container_of, function pointer conversion, extra void *
member -- you have to prove something, which in the case of workqueues
is provided by the semantics of the workqueue abstraction. I'm only
proposing a safer way to express an idiom that we already use
extensively.
Home |
Main Index |
Thread Index |
Old Index