Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Apr 1999 03:41:10 +0200 (MET DST)
From:      Per Kristian Hove <perhov@phys.ntnu.no>
To:        freebsd-hackers@freebsd.org
Subject:   data corruption using loopback fs
Message-ID:  <Pine.GS4.4.10.9904080303200.10832-100000@huset.math.ntnu.no>

next in thread | raw e-mail | index | archive | help
I'm experiencing severe data corruption when I use loopback mounting of
filesystes. Am I doing anything really really wrong, or is there a problem
with nullfs? I'm running 3.1-RELEASE.

I have a filesystem /export, and my homedir is /home/a/perhov. When
/home/a is a symlink to /export/home/a, everything works fine:

perhov@phi:~$ pwd
/home/a/perhov
perhov@phi:~$ ls -l /home/a
lrwxr-xr-x  1 root  wheel  14 Apr  8 02:41 /home/a -> /export/home/a
perhov@phi:~$ df .
Filesystem   1K-blocks     Used    Avail Capacity  Mounted on
/dev/wd0s4f    6222892  4970752   754309    87%    /export
perhov@phi:~$ md5sum foo
5c137d93793d1c6b75344de07f4ccb76  foo
perhov@phi:~$ cp foo bar
perhov@phi:~$ md5sum foo bar
5c137d93793d1c6b75344de07f4ccb76  foo
5c137d93793d1c6b75344de07f4ccb76  bar

But when /export/home/a is mounted on /home/a, it fails:

phi:~# cd /home
phi:/home# ls
a@	b@
phi:/home# rm a
phi:/home# mkdir a
phi:/home# mount_null /export/home/a /home/a

perhov@phi:~$ md5sum foo
5c137d93793d1c6b75344de07f4ccb76  foo
perhov@phi:~$ cp foo bar
cp: bar: Bad address
perhov@phi:~$ md5sum foo bar
5c137d93793d1c6b75344de07f4ccb76  foo
d41d8cd98f00b204e9800998ecf8427e  bar

and the file 'bar' is empty. syslog says:
Apr  8 02:43:59 phi /kernel: vm_fault: pager read error, pid 327 (cp)


It also happens when mounting /export itself and not a subdirectory:
/export mounted onto /mnt2:

phi:/mnt2# mount | grep mnt2
/export on /mnt2 (local)
phi:/mnt2# df .
Filesystem   1K-blocks     Used    Avail Capacity  Mounted on
/dev/wd0s4f    6222892  5074152   650909    89%    /export

phi:/mnt2# cp foo bar

(this time no kernel messages appears, and 'bar' is the same size as
'foo')

phi:/mnt2# md5sum foo bar
58e14256750b3eb43079de73dc14e616 foo
eef586fa9bfd12b496912e78e4e2680f bar
phi:/mnt2# md5sum foo bar
58e14256750b3eb43079de73dc14e616 foo
eef586fa9bfd12b496912e78e4e2680f bar

well, at least it's equally wrong for both invocations of md5sum. I copy
the file again:

phi:/mnt2# cp foo bar
phi:/mnt2# md5sum foo bar
58e14256750b3eb43079de73dc14e616 foo
ada96c644ec1992213c61a87c1e1d744 bar

and now it's different. But when I try to copy the file in /export, not in
/mnt2, it works fine:

phi:/mnt2# cd /export
phi:/export# cp foo bar
phi:/export# md5sum foo bar
58e14256750b3eb43079de73dc14e616 foo
58e14256750b3eb43079de73dc14e616 bar

Strange. Then, when I go back to /mnt2 and tries again, it also works fine
there, presumably because it's in the cache.

If this unexpected behaviour is a bug, is it fixed in 3.1-STABLE?
If it's not a bug, what am I doing wrong?

Most of the times i try, it only says
cp: bar: Bad address
and the destination file ends up empty. I didn't save the "wrong"
bar-file, but from taking a quick glance at its contents, it seemed that
the beginning of the file was damaged, but the end was okay.


-- 
per kristian                                       <perhov@phys.ntnu.no>




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GS4.4.10.9904080303200.10832-100000>