* Re: [PATCH] fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers
[not found] <1309370716-12235-1-git-send-email-josef@redhat.com>
@ 2011-07-23 18:09 ` Markus Trippelsdorf
2011-07-23 19:32 ` Markus Trippelsdorf
2011-07-23 20:26 ` Josef Bacik
0 siblings, 2 replies; 13+ messages in thread
From: Markus Trippelsdorf @ 2011-07-23 18:09 UTC (permalink / raw)
To: Josef Bacik; +Cc: jack, linux-kernel, xfs, hch, viro, linux-fsdevel
On 2011.06.29 at 14:05 -0400, Josef Bacik wrote:
> Btrfs needs to be able to control how filemap_write_and_wait_range() is called
> in fsync to make it less of a painful operation, so push down taking i_mutex and
> the calling of filemap_write_and_wait() down into the ->fsync() handlers. Some
> file systems can drop taking the i_mutex altogether it seems, like ext3 and
> ocfs2. For correctness sake I just pushed everything down in all cases to make
> sure that we keep the current behavior the same for everybody, and then each
> individual fs maintainer can make up their mind about what to do from there.
At least the xfs part of this patch is broken.
Running the latest git-kernel bogofilter doesn't work anymore on my xfs
partition. When I run "bogoutil -d wordlist.db" to dump the contents of
the database, it produces no output at all.
Reverting 02c24a82187d (or only the xfs part of that commit) "solves"
the problem.
Here is the output of "strace bogoutil -d wordlist.db":
execve("/usr/bin/bogoutil", ["bogoutil", "-d", "wordlist.db"], [/* 49 vars */]) = 0
brk(0) = 0xf0b000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92e44ba000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib64/tls/x86_64/libdb-5.1.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/tls/x86_64", 0x7ffff87444e0) = -1 ENOENT (No such file or directory)
open("/usr/lib64/tls/libdb-5.1.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/tls", 0x7ffff87444e0) = -1 ENOENT (No such file or directory)
open("/usr/lib64/x86_64/libdb-5.1.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/x86_64", 0x7ffff87444e0) = -1 ENOENT (No such file or directory)
open("/usr/lib64/libdb-5.1.so", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\226\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1568648, ...}) = 0
mmap(NULL, 3663952, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f92e413b000
mprotect(0x7f92e42b1000, 2097152, PROT_NONE) = 0
mmap(0x7f92e44b1000, 36864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x176000) = 0x7f92e44b1000
close(3) = 0
open("/usr/lib64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=123587, ...}) = 0
mmap(NULL, 123587, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f92e411c000
close(3) = 0
open("/lib64/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220P\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=10060928, ...}) = 0
mmap(NULL, 1469528, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f92e3fb5000
mprotect(0x7f92e4111000, 4096, PROT_NONE) = 0
mmap(0x7f92e4112000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15c000) = 0x7f92e4112000
mmap(0x7f92e4117000, 19544, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f92e4117000
close(3) = 0
open("/usr/lib64/libpthread.so.0", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib64/libpthread.so.0", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300c\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=778568, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92e3fb4000
mmap(NULL, 115588, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f92e3f97000
mmap(0x7f92e3fae000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7f92e3fae000
mmap(0x7f92e3fb0000, 13188, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f92e3fb0000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92e3f96000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92e3f95000
arch_prctl(ARCH_SET_FS, 0x7f92e3f96700) = 0
mprotect(0x7f92e3fae000, 4096, PROT_READ) = 0
mprotect(0x7f92e4112000, 16384, PROT_READ) = 0
mprotect(0x7f92e44b1000, 24576, PROT_READ) = 0
mprotect(0x7f92e44da000, 4096, PROT_READ) = 0
munmap(0x7f92e411c000, 123587) = 0
set_tid_address(0x7f92e3f969d0) = 7361
set_robust_list(0x7f92e3f969e0, 0x18) = 0
rt_sigaction(SIGRTMIN, {0x7f92e3f9cf30, [], SA_RESTORER|SA_SIGINFO, 0x7f92e3fa6410}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x7f92e3f9cfc0, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7f92e3fa6410}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
rt_sigaction(SIGINT, {0x406860, [], SA_RESTORER|SA_RESTART, 0x7f92e3fed710}, NULL, 8) = 0
rt_sigaction(SIGPIPE, {SIG_IGN, [], SA_RESTORER|SA_RESTART, 0x7f92e3fed710}, NULL, 8) = 0
rt_sigaction(SIGTERM, {0x406860, [], SA_RESTORER|SA_RESTART, 0x7f92e3fed710}, NULL, 8) = 0
brk(0) = 0xf0b000
brk(0xf2c000) = 0xf2c000
open("/etc/localtime", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92e413a000
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0\10\0\0\0\0"..., 4096) = 2309
lseek(3, -1467, SEEK_CUR) = 842
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\t\0\0\0\t\0\0\0\0"..., 4096) = 1467
lseek(3, 2308, SEEK_SET) = 2308
close(3) = 0
munmap(0x7f92e413a000, 4096) = 0
open("/etc/bogofilter.cf", O_RDONLY) = -1 ENOENT (No such file or directory)
geteuid() = 1000
socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
close(3) = 0
socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
close(3) = 0
open("/etc/nsswitch.conf", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=508, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92e413a000
read(3, "# /etc/nsswitch.conf:\n# $Header:"..., 4096) = 508
read(3, "", 4096) = 0
close(3) = 0
munmap(0x7f92e413a000, 4096) = 0
open("/usr/lib64/libnss_compat.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=123587, ...}) = 0
mmap(NULL, 123587, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f92e411c000
close(3) = 0
open("/lib64/libnss_compat.so.2", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=145792, ...}) = 0
mmap(NULL, 33912, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f92e3f8c000
mmap(0x7f92e3f93000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7f92e3f93000
close(3) = 0
open("/usr/lib64/libnsl.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib64/libnsl.so.1", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=612792, ...}) = 0
mmap(NULL, 100984, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f92e3f73000
mprotect(0x7f92e3f87000, 4096, PROT_NONE) = 0
mmap(0x7f92e3f88000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14000) = 0x7f92e3f88000
mmap(0x7f92e3f8a000, 6776, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f92e3f8a000
close(3) = 0
mprotect(0x7f92e3f88000, 4096, PROT_READ) = 0
mprotect(0x7f92e3f93000, 4096, PROT_READ) = 0
munmap(0x7f92e411c000, 123587) = 0
open("/usr/lib64/libnss_nis.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=123587, ...}) = 0
mmap(NULL, 123587, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f92e411c000
close(3) = 0
open("/lib64/libnss_nis.so.2", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=266616, ...}) = 0
mmap(NULL, 46260, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f92e3f67000
mmap(0x7f92e3f71000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x9000) = 0x7f92e3f71000
close(3) = 0
open("/usr/lib64/libnss_files.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib64/libnss_files.so.2", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=274896, ...}) = 0
mmap(NULL, 50568, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f92e3f5a000
mmap(0x7f92e3f65000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xa000) = 0x7f92e3f65000
close(3) = 0
mprotect(0x7f92e3f65000, 4096, PROT_READ) = 0
mprotect(0x7f92e3f71000, 4096, PROT_READ) = 0
munmap(0x7f92e411c000, 123587) = 0
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
lseek(3, 0, SEEK_CUR) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=1396, ...}) = 0
mmap(NULL, 1396, PROT_READ, MAP_SHARED, 3, 0) = 0x7f92e413a000
lseek(3, 1396, SEEK_SET) = 1396
lseek(3, 901, SEEK_SET) = 901
munmap(0x7f92e413a000, 1396) = 0
close(3) = 0
open("/home/markus/.bogofilter.cf", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=7432, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92e413a000
read(3, "########### Sample BOGOFILTER Co"..., 4096) = 4096
read(3, "\t\t the password database, or t"..., 4096) = 3336
read(3, "", 4096) = 0
close(3) = 0
munmap(0x7f92e413a000, 4096) = 0
stat("./wordlist.db", {st_mode=S_IFREG|0644, st_size=6635520, ...}) = 0
stat("./wordlist.db", {st_mode=S_IFREG|0644, st_size=6635520, ...}) = 0
open("./lockfile-p", O_RDWR|O_DSYNC) = 3
lseek(3, 0, SEEK_CUR) = 0
lseek(3, 0, SEEK_SET) = 0
lseek(3, 0, SEEK_CUR) = 0
read(3, "1", 1) = 1
fcntl(3, F_GETLK, {type=F_UNLCK, whence=SEEK_SET, start=0, len=1, pid=4225321}) = 0
lseek(3, 0, SEEK_SET) = 0
lseek(3, 0, SEEK_CUR) = 0
lseek(3, 0, SEEK_SET) = 0
lseek(3, 0, SEEK_CUR) = 0
read(3, "1", 1) = 1
fcntl(3, F_GETLK, {type=F_UNLCK, whence=SEEK_SET, start=0, len=1, pid=15785816}) = 0
lseek(3, 0, SEEK_SET) = 0
mkdir(".", 0775) = -1 EEXIST (File exists)
open("./lockfile-d", O_RDWR|O_CREAT|O_EXCL, 0664) = -1 EEXIST (File exists)
open("./lockfile-d", O_RDWR) = 4
fcntl(4, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
lseek(3, 0, SEEK_CUR) = 0
lseek(3, 0, SEEK_SET) = 0
lseek(3, 0, SEEK_CUR) = 0
read(3, "1", 1) = 1
fcntl(3, F_GETLK, {type=F_UNLCK, whence=SEEK_SET, start=0, len=1, pid=0}) = 0
lseek(3, 0, SEEK_SET) = 0
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 5
read(5, "0-3\n", 8192) = 4
close(5) = 0
open("./DB_CONFIG", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/var/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=12288, ...}) = 0
open("./__db.rep.init", O_RDONLY) = -1 ENOENT (No such file or directory)
open("./__db.001", O_RDWR) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
fstat(5, {st_mode=S_IFREG|0644, st_size=24576, ...}) = 0
close(5) = 0
open("./__db.001", O_RDWR) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
mmap(NULL, 24576, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f92e4135000
close(5) = 0
open("./__db.002", O_RDWR|O_CREAT, 0664) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
mmap(NULL, 188416, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f92e3f2c000
close(5) = 0
munmap(0x7f92e3f2c000, 188416) = 0
unlink("./__db.002") = 0
open("./__db.003", O_RDWR|O_CREAT, 0664) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
mmap(NULL, 5251072, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f92e3a58000
close(5) = 0
munmap(0x7f92e3a58000, 5251072) = 0
unlink("./__db.003") = 0
open("./__db.004", O_RDWR|O_CREAT, 0664) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
mmap(NULL, 163840, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f92e3f32000
close(5) = 0
munmap(0x7f92e3f32000, 163840) = 0
unlink("./__db.004") = 0
open("./__db.005", O_RDWR|O_CREAT, 0664) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
mmap(NULL, 49152, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f92e3f4e000
close(5) = 0
munmap(0x7f92e3f4e000, 49152) = 0
unlink("./__db.005") = 0
munmap(0x7f92e4135000, 24576) = 0
unlink("./__db.001") = 0
open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 5
getdents(5, /* 6 entries */, 32768) = 184
stat("./.", {st_mode=S_IFDIR|0755, st_size=79, ...}) = 0
stat("./..", {st_mode=S_IFDIR|0700, st_size=36864, ...}) = 0
stat("./lockfile-d", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
stat("./lockfile-p", {st_mode=S_IFREG|0644, st_size=1024, ...}) = 0
stat("./wordlist.db", {st_mode=S_IFREG|0644, st_size=6635520, ...}) = 0
stat("./log.0000000031", {st_mode=S_IFREG|0600, st_size=1048576, ...}) = 0
getdents(5, /* 0 entries */, 32768) = 0
close(5) = 0
open("./__db.001", O_RDWR|O_CREAT|O_EXCL, 0664) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
open("./__db.001", O_RDWR|O_CREAT, 0664) = 6
fcntl(6, F_GETFD) = 0
fcntl(6, F_SETFD, FD_CLOEXEC) = 0
lseek(6, 16384, SEEK_SET) = 16384
write(6, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) = 8192
mmap(NULL, 24576, PROT_READ|PROT_WRITE, MAP_SHARED, 6, 0) = 0x7f92e4135000
close(6) = 0
close(5) = 0
open("./__db.002", O_RDWR|O_CREAT, 0664) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
lseek(5, 180224, SEEK_SET) = 180224
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) = 8192
mmap(NULL, 188416, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f92e3f2c000
close(5) = 0
open("./__db.003", O_RDWR|O_CREAT, 0664) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
lseek(5, 5242880, SEEK_SET) = 5242880
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) = 8192
mmap(NULL, 5251072, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f92e3a2a000
close(5) = 0
open("./__db.004", O_RDWR|O_CREAT, 0664) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
lseek(5, 155648, SEEK_SET) = 155648
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) = 8192
mmap(NULL, 163840, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f92e3a02000
close(5) = 0
open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 5
getdents(5, /* 10 entries */, 32768) = 312
stat("./.", {st_mode=S_IFDIR|0755, st_size=139, ...}) = 0
stat("./..", {st_mode=S_IFDIR|0700, st_size=36864, ...}) = 0
stat("./lockfile-d", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
stat("./lockfile-p", {st_mode=S_IFREG|0644, st_size=1024, ...}) = 0
stat("./wordlist.db", {st_mode=S_IFREG|0644, st_size=6635520, ...}) = 0
stat("./log.0000000031", {st_mode=S_IFREG|0600, st_size=1048576, ...}) = 0
stat("./__db.001", {st_mode=S_IFREG|0644, st_size=24576, ...}) = 0
stat("./__db.002", {st_mode=S_IFREG|0644, st_size=188416, ...}) = 0
stat("./__db.003", {st_mode=S_IFREG|0644, st_size=5251072, ...}) = 0
stat("./__db.004", {st_mode=S_IFREG|0644, st_size=163840, ...}) = 0
getdents(5, /* 0 entries */, 32768) = 0
close(5) = 0
open("./log.0000000031", O_RDONLY) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
read(5, "\206\377\17\0\34\0\0\0\314`4\214\210\t\4\0\21\0\0\0\0\0\20\0\0\0\0\0", 28) = 28
close(5) = 0
open("./log.0000000031", O_RDONLY) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
fstat(5, {st_mode=S_IFREG|0600, st_size=1048576, ...}) = 0
pread(5, "\206\377\17\0\34\0\0\0\314`4\214", 12, 0) = 12
pread(5, "\206\377\17\0\34\0\0\0\314`4\214\210\t\4\0\21\0\0\0\0\0\20\0\0\0\0\0\0\0\0\0"..., 32000, 0) = 32000
pread(5, "\204|\0\0X\0\0\0\217\261Zs", 12, 31920) = 12
pread(5, "\204|\0\0X\0\0\0\217\261Zs\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0"..., 32000, 31920) = 32000
pread(5, "m\363\0\0\200\20\0\0f\243=\177", 12, 62385) = 12
pread(5, "m\363\0\0\200\20\0\0f\243=\177>\0\0\0R\20\0\200\37\0\0\0m\363\0\0\0\0\0\0"..., 32000, 62385) = 32000
pread(5, "]p\1\0J\0\0\0\260\253\2045", 12, 94379) = 12
pread(5, "]p\1\0J\0\0\0\260\253\2045)\0\0\0R\20\0\200\37\0\0\0]p\1\0\5\1\0\0"..., 32000, 94379) = 32000
pread(5, "\0\0\0\0\0\0\0\0\0\0\0\0", 12, 120809) = 12
close(5) = 0
open("./__db.005", O_RDWR|O_CREAT, 0664) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
lseek(5, 40960, SEEK_SET) = 40960
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) = 8192
mmap(NULL, 49152, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f92e39f6000
close(5) = 0
open("./log.0000000031", O_RDONLY) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
fstat(5, {st_mode=S_IFREG|0600, st_size=1048576, ...}) = 0
pread(5, "Y\327\1\0008\0\0\0\377*\23\233", 12, 120753) = 12
pread(5, "\0\0\0\0\0k\2702\1\0\21\0\1rcvd:209.236.66.8\f\0"..., 32000, 88809) = 32000
open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 6
getdents(6, /* 11 entries */, 32768) = 344
stat("./.", {st_mode=S_IFDIR|0755, st_size=154, ...}) = 0
stat("./..", {st_mode=S_IFDIR|0700, st_size=36864, ...}) = 0
stat("./lockfile-d", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
stat("./lockfile-p", {st_mode=S_IFREG|0644, st_size=1024, ...}) = 0
stat("./wordlist.db", {st_mode=S_IFREG|0644, st_size=6635520, ...}) = 0
stat("./log.0000000031", {st_mode=S_IFREG|0600, st_size=1048576, ...}) = 0
stat("./__db.001", {st_mode=S_IFREG|0644, st_size=24576, ...}) = 0
stat("./__db.002", {st_mode=S_IFREG|0644, st_size=188416, ...}) = 0
stat("./__db.003", {st_mode=S_IFREG|0644, st_size=5251072, ...}) = 0
stat("./__db.004", {st_mode=S_IFREG|0644, st_size=163840, ...}) = 0
stat("./__db.005", {st_mode=S_IFREG|0644, st_size=49152, ...}) = 0
getdents(6, /* 0 entries */, 32768) = 0
close(6) = 0
open("./log.0000000031", O_RDONLY) = 6
fcntl(6, F_GETFD) = 0
fcntl(6, F_SETFD, FD_CLOEXEC) = 0
read(6, "\206\377\17\0\34\0\0\0\314`4\214\210\t\4\0\21\0\0\0\0\0\20\0\0\0\0\0", 28) = 28
close(6) = 0
pread(5, "\206\377\17\0\34\0\0\0\314`4\214", 12, 0) = 12
pread(5, "\206\377\17\0\34\0\0\0\314`4\214\210\t\4\0\21\0\0\0\0\0\20\0\0\0\0\0\0\0\0\0"..., 32000, 0) = 32000
pread(5, "Y\327\1\0008\0\0\0\377*\23\233", 12, 120753) = 12
pread(5, "\0\0\0\0\0k\2702\1\0\21\0\1rcvd:209.236.66.8\f\0"..., 32000, 88809) = 32000
stat("./wordlist.db", {st_mode=S_IFREG|0644, st_size=6635520, ...}) = 0
stat("./wordlist.db", {st_mode=S_IFREG|0644, st_size=6635520, ...}) = 0
open("./wordlist.db", O_RDWR) = 6
fcntl(6, F_GETFD) = 0
fcntl(6, F_SETFD, FD_CLOEXEC) = 0
read(6, "\37\0\0\0yr\1\0\0\0\0\0b1\5\0\t\0\0\0\0\20\0\0\0\t\1\0\0\0\0\0"..., 512) = 512
close(6) = 0
stat("./wordlist.db", {st_mode=S_IFREG|0644, st_size=6635520, ...}) = 0
open("./wordlist.db", O_RDWR) = 6
fcntl(6, F_GETFD) = 0
fcntl(6, F_SETFD, FD_CLOEXEC) = 0
fstat(6, {st_mode=S_IFREG|0644, st_size=6635520, ...}) = 0
pread(6, "\37\0\0\0yr\1\0\0\0\0\0b1\5\0\t\0\0\0\0\20\0\0\0\t\1\0\0\0\0\0"..., 4096, 0) = 4096
close(6) = 0
close(5) = 0
open("./log.0000000031", O_RDONLY) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
fstat(5, {st_mode=S_IFREG|0600, st_size=1048576, ...}) = 0
pread(5, "Y\327\1\0008\0\0\0\377*\23\233", 12, 120753) = 12
pread(5, "\0\0\0\0\0k\2702\1\0\21\0\1rcvd:209.236.66.8\f\0"..., 32000, 88809) = 32000
close(5) = 0
open("./log.0000000032", O_RDONLY) = -1 ENOENT (No such file or directory)
open("./log.00032", O_RDONLY) = -1 ENOENT (No such file or directory)
open("./log.0000000031", O_RDWR) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
fstat(5, {st_mode=S_IFREG|0600, st_size=1048576, ...}) = 0
lseek(5, 120809, SEEK_SET) = 120809
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2071) = 2071
close(5) = 0
lseek(3, 0, SEEK_SET) = 0
write(3, "00000000000000000000000000000000"..., 1024) = 0
close(3) = 0
getcwd("/home/markus/.bogofilter", 1024) = 25
open("./log.0000000031", O_RDONLY) = 3
fcntl(3, F_GETFD) = 0
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
fstat(3, {st_mode=S_IFREG|0600, st_size=1048576, ...}) = 0
pread(3, "Y\327\1\0008\0\0\0\377*\23\233", 12, 120753) = 12
pread(3, "\0\0\0\0\0k\2702\1\0\21\0\1rcvd:209.236.66.8\f\0"..., 32000, 88809) = 32000
close(3) = 0
stat("./log.0000000030", 0x7ffff8744660) = -1 ENOENT (No such file or directory)
munmap(0x7f92e39f6000, 49152) = 0
munmap(0x7f92e3a02000, 163840) = 0
munmap(0x7f92e3a2a000, 5251072) = 0
munmap(0x7f92e3f2c000, 188416) = 0
munmap(0x7f92e4135000, 24576) = 0
alarm(0) = 0
rt_sigaction(SIGALRM, {SIG_DFL, [], SA_RESTORER, 0x7f92e3fed710}, NULL, 8) = 0
lseek(-1, 0, SEEK_SET) = -1 EBADF (Bad file descriptor)
close(4) = 0
open("./lockfile-p", O_RDWR|O_DSYNC) = 3
mkdir(".", 0775) = -1 EEXIST (File exists)
open("./lockfile-d", O_RDWR|O_CREAT|O_EXCL, 0664) = -1 EEXIST (File exists)
open("./lockfile-d", O_RDWR) = 4
fcntl(4, F_SETLKW, {type=F_RDLCK, whence=SEEK_SET, start=0, len=0}) = 0
lseek(3, 0, SEEK_SET) = 0
lseek(3, 0, SEEK_CUR) = 0
read(3, "0", 1) = 1
fcntl(3, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=1}) = 0
lseek(3, 0, SEEK_SET) = 0
read(3, "0", 1) = 1
lseek(3, 0, SEEK_SET) = 0
write(3, "1", 1) = 0
exit_group(3) = ?
--
Markus
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers
2011-07-23 18:09 ` [PATCH] fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers Markus Trippelsdorf
@ 2011-07-23 19:32 ` Markus Trippelsdorf
2011-07-23 20:26 ` Josef Bacik
1 sibling, 0 replies; 13+ messages in thread
From: Markus Trippelsdorf @ 2011-07-23 19:32 UTC (permalink / raw)
To: Josef Bacik; +Cc: jack, linux-kernel, xfs, hch, viro, linux-fsdevel
On 2011.07.23 at 20:09 +0200, Markus Trippelsdorf wrote:
> On 2011.06.29 at 14:05 -0400, Josef Bacik wrote:
> > Btrfs needs to be able to control how filemap_write_and_wait_range() is called
> > in fsync to make it less of a painful operation, so push down taking i_mutex and
> > the calling of filemap_write_and_wait() down into the ->fsync() handlers. Some
> > file systems can drop taking the i_mutex altogether it seems, like ext3 and
> > ocfs2. For correctness sake I just pushed everything down in all cases to make
> > sure that we keep the current behavior the same for everybody, and then each
> > individual fs maintainer can make up their mind about what to do from there.
>
> At least the xfs part of this patch is broken.
> Running the latest git-kernel bogofilter doesn't work anymore on my xfs
> partition. When I run "bogoutil -d wordlist.db" to dump the contents of
> the database, it produces no output at all.
>
> Reverting 02c24a82187d (or only the xfs part of that commit) "solves"
> the problem.
Looks like a locking problem (note the stale xfs_rw_ilock):
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c
index 7f782af..fbbf657 100644
--- a/fs/xfs/linux-2.6/xfs_file.c
+++ b/fs/xfs/linux-2.6/xfs_file.c
@@ -127,6 +127,8 @@ xfs_iozero(
STATIC int
xfs_file_fsync(
struct file *file,
+ loff_t start,
+ loff_t end,
int datasync)
{
struct inode *inode = file->f_mapping->host;
@@ -138,6 +140,10 @@ xfs_file_fsync(
trace_xfs_file_fsync(ip);
+ error = filemap_write_and_wait_range(inode->i_mapping, start, end);
+ if (error)
+ return error;
+
if (XFS_FORCED_SHUTDOWN(mp))
return -XFS_ERROR(EIO);
@@ -875,18 +881,11 @@ xfs_file_aio_write(
/* Handle various SYNC-type writes */
if ((file->f_flags & O_DSYNC) || IS_SYNC(inode)) {
loff_t end = pos + ret - 1;
- int error, error2;
xfs_rw_iunlock(ip, iolock);
- error = filemap_write_and_wait_range(mapping, pos, end);
+ ret = -xfs_file_fsync(file, pos, end,
+ (file->f_flags & __O_SYNC) ? 0 : 1);
xfs_rw_ilock(ip, iolock);
-
- error2 = -xfs_file_fsync(file,
- (file->f_flags & __O_SYNC) ? 0 : 1);
- if (error)
- ret = error;
- else if (error2)
- ret = error2;
}
out_unlock:
--
Markus
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers
2011-07-23 18:09 ` [PATCH] fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers Markus Trippelsdorf
2011-07-23 19:32 ` Markus Trippelsdorf
@ 2011-07-23 20:26 ` Josef Bacik
2011-07-23 20:38 ` Markus Trippelsdorf
1 sibling, 1 reply; 13+ messages in thread
From: Josef Bacik @ 2011-07-23 20:26 UTC (permalink / raw)
To: Markus Trippelsdorf; +Cc: jack, linux-kernel, xfs, hch, viro, linux-fsdevel
On 07/23/2011 02:09 PM, Markus Trippelsdorf wrote:
> On 2011.06.29 at 14:05 -0400, Josef Bacik wrote:
>> Btrfs needs to be able to control how filemap_write_and_wait_range() is called
>> in fsync to make it less of a painful operation, so push down taking i_mutex and
>> the calling of filemap_write_and_wait() down into the ->fsync() handlers. Some
>> file systems can drop taking the i_mutex altogether it seems, like ext3 and
>> ocfs2. For correctness sake I just pushed everything down in all cases to make
>> sure that we keep the current behavior the same for everybody, and then each
>> individual fs maintainer can make up their mind about what to do from there.
>
> At least the xfs part of this patch is broken.
> Running the latest git-kernel bogofilter doesn't work anymore on my xfs
> partition. When I run "bogoutil -d wordlist.db" to dump the contents of
> the database, it produces no output at all.
>
Already fixed and sent a patch out earlier this week. Thanks,
Josef
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers
2011-07-23 20:26 ` Josef Bacik
@ 2011-07-23 20:38 ` Markus Trippelsdorf
2011-07-23 22:02 ` Markus Trippelsdorf
0 siblings, 1 reply; 13+ messages in thread
From: Markus Trippelsdorf @ 2011-07-23 20:38 UTC (permalink / raw)
To: Josef Bacik; +Cc: jack, linux-kernel, xfs, hch, viro, linux-fsdevel
On 2011.07.23 at 16:26 -0400, Josef Bacik wrote:
> On 07/23/2011 02:09 PM, Markus Trippelsdorf wrote:
> > On 2011.06.29 at 14:05 -0400, Josef Bacik wrote:
> >> Btrfs needs to be able to control how filemap_write_and_wait_range() is called
> >> in fsync to make it less of a painful operation, so push down taking i_mutex and
> >> the calling of filemap_write_and_wait() down into the ->fsync() handlers. Some
> >> file systems can drop taking the i_mutex altogether it seems, like ext3 and
> >> ocfs2. For correctness sake I just pushed everything down in all cases to make
> >> sure that we keep the current behavior the same for everybody, and then each
> >> individual fs maintainer can make up their mind about what to do from there.
> >
> > At least the xfs part of this patch is broken.
> > Running the latest git-kernel bogofilter doesn't work anymore on my xfs
> > partition. When I run "bogoutil -d wordlist.db" to dump the contents of
> > the database, it produces no output at all.
> >
>
> Already fixed and sent a patch out earlier this week. Thanks,
No. This happens with your patch already applied. See my other reply.
--
Markus
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers
2011-07-23 20:38 ` Markus Trippelsdorf
@ 2011-07-23 22:02 ` Markus Trippelsdorf
2011-07-24 11:16 ` Christoph Hellwig
0 siblings, 1 reply; 13+ messages in thread
From: Markus Trippelsdorf @ 2011-07-23 22:02 UTC (permalink / raw)
To: Josef Bacik; +Cc: jack, linux-kernel, xfs, hch, viro, linux-fsdevel
On 2011.07.23 at 22:38 +0200, Markus Trippelsdorf wrote:
> On 2011.07.23 at 16:26 -0400, Josef Bacik wrote:
> > On 07/23/2011 02:09 PM, Markus Trippelsdorf wrote:
> > > On 2011.06.29 at 14:05 -0400, Josef Bacik wrote:
> > >> Btrfs needs to be able to control how filemap_write_and_wait_range() is called
> > >> in fsync to make it less of a painful operation, so push down taking i_mutex and
> > >> the calling of filemap_write_and_wait() down into the ->fsync() handlers. Some
> > >> file systems can drop taking the i_mutex altogether it seems, like ext3 and
> > >> ocfs2. For correctness sake I just pushed everything down in all cases to make
> > >> sure that we keep the current behavior the same for everybody, and then each
> > >> individual fs maintainer can make up their mind about what to do from there.
> > >
> > > At least the xfs part of this patch is broken.
> > > Running the latest git-kernel bogofilter doesn't work anymore on my xfs
> > > partition. When I run "bogoutil -d wordlist.db" to dump the contents of
> > > the database, it produces no output at all.
> > >
> >
> > Already fixed and sent a patch out earlier this week. Thanks,
>
> No. This happens with your patch already applied. See my other reply.
The following patch fixes the problem for me:
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c
index cca00f4..2e23e3d 100644
--- a/fs/xfs/linux-2.6/xfs_file.c
+++ b/fs/xfs/linux-2.6/xfs_file.c
@@ -881,11 +881,14 @@ xfs_file_aio_write(
/* Handle various SYNC-type writes */
if ((file->f_flags & O_DSYNC) || IS_SYNC(inode)) {
loff_t end = pos + ret - 1;
+ int error;
xfs_rw_iunlock(ip, iolock);
- ret = -xfs_file_fsync(file, pos, end,
+ error = -xfs_file_fsync(file, pos, end,
(file->f_flags & __O_SYNC) ? 0 : 1);
xfs_rw_ilock(ip, iolock);
+ if (error)
+ ret = error;
}
out_unlock:
--
Markus
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers
2011-07-23 22:02 ` Markus Trippelsdorf
@ 2011-07-24 11:16 ` Christoph Hellwig
2011-07-24 11:42 ` Christoph Hellwig
2011-07-24 11:54 ` [PATCH] xfs: Fix wrong return value of xfs_file_aio_write Markus Trippelsdorf
0 siblings, 2 replies; 13+ messages in thread
From: Christoph Hellwig @ 2011-07-24 11:16 UTC (permalink / raw)
To: Markus Trippelsdorf
Cc: jack, linux-kernel, xfs, hch, viro, linux-fsdevel, Josef Bacik
On Sun, Jul 24, 2011 at 12:02:12AM +0200, Markus Trippelsdorf wrote:
> The following patch fixes the problem for me:
Good catch, can you send it with a proper signoff and description?
>
> diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c
> index cca00f4..2e23e3d 100644
> --- a/fs/xfs/linux-2.6/xfs_file.c
> +++ b/fs/xfs/linux-2.6/xfs_file.c
> @@ -881,11 +881,14 @@ xfs_file_aio_write(
> /* Handle various SYNC-type writes */
> if ((file->f_flags & O_DSYNC) || IS_SYNC(inode)) {
> loff_t end = pos + ret - 1;
> + int error;
>
> xfs_rw_iunlock(ip, iolock);
> - ret = -xfs_file_fsync(file, pos, end,
> + error = -xfs_file_fsync(file, pos, end,
> (file->f_flags & __O_SYNC) ? 0 : 1);
In addition xfs_file_fsync actually returns a normal negative error,
but that bug already existed before the fsync prototype change. If you
resend the patch, can you fix it as well?
> xfs_rw_ilock(ip, iolock);
> + if (error)
> + ret = error;
> }
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers
2011-07-24 11:16 ` Christoph Hellwig
@ 2011-07-24 11:42 ` Christoph Hellwig
2011-07-24 11:54 ` [PATCH] xfs: Fix wrong return value of xfs_file_aio_write Markus Trippelsdorf
1 sibling, 0 replies; 13+ messages in thread
From: Christoph Hellwig @ 2011-07-24 11:42 UTC (permalink / raw)
To: Markus Trippelsdorf
Cc: jack, linux-kernel, xfs, hch, viro, linux-fsdevel, Josef Bacik
On Sun, Jul 24, 2011 at 07:16:26AM -0400, Christoph Hellwig wrote:
> On Sun, Jul 24, 2011 at 12:02:12AM +0200, Markus Trippelsdorf wrote:
> > The following patch fixes the problem for me:
>
> Good catch, can you send it with a proper signoff and description?
This also fixes the xfstests 130 regression that popped up in latest
Linus HEAD. Good to know we have some QA coverage for O_SYNC writes,
althoug I wish it would be more than just one testcase..
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH] xfs: Fix wrong return value of xfs_file_aio_write
2011-07-24 11:16 ` Christoph Hellwig
2011-07-24 11:42 ` Christoph Hellwig
@ 2011-07-24 11:54 ` Markus Trippelsdorf
2011-07-24 11:57 ` Christoph Hellwig
2011-07-24 11:58 ` [PATCH v2] " Markus Trippelsdorf
1 sibling, 2 replies; 13+ messages in thread
From: Markus Trippelsdorf @ 2011-07-24 11:54 UTC (permalink / raw)
To: Christoph Hellwig
Cc: jack, linux-kernel, xfs, viro, linux-fsdevel, Josef Bacik
On 2011.07.24 at 07:16 -0400, Christoph Hellwig wrote:
> On Sun, Jul 24, 2011 at 12:02:12AM +0200, Markus Trippelsdorf wrote:
> > The following patch fixes the problem for me:
>
> Good catch, can you send it with a proper signoff and description?
The fsync prototype change commit 02c24a82187d accidentally overwrote
the ssize_t return value of xfs_file_aio_write with 0 for SYNC type
writes. Fix this by checking if an error occured when calling
xfs_file_fsync and only change the return value in this case.
In addition xfs_file_fsync actually returns a normal negative error, so
fix this, too.
---
fs/xfs/linux-2.6/xfs_file.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c
index cca00f4..825390e 100644
--- a/fs/xfs/linux-2.6/xfs_file.c
+++ b/fs/xfs/linux-2.6/xfs_file.c
@@ -881,11 +881,14 @@ xfs_file_aio_write(
/* Handle various SYNC-type writes */
if ((file->f_flags & O_DSYNC) || IS_SYNC(inode)) {
loff_t end = pos + ret - 1;
+ int error;
xfs_rw_iunlock(ip, iolock);
- ret = -xfs_file_fsync(file, pos, end,
+ error = xfs_file_fsync(file, pos, end,
(file->f_flags & __O_SYNC) ? 0 : 1);
xfs_rw_ilock(ip, iolock);
+ if (error)
+ ret = error;
}
out_unlock:
--
Markus
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] xfs: Fix wrong return value of xfs_file_aio_write
2011-07-24 11:54 ` [PATCH] xfs: Fix wrong return value of xfs_file_aio_write Markus Trippelsdorf
@ 2011-07-24 11:57 ` Christoph Hellwig
2011-07-24 11:58 ` [PATCH v2] " Markus Trippelsdorf
1 sibling, 0 replies; 13+ messages in thread
From: Christoph Hellwig @ 2011-07-24 11:57 UTC (permalink / raw)
To: Markus Trippelsdorf
Cc: jack, linux-kernel, xfs, Christoph Hellwig, viro, linux-fsdevel,
Josef Bacik
On Sun, Jul 24, 2011 at 01:54:20PM +0200, Markus Trippelsdorf wrote:
> On 2011.07.24 at 07:16 -0400, Christoph Hellwig wrote:
> > On Sun, Jul 24, 2011 at 12:02:12AM +0200, Markus Trippelsdorf wrote:
> > > The following patch fixes the problem for me:
> >
> > Good catch, can you send it with a proper signoff and description?
>
> The fsync prototype change commit 02c24a82187d accidentally overwrote
> the ssize_t return value of xfs_file_aio_write with 0 for SYNC type
> writes. Fix this by checking if an error occured when calling
> xfs_file_fsync and only change the return value in this case.
> In addition xfs_file_fsync actually returns a normal negative error, so
> fix this, too.
> ---
> fs/xfs/linux-2.6/xfs_file.c | 5 ++++-
> 1 files changed, 4 insertions(+), 1 deletions(-)
The Signed-off-by: line is still missing, and you normally shouldn't
quote the previous mail you reply to for patches. Sorry for beeing
nit-picky, but see this as a training exercise :)
You can also add:
Reviewed-by: Christoph Hellwig <hch@lst.de>
Tested-by: Christoph Hellwig <hch@lst.de>
as I've run this through xfsqa (strictly speaking it's still running,
but it looks good so far)
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] xfs: Fix wrong return value of xfs_file_aio_write
2011-07-24 11:54 ` [PATCH] xfs: Fix wrong return value of xfs_file_aio_write Markus Trippelsdorf
2011-07-24 11:57 ` Christoph Hellwig
@ 2011-07-24 11:58 ` Markus Trippelsdorf
2011-07-24 12:03 ` [PATCH] " Markus Trippelsdorf
1 sibling, 1 reply; 13+ messages in thread
From: Markus Trippelsdorf @ 2011-07-24 11:58 UTC (permalink / raw)
To: Christoph Hellwig
Cc: jack, linux-kernel, xfs, viro, linux-fsdevel, Josef Bacik
(This time with with a proper signoff.)
The fsync prototype change commit 02c24a82187d accidentally overwrote
the ssize_t return value of xfs_file_aio_write with 0 for SYNC type
writes. Fix this by checking if an error occured when calling
xfs_file_fsync and only change the return value in this case.
In addition xfs_file_fsync actually returns a normal negative error, so
fix this, too.
Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
---
fs/xfs/linux-2.6/xfs_file.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c
index cca00f4..825390e 100644
--- a/fs/xfs/linux-2.6/xfs_file.c
+++ b/fs/xfs/linux-2.6/xfs_file.c
@@ -881,11 +881,14 @@ xfs_file_aio_write(
/* Handle various SYNC-type writes */
if ((file->f_flags & O_DSYNC) || IS_SYNC(inode)) {
loff_t end = pos + ret - 1;
+ int error;
xfs_rw_iunlock(ip, iolock);
- ret = -xfs_file_fsync(file, pos, end,
+ error = xfs_file_fsync(file, pos, end,
(file->f_flags & __O_SYNC) ? 0 : 1);
xfs_rw_ilock(ip, iolock);
+ if (error)
+ ret = error;
}
out_unlock:
--
Markus
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH] xfs: Fix wrong return value of xfs_file_aio_write
2011-07-24 11:58 ` [PATCH v2] " Markus Trippelsdorf
@ 2011-07-24 12:03 ` Markus Trippelsdorf
2011-07-24 12:11 ` Christoph Hellwig
2011-07-26 15:21 ` Alex Elder
0 siblings, 2 replies; 13+ messages in thread
From: Markus Trippelsdorf @ 2011-07-24 12:03 UTC (permalink / raw)
To: Christoph Hellwig
Cc: jack, linux-kernel, xfs, viro, linux-fsdevel, Josef Bacik
The fsync prototype change commit 02c24a82187d accidentally overwrote
the ssize_t return value of xfs_file_aio_write with 0 for SYNC type
writes. Fix this by checking if an error occured when calling
xfs_file_fsync and only change the return value in this case.
In addition xfs_file_fsync actually returns a normal negative error, so
fix this, too.
Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Tested-by: Christoph Hellwig <hch@lst.de>
---
fs/xfs/linux-2.6/xfs_file.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c
index cca00f4..825390e 100644
--- a/fs/xfs/linux-2.6/xfs_file.c
+++ b/fs/xfs/linux-2.6/xfs_file.c
@@ -881,11 +881,14 @@ xfs_file_aio_write(
/* Handle various SYNC-type writes */
if ((file->f_flags & O_DSYNC) || IS_SYNC(inode)) {
loff_t end = pos + ret - 1;
+ int error;
xfs_rw_iunlock(ip, iolock);
- ret = -xfs_file_fsync(file, pos, end,
+ error = xfs_file_fsync(file, pos, end,
(file->f_flags & __O_SYNC) ? 0 : 1);
xfs_rw_ilock(ip, iolock);
+ if (error)
+ ret = error;
}
out_unlock:
--
Markus
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] xfs: Fix wrong return value of xfs_file_aio_write
2011-07-24 12:03 ` [PATCH] " Markus Trippelsdorf
@ 2011-07-24 12:11 ` Christoph Hellwig
2011-07-26 15:21 ` Alex Elder
1 sibling, 0 replies; 13+ messages in thread
From: Christoph Hellwig @ 2011-07-24 12:11 UTC (permalink / raw)
To: Markus Trippelsdorf
Cc: jack, linux-kernel, xfs, Christoph Hellwig, viro, linux-fsdevel,
Josef Bacik
Looks perfect, thanks a lot !
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] xfs: Fix wrong return value of xfs_file_aio_write
2011-07-24 12:03 ` [PATCH] " Markus Trippelsdorf
2011-07-24 12:11 ` Christoph Hellwig
@ 2011-07-26 15:21 ` Alex Elder
1 sibling, 0 replies; 13+ messages in thread
From: Alex Elder @ 2011-07-26 15:21 UTC (permalink / raw)
To: Markus Trippelsdorf
Cc: jack, linux-kernel, xfs, Christoph Hellwig, viro, linux-fsdevel,
Josef Bacik
On Sun, 2011-07-24 at 14:03 +0200, Markus Trippelsdorf wrote:
> The fsync prototype change commit 02c24a82187d accidentally overwrote
> the ssize_t return value of xfs_file_aio_write with 0 for SYNC type
> writes. Fix this by checking if an error occured when calling
> xfs_file_fsync and only change the return value in this case.
> In addition xfs_file_fsync actually returns a normal negative error, so
> fix this, too.
>
> Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> Tested-by: Christoph Hellwig <hch@lst.de>
Finally looking at this I noticed the same thing Christoph
did; thanks for fixing both. Your change got committed
yesterday via Al Viro's VFS tree.
-Alex
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2011-07-26 15:21 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1309370716-12235-1-git-send-email-josef@redhat.com>
2011-07-23 18:09 ` [PATCH] fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers Markus Trippelsdorf
2011-07-23 19:32 ` Markus Trippelsdorf
2011-07-23 20:26 ` Josef Bacik
2011-07-23 20:38 ` Markus Trippelsdorf
2011-07-23 22:02 ` Markus Trippelsdorf
2011-07-24 11:16 ` Christoph Hellwig
2011-07-24 11:42 ` Christoph Hellwig
2011-07-24 11:54 ` [PATCH] xfs: Fix wrong return value of xfs_file_aio_write Markus Trippelsdorf
2011-07-24 11:57 ` Christoph Hellwig
2011-07-24 11:58 ` [PATCH v2] " Markus Trippelsdorf
2011-07-24 12:03 ` [PATCH] " Markus Trippelsdorf
2011-07-24 12:11 ` Christoph Hellwig
2011-07-26 15:21 ` Alex Elder
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox