Re: [PATCH] dm.c - device-mapper I/O path fixes

Denis Vlasenko
2002-12-11T13:35:16Z

On 11 December 2002 10:19, Joe Thornber wrote:
> dec_pending(): only bother spin locking if io->error is going to be
> updated. [Kevin Corry]
>
> --- diff/drivers/md/dm.c 2002-12-11 12:00:29.000000000 +0000
> +++ source/drivers/md/dm.c 2002-12-11 12:00:34.000000000 +0000
> @@ -238,10 +238,11 @@
> static spinlock_t _uptodate_lock = SPIN_LOCK_UNLOCKED;
> unsigned long flags;
>
> - spin_lock_irqsave(&_uptodate_lock, flags);
> - if (error)
> + if (error) {
> + spin_lock_irqsave(&_uptodate_lock, flags);
> io->error = error;
> - spin_unlock_irqrestore(&_uptodate_lock, flags);
> + spin_unlock_irqrestore(&_uptodate_lock, flags);
> + }
>
> if (atomic_dec_and_test(&io->io_count)) {
> if (atomic_dec_and_test(&io->md->pending))

This seems pointless, end result:

spin_lock_irqsave(&_uptodate_lock, flags);
io->error = error;
spin_unlock_irqrestore(&_uptodate_lock, flags);

BTW, the function we are looking at:

static inline void dec_pending(struct dm_io *io, int error)
^^^^^^
is too big for inlining.
--
vda