minix/servers/fs
Ben Gras d844d2a547 Fixed nasty bug that would cause FS to loop forever in rw_scattered (while
syncing, for instance) if blocks are unwritable. This could happen if:

  . write goes beyond device boundary to a block device
  . write is done for a complete block or more; thus the
    block is not retrieved first (at which point it would be noticed
    it doesn't exist), but the buffer is simply allocated
  . at write time, the device i/o doesn't succeed, but rw_scattered
    doesn't understand this and loops forever trying to get the block
    written.

Currently, if no blocks can be written, the loop aborts, leaving all
buffers intact but potentially dirty. When invalidate() is called on the
device, the buffers will disappear (even if dirty). Same story for if
the buffer is removed due to rmed from lru chain. There's not much we
can do about this, however - we can't keep these blocks around, forever
occupying a buffer in the buffer cache.

The second part of the solution is not to let unwritable buffers be
created in the first place. How to do this, however, without doing a
wasteful read first?

It looks like this code was in 2.0.4 too.
2005-06-19 22:33:49 +00:00
..
buf.h Fixed 'ps' utility: now get process table addresses with getsysinfo() calls. 2005-06-06 13:51:50 +00:00
cache.c Fixed nasty bug that would cause FS to loop forever in rw_scattered (while 2005-06-19 22:33:49 +00:00
cache2.c Initial revision 2005-04-21 14:53:53 +00:00
cmostime.c Replaced flagalrm() timers with another technique to check for timeouts. 2005-05-31 14:43:04 +00:00
const.h Started select() implementation. 2005-06-17 13:41:12 +00:00
device.c Started select() implementation. 2005-06-17 13:41:12 +00:00
dmap.c Removed debug dumps from the PM and FS servers. The dumps are now done by the 2005-06-07 14:43:35 +00:00
dmap.h Initial revision 2005-04-21 14:53:53 +00:00
file.h Started select() implementation. 2005-06-17 13:41:12 +00:00
filedes.c Started select() implementation. 2005-06-17 13:41:12 +00:00
fproc.h Moved stime, time, times POSIX calls from FS to PM. Removed child time 2005-05-31 09:50:51 +00:00
fs.h Fixed bug relating to FS and MEMORY during startup; 2005-06-06 09:30:44 +00:00
fs_timers.h Started select() implementation. 2005-06-17 13:41:12 +00:00
glo.h Removed debug dumps from the PM and FS servers. The dumps are now done by the 2005-06-07 14:43:35 +00:00
inode.c Initial revision 2005-04-21 14:53:53 +00:00
inode.h Initial revision 2005-04-21 14:53:53 +00:00
link.c Initial revision 2005-04-21 14:53:53 +00:00
lock.c Initial revision 2005-04-21 14:53:53 +00:00
lock.h Initial revision 2005-04-21 14:53:53 +00:00
main.c Started select() implementation. 2005-06-17 13:41:12 +00:00
Makefile Started select() implementation. 2005-06-17 13:41:12 +00:00
misc.c Removed debug dumps from the PM and FS servers. The dumps are now done by the 2005-06-07 14:43:35 +00:00
mount.c Initial revision 2005-04-21 14:53:53 +00:00
open.c freed up use of name 'offset' 2005-05-20 13:27:38 +00:00
param.h Fixed 'ps' utility: now get process table addresses with getsysinfo() calls. 2005-06-06 13:51:50 +00:00
path.c Cleaned up src/lib/utils library. Renamed server_ functions to more logical 2005-06-01 14:31:00 +00:00
pipe.c Started select() implementation. 2005-06-17 13:41:12 +00:00
protect.c Initial revision 2005-04-21 14:53:53 +00:00
proto.h Started select() implementation. 2005-06-17 13:41:12 +00:00
read.c Started select() implementation. 2005-06-17 13:41:12 +00:00
select.c Started select() implementation. 2005-06-17 13:41:12 +00:00
select.h Started select() implementation. 2005-06-17 13:41:12 +00:00
stadir.c *** empty log message *** 2005-04-29 15:36:43 +00:00
super.c Fixed 'ps' utility: now get process table addresses with getsysinfo() calls. 2005-06-06 13:51:50 +00:00
super.h Initial revision 2005-04-21 14:53:53 +00:00
table.c small compile fixes; initial select() stubs; release.sh script doesn't 2005-06-06 11:40:32 +00:00
time.c Moved stime, time, times POSIX calls from FS to PM. Removed child time 2005-05-31 09:50:51 +00:00
timers.c Part of fs timers library, forgot to add this in previous commit. 2005-06-17 13:49:56 +00:00
type.h Initial revision 2005-04-21 14:53:53 +00:00
utility.c Cleaned up src/lib/utils library. Renamed server_ functions to more logical 2005-06-01 14:31:00 +00:00
write.c Initial revision 2005-04-21 14:53:53 +00:00