[dm-devel] Probably unnecessary spinlock in dm.c

Christophe Saout christophe at saout.de
Thu Jan 1 16:19:01 UTC 2004


Hi!

> static inline void dec_pending(struct dm_io *io, int error)
> {
>     static spinlock_t _uptodate_lock = SPIN_LOCK_UNLOCKED;
>     unsigned long flags;
>
>     if (error) {
>         spin_lock_irqsave(&_uptodate_lock, flags);
>         io->error = error;
>         spin_unlock_irqrestore(&_uptodate_lock, flags);
>     }

I think this spinlock is unnecessary. Yes, there can be a race, but it
doesn't matter. If there are two threads racing for io->error, what
happens? io->error will be non-null.

There are other places in the kernel where racing is explicitly allowed
in order to save a spinlock. We don't even have to take additional care
in this case.






More information about the dm-devel mailing list