Trevor Watson wrote:
Anton B. Rang wrote:
Were there any errors reported in /var/adm/messages, or do you see any
logged via fmdump?
Nothing, unfortunately.
In Solaris 10, 'ls' will not print any error message if reading from a
directory fails. (Fixed in Nevada.) If something damaged a directory
(including ZFS detecting a checksum error), its contents (or some of
them) may appear to vanish without any error being printed.
I'll try trussing ls if it happens again.
The implication in what you've written is that ZFS doesn't report an
error if it detects an invalid checksum. Is that correct?
If there is a checksum error, then 'ls' will fail. Here i forceable put
a checksum error on a directory:
# ls /monkey/dir
ls: error reading directory /monkey/dir: I/O error
Via truss, you can see getdents64() will return EIO.
# truss ls /monkey/dir
execve("/usr/bin/ls", 0x08047C4C, 0x08047C58) argc = 2
resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) = 12
resolvepath("/usr/bin/ls", "/usr/bin/ls", 1023) = 11
sysconfig(_CONFIG_PAGESIZE) = 4096
xstat(2, "/usr/bin/ls", 0x08047A08) = 0
open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT
xstat(2, "/lib/libsec.so.1", 0x080471D8) = 0
resolvepath("/lib/libsec.so.1", "/lib/libsec.so.1", 1023) = 16
open("/lib/libsec.so.1", O_RDONLY) = 3
mmap(0x00010000, 4096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ALIGN, 3, 0)
= 0xBFFB0000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xBFFA0000
mmap(0x00010000, 147456, PROT_NONE,
MAP_PRIVATE|MAP_NORESERVE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xBFF70000
mmap(0xBFF70000, 54015, PROT_READ|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED|MAP_TEXT, 3, 0) = 0xBFF70000
mmap(0xBFF8E000, 12045, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_INITDATA, 3, 57344) = 0xBFF8E000
mmap(0xBFF91000, 8408, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANON, -1, 0) = 0xBFF91000
munmap(0xBFF7E000, 65536) = 0
memcntl(0xBFF70000, 11452, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
close(3) = 0
xstat(2, "/lib/libc.so.1", 0x080471D8) = 0
resolvepath("/lib/libc.so.1", "/lib/libc.so.1", 1023) = 14
open("/lib/libc.so.1", O_RDONLY) = 3
mmap(0xBFFB0000, 4096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0)
= 0xBFFB0000
mmap(0x00010000, 1040384, PROT_NONE,
MAP_PRIVATE|MAP_NORESERVE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xBFE70000
mmap(0xBFE70000, 937863, PROT_READ|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED|MAP_TEXT, 3, 0) = 0xBFE70000
mmap(0xBFF65000, 27222, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_INITDATA, 3, 937984) = 0xBFF65000
mmap(0xBFF6C000, 5560, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANON, -1, 0) = 0xBFF6C000
munmap(0xBFF55000, 65536) = 0
memcntl(0xBFE70000, 187828, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
close(3) = 0
xstat(2, "/lib/libavl.so.1", 0x080471D8) = 0
resolvepath("/lib/libavl.so.1", "/lib/libavl.so.1", 1023) = 16
open("/lib/libavl.so.1", O_RDONLY) = 3
mmap(0xBFFB0000, 4096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0)
= 0xBFFB0000
mmap(0x00010000, 73728, PROT_NONE,
MAP_PRIVATE|MAP_NORESERVE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xBFE50000
mmap(0xBFE50000, 3228, PROT_READ|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED|MAP_TEXT, 3, 0) = 0xBFE50000
mmap(0xBFE61000, 220, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_INITDATA, 3, 4096) = 0xBFE61000
munmap(0xBFE51000, 65536) = 0
memcntl(0xBFE50000, 1256, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
close(3) = 0
munmap(0xBFFB0000, 4096) = 0
mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xBFFB0000
getcontext(0x080477B0)
getrlimit(RLIMIT_STACK, 0x080477A8) = 0
getpid() = 100888 [100887]
lwp_private(0, 1, 0xBFFB2000) = 0x000001C3
setustack(0xBFFB2060)
sysi86(SI86FPSTART, 0xBFF6CBE8, 0x0000133F, 0x00001F80) = 0x00000001
brk(0x08066208) = 0
brk(0x08068208) = 0
time() = 1166205046
ioctl(1, TCGETA, 0x0804797C) = 0
ioctl(1, TIOCGWINSZ, 0x08065478) = 0
brk(0x08068208) = 0
brk(0x08072208) = 0
lstat64("/monkey/dir", 0x08046860) = 0
openat(AT_FDCWD, "/monkey/dir", O_RDONLY|O_NDELAY|O_LARGEFILE) = 3
fcntl(3, F_SETFD, 0x00000001) = 0
fstat64(3, 0x08047860) = 0
getdents64(3, 0xBFFB4000, 8192) Err#5 EIO
fstat64(2, 0x080469A0) = 0
ls: error reading directory write(2, " l s : e r r o r r e".., 28) = 28
/monkey/dirwrite(2, " / m o n k e y / d i r", 11) = 11
: write(2, " : ", 2) = 2
I/O errorwrite(2, " I / O e r r o r", 9) = 9
write(2, "\n", 1) = 1
close(3) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xBFE40000
munmap(0xBFE40000, 4096) = 0
_exit(0)
#
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss