From owner-freebsd-hackers Sat Nov 1 12:24:29 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.7/8.8.7) id MAA05710 for hackers-outgoing; Sat, 1 Nov 1997 12:24:29 -0800 (PST) (envelope-from owner-freebsd-hackers) Received: from trojanhorse.ml.org (mdean.vip.best.com [206.86.94.101]) by hub.freebsd.org (8.8.7/8.8.7) with ESMTP id MAA05690 for ; Sat, 1 Nov 1997 12:24:20 -0800 (PST) (envelope-from jamil@trojanhorse.ml.org) Received: from localhost (jamil@localhost) by trojanhorse.ml.org (8.8.7/8.8.5) with SMTP id MAA05621; Sat, 1 Nov 1997 12:24:20 -0800 (PST) Date: Sat, 1 Nov 1997 12:24:20 -0800 (PST) From: "Jamil J. Weatherbee" To: hackers@freebsd.org cc: dufault@hda.com Subject: Strategy Routines Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-hackers@freebsd.org X-Loop: FreeBSD.org Precedence: bulk I've noticed that startegy routines are never bassed buffers >64kb (at least as far as I can tell). However a read call can be done with a buffer just under 1/2 megabyte, and so the strategy routine will get called 9 or 10 times (using rawread/rawwrite). It seems that between these calls to the strategy routine no rescheduling is done, so if filling a 1/2 megabyte buffer takes a while, then interactive activity basically gets locked out for that period. Now I know that if the drivers routine can be interrupt driven the this is all solved, but if (as in digital_out_strategy() in labpc.c) someone passes a 1/2 megabyte buffer, youv'e got a problem as your going to be out of business for at least .5 seconds. So how can the equivalent of reschedule() under the linux kernel be done in here. You could then limit yourself (in the drivers) to say 1024 bytes written then a reschedule() to maintain the interactivity.