Messages in this thread | | | Subject | Re: [PATCH] Replace completions with semaphores | From | Daniel Walker <> | Date | Sat, 12 Apr 2008 11:01:35 -0700 |
| |
On Sat, 2008-04-12 at 11:26 -0600, Matthew Wilcox wrote:
> It would look bloody odd to write (code taken from megasas_mgmt_ioctl_fw() in > drivers/scsi/megaraid/megaraid_sas.c): > > if (wait_for_completion_interruptible(&instance->ioctl_completion)) { > error = -ERESTARTSYS; > goto out_kfree_ioc; > } > error = megasas_mgmt_fw_ioctl(instance, user_ioc, ioc); > complete(&instance->ioctl_sem); > > What I'm trying to get a feeling for is whether people find it similarly > odd to use semaphores where we currently use completions. We *used* > to, but I don't find that a compelling reason.
The above doesn't look all that odd to me. It may be that you've seen semaphores in that position in the past and just expect to see them.
> Arnd contacted me off-list and made the very sensible suggestion of: > > struct completion { > struct semaphore sem; > } > > That lets us eliminate the duplicate code since all the completion > functions become very thin wrappers around semaphore operations. > > I'll note that the semaphore code I hae queued for 2.6.26 is slightly > more efficient than the current implementation of completions because > completions use the generic waitqueue code and thus do an indirect > function call per wakeup. Of course, there's no reason completions > couldn't use the same technique as my semaphore code ... but then they > would be identical to semaphores ;-)
I would just re-write completions keeping the name and API in tact, make them better and just leave semaphores alone..
Daniel
| |