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

Reply via email to