[ENBD] 2.5.46 update

Tad Kollar enbd@lists.community.tummy.com
Tue, 12 Nov 2002 13:25:59 -0500


> Now, is this a lockup, or an oops? No - scratch that. Are you running
> SMP? If not, then the fact that there's a spinlock ther is immaterial.
> If you are running SMP, then the spinlock may be the problem. 

It's a lockup... running SMP (Tyan MPX mb, AthlonMP 2000+)

> If you are on SMP, can you change the call of nbd_end_request_lock to be
> just nbd_end_request?  Or even better, replace the call in enbd.h to
> give some warning, thus ..
> 
>   static void nbd_end_request_lock(struct request *req) {
> 
>     // PTB the kernel has only 2 queues, read and write, and it uses
>     // the cmd field to determine to which the req belongs. We add a
>     // seqno to it in nbd_do_req, so we reestablish it here.
>     static void rq_set_seqno(struct request *, int);
> 
>     rq_set_seqno(req, 0); // PTB Zero extra seqno info
> +   if (spin_trylock(req->q->queue_lock) != 0) {
> +       printk(KERN_ALERT "nbd: end_request_lock called with lock held!\n");
> +   } else {
> +       spin_unlock(req->q->queue_lock);
> +   }
>     end_request_lock( req, !req->errors );
>   }

Thanks, I'll put that in and give it a try presently.

> And are you running a preemptible kernel? That's another kettle of
> fish.

No, that caused me too many problems in the past...