Subject: Re: Writing to disk from the network stack (bottom half of the
To: Paul Sommerhein <firstname.lastname@example.org>
From: Bill Studenmund <email@example.com>
Date: 02/04/2003 09:38:25
On Tue, 4 Feb 2003, Paul Sommerhein wrote:
> Ok, this might not be feasible, but what I want to do is to write
> a 64kB chunk of data to the end of a disk file from within the
> network stack in the bottom half of the kernel (incoming data
> path, no process context).
What do you want to do? i.e. what's the bigger-picture goal?
> Some assumptions
> o Not required to work with all filesystems, but need to work
> with UFS/FFS.
> o Only one writer (bottom half of kernel) and no readers (yet).
> o The file has been opened for writing by a process which
> we have a pointer to.
> o The buffer cache should not be used (for writing).
Note, with the addition of UBC, we no longer use the buffer cache for file
> o The 64kB chunk will (always) extend the file (appending).
> o The file system has a 64kB block size.
> o The maximum disk request is 64kB (is it?).
> The idea is to allocate a buffer structure and point its data
> buffer pointer to my 64kB data chunk. Then I initialize
> b_iodone to point to a function that will take care of the
> buffer when the write has completed. The other members
> of the buffer structure is initalized to proper values.
> The buffer is then sent to the disk driver (VOP_STRATEGY?).
> If I have understood things correctly, my main problem will be
> that some of the file system code might block, which I can't
> tolerate since I am in the bottom half of the kernel. More
> specifically, I have a feeling that since I need to extend the
> file, the process of allocating a physical disk block might block.
> Is this feeling right?
> Are there any other issues involved which may make this impossible?
> Any pointers highly appreciated.
Why not just create a kernel thread that reads the socket and writes the