Re: Filesystem problems

From: greg scott <x-x_at_nospam.org>
Date: Thu Dec 30 2004 - 16:53:50 PST

Andy,

there is a summary of testing at the end, in case the detail is
excessive.

Andy Valencia From: <vandys@vsta.org> writes:

>>i have a disk committed to ForthOS, with a minimal slackware linux on
>>hda1 and ForthOS on hda2. the partitions show up in fdisk as 83 and 9E
>>(unknown) respectively.
>
> Ok, so a single disk, two partitions?

yes

>>the only problem i am having is that fs.mkdir doesnt work properly:
>>A. the largest value of N in "N fs.mkdir foo" that works is 27
>>B. although for N<=27 the fs.ls looks good, the new dir is lost after
>> rebooting, ie. it doesnt show up in fs.ls, and you can recreate it
>> exactly as before and it doesnt complain about already existing.
>
> Although I don't believe it should be necessary, could you do "sync" before
> your reboot and see if that changes the behavior?

"sync" hangs, even though N<=27. F2 (2nd screen) shows "Task 1" only,
one line up from the bottom of the screen. but it does make entries
persist now.

i noticed that chars typed on the "hung" screen 1 are echoed on the
last line of screen 2. so what appears to be a hung screen (cursor
doesnt move, no echoed chars) isnt really. typing "bye" plus many CRs
has no effect, but as soon as you do F2 to switch screens the pc
reboots. so the sequence "bye CR F2" reboots. from a user feedback
angle, "F2 bye CR" is more pleasant, but in any case this saves me
getting up to physically reset the pc.

the 2nd screen also gives a chance to do "sync" or "fs.ls" after
screen 1 hangs, but then screen 2 hangs and i have to get out of my
chair. avoiding commands that hang screen2 gives a chance to do
something else, but i dont know what. ".s" shows nothing on the
stack. perhaps there is an address to look at? let me know if there
are any debugging cmds you want me to try.

>>C. after a "succesful" fs.mkdir, the next fs.mkdir attempt fails (hung
>> system) for any value of N. of course i used a different directory
>> name.
>
> Could you "fs.cd util" and then try creating your > 27 block directory
> within util? That'll give me a hint whether it's the format of the root
> directory or something else.

you were right, i can enter N>27 without an immediate hang. this time
the boundary value is N=30.

here is the sequence of operations:

10000 fs.root!
fs.cd/
fs.ls
[snip all but util]
Type Start Length Name
Dir 12101 11/1000 util

fs.cd util
fs.ls
Type Start Length Name
File 12102 5/10 term

28 fs.mkdir foo
[ok, no hang as in root]
fs.ls
Type Start Length Name
File 12102 5/10 term
Dir 12112 1/28 foo

[rebooting loses the foo entry, so this time "sync" (hangs screen1),
"F2 bye CR"] after reboot:

Type Start Length Name
File 12102 5/10 term
  2 12112 4294954195/4294954195 foo

28 fs.mkdir bar
fs.ls
File 12102 5/10 term
Dir 12112 1/28 foo
Dir 12112 1/28 bar

note that making the bar dir reset the entry for foo, but that the bar
entry is a duplicate of the "reset" foo entry, rather than starting 28
blocks higher than foo.

at least for small values of N in "N fs.mkdir foo", it acts like no
sync is done, so the entry is not there after reboot. so i make a
habit of sync, then "F2 bye CR".

after sync and reboot:
fs.cd util
fs.ls
Type Start Length Name
File 12102 5/10 term
  2 12112 4294954195/4294954195 foo
  2 12112 4294954195/4294954195 bar

the entries for foo and bar are identical, with the familiar
(ULONG_MAX - delta) number.

try a bigger N:
29 fs.mkdir baz
fs.ls
File 12102 5/10 term
Dir 12112 1/29 foo
Dir 12112 1/29 bar
Dir 12112 1/29 baz

again the previous bad entries are "reset", but this time with the new
length (29 rather than their original 28).

sync and reboot:
Type Start Length Name
File 12102 5/10 term
  2 12112 4294954195/4294954195 foo
  2 12112 4294954195/4294954195 bar
  2 12112 4294954195/4294954195 baz

previously the highest value of N that produced a reasonable fs.ls
output was 27. within the util directory, the equivalent is N=30. for
N=31, although fs.mkdir gets the "Ok" response, fs.ls only displays
the header line
"Type Start Length Name"
and screen1 is hung. repeating fs.ls on screen2 shows the same output
and hangs screen2.

there is an important difference with N>boundary (27 in root, 30 in
util):
even using screen2 to issue "sync" for N>boundary, there is no
evidence of the mkdir attempt after screen2-sync and manual reboot
(since screen2 is now hung).

for N<=boundary value, sync (possible on screen1, since no hang)
writes out the entry. it hangs of course, but after a screen2-bye, the
latest attempt appears as
  2 12112 4294954195/4294954195 <dirname>

you can keep adding many of these entries, as long as N<=boundary value.

> When it hangs, can you hit F2 to switch to the second screen?

yes, screen2 always shows just "Task 1", but lets me enter
commands. at this point it is great for rebooting, but maybe there is
some info you can direct me to collect.

> and I thank you for your patience (I know how much tedium is involved in

you are most welcome. ForthOS is worth the effort.

-----------------------------------------------------------

**SUMMARY**
- sync makes a difference. directory entries persist after reboot now.
- F2 works after screen1 is hung, just showing "Task 1" but allowing
  further cmd input after screen1 is apparently hung (though typing in
  screen1 is echoed on the bottom line of screen2.
- the boundary value depends on where you are in the hierarchy, 27 in
   / and 30 in util. For boundary value N or less, fs.ls shows reasonable
   output. above that you see a partial display and immediate system hang.
- the big difference for values of N is that N>boundary entry does not
  persist after reboot, even when screen2 is sacrificed (i mean
  because it hangs) to issue a sync.
- for N<=boundary, fs.ls looks good, but after sync+reboot all such
  entries are identical, with the (ULONG_MAX - delta) form:
  2 12112 4294954195/4294954195 baz

  fs.cd gets response "Not Dir??". after a new entry resets the Dir
  entries (see next point), you can fs.cd into one that rejected the
  attempt when it looked bogus.
- as long as N<=boundary, you can keep adding entries. after a new
  entry, fs.ls resets all the bogus entries to have more reasonable
  lengths, but they are all identical, ie. overlapping rather than
  consecutive, and the length is always that of the latest entry that
  reset the bogus forms. for ex., all previous values of N were 28,
  but the latest entry used N=29:
  29 fs.mkdir baz
  fs.ls
  File 12102 5/10 term
  Dir 12112 1/29 foo
  Dir 12112 1/29 bar
  Dir 12112 1/29 baz

  even if the latest N is smaller than the previous values, it gets used
  in the display.
- as long as a Dir entry is not in the "bogus" form described earlier,
  you can enter it and use fs.creat, but the file and dir will not
  persist after reboot. for example:
  fs.cd baz
  5 fs.creat bazfl v
  [enter text, then ZZ hangs]
  switch to screen2 and sync
  after reboot, neither file nor dir appear.

  it doesnt help to use a previous dir rather than the latest (that
  resets previous entries). after ZZ and a sync on screen2, then
  reboot and use a new fs.mkdir to "reset" the previous Dir entries,
  you can fs.cd but the file is not there.

hope this detail is not overwhelming.

-- 
greg
Received on Thu, 30 Dec 2004 18:53:50 -0600

This archive was generated by hypermail 2.1.8 : Tue Sep 26 2006 - 09:03:02 PDT