* btrfs_direct_IO oops @ 2016-10-08 18:08 Dave Jones 2016-10-08 18:29 ` Al Viro 0 siblings, 1 reply; 8+ messages in thread From: Dave Jones @ 2016-10-08 18:08 UTC (permalink / raw) To: Chris Mason; +Cc: Josef Bacik, David Sterba, linux-btrfs, Linux Kernel Found this in logs this morning. First time I've seen this one. Might be related to some direct IO related changes I made in Trinity that is tickling some new path. Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC CPU: 2 PID: 25313 Comm: trinity-c18 Not tainted 4.8.0-think+ #7 task: ffff88040f7b1c00 task.stack: ffffc9000076c000 RIP: 0010:[<ffffffffc0289d5c>] [<ffffffffc0289d5c>] btrfs_direct_IO+0x13c/0x480 [btrfs] RSP: 0018:ffffc9000076fb40 EFLAGS: 00010202 RAX: 0000000000002580 RBX: 0000000000000258 RCX: 0000000000000018 RDX: 0000000000000000 RSI: ffff8804f4d16868 RDI: ffffc9000076fc40 RBP: ffffc9000076fbd8 R08: 0000000000000001 R09: 0000000000000000 R10: 0000000000000001 R11: 0000000000000006 R12: ffff880300000000 R13: ffff8803643e1a88 R14: 0000000000000001 R15: 0000000000000258 FS: 00007efc0af88b40(0000) GS:ffff880507c00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: ffff8803643e4008 CR3: 00000003ad69e000 CR4: 00000000001406e0 DR0: 0000006f00200000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600 Stack: ffff88050174dda0 ffffc9000076fb60 ffff8804ffaab3f8 ffffc9000076fcd8 0000000000000000 0000000000000001 00000001c93b8050 ffff8804f4d16868 ffffc9000076fc40 0000000000000000 0000000000000000 0000000000000000 Call Trace: [<ffffffff89195d9d>] generic_file_read_iter+0x33d/0xce0 [<ffffffff8920be97>] ? ___slab_alloc.constprop.86+0x277/0x5c0 [<ffffffff89275edd>] generic_file_splice_read+0xfd/0x230 [<ffffffff89275de0>] ? pipe_to_user+0x40/0x40 [<ffffffff892758f8>] do_splice_to+0x98/0xd0 [<ffffffff89275a04>] splice_direct_to_actor+0xd4/0x2c0 [<ffffffff89275050>] ? generic_pipe_buf_nosteal+0x10/0x10 [<ffffffff89275cb5>] do_splice_direct+0xc5/0x110 [<ffffffff89237c52>] do_sendfile+0x242/0x470 [<ffffffff89238d2d>] SyS_sendfile64+0x7d/0xf0 [<ffffffff8900279f>] do_syscall_64+0x7f/0x200 [<ffffffff899ddbcb>] entry_SYSCALL64_slow_path+0x25/0x25 Code: 4d 8b 74 1d 00 4d 3b 74 1d 10 74 26 44 89 fb e8 3b de eb c8 83 c3 01 4c 63 fb 4d 39 e7 73 a5 e8 2b de eb c8 4c 89 f8 48 c1 e0 04 <4d> 3b 74 05 00 75 dd 31 db e8 16 de eb c8 48 89 d8 48 8b 7d d0 RIP [<ffffffffc0289d5c>] btrfs_direct_IO+0x13c/0x480 [btrfs] RSP <ffffc9000076fb40> CR2: ffff8803643e4008 That code: matches this dissembly: for (i = seg + 1; i < iter->nr_segs; i++) { 41d40: e8 00 00 00 00 callq 41d45 <btrfs_direct_IO+0x125> 41d45: 83 c3 01 add $0x1,%ebx 41d48: 4c 63 fb movslq %ebx,%r15 41d4b: 4d 39 e7 cmp %r12,%r15 41d4e: 73 a5 jae 41cf5 <btrfs_direct_IO+0xd5> if (iter->iov[seg].iov_base == iter->iov[i].iov_base) 41d50: e8 00 00 00 00 callq 41d55 <btrfs_direct_IO+0x135> 41d55: 4c 89 f8 mov %r15,%rax 41d58: 48 c1 e0 04 shl $0x4,%rax 41d5c: 4d 3b 74 05 00 cmp 0x0(%r13,%rax,1),%r14 41d61: 75 dd jne 41d40 <btrfs_direct_IO+0x120> return 0; ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: btrfs_direct_IO oops 2016-10-08 18:08 btrfs_direct_IO oops Dave Jones @ 2016-10-08 18:29 ` Al Viro 2016-10-08 23:20 ` Dave Jones 0 siblings, 1 reply; 8+ messages in thread From: Al Viro @ 2016-10-08 18:29 UTC (permalink / raw) To: Dave Jones, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Linux Kernel On Sat, Oct 08, 2016 at 02:08:06PM -0400, Dave Jones wrote: > That code: matches this dissembly: > > for (i = seg + 1; i < iter->nr_segs; i++) { *whoa* OK, that loop in check_direct_IO() should be done *ONLY* for iovec iter - even for a bvec one it's completely bogus, and for pipe ones it blows up immediately. Sorry, I'd missed that bogosity - replace if (iov_iter_rw(iter) == WRITE) return 0; with if (iov_iter_rw(iter) != READ || !iter_is_iovec(iter)) return 0; in there; that should fix the damn thing. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: btrfs_direct_IO oops 2016-10-08 18:29 ` Al Viro @ 2016-10-08 23:20 ` Dave Jones 2016-10-09 15:11 ` Dave Jones 0 siblings, 1 reply; 8+ messages in thread From: Dave Jones @ 2016-10-08 23:20 UTC (permalink / raw) To: Al Viro; +Cc: Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Linux Kernel On Sat, Oct 08, 2016 at 07:29:03PM +0100, Al Viro wrote: > On Sat, Oct 08, 2016 at 02:08:06PM -0400, Dave Jones wrote: > > That code: matches this dissembly: > > > > for (i = seg + 1; i < iter->nr_segs; i++) { > > *whoa* > > OK, that loop in check_direct_IO() should be done *ONLY* for > iovec iter - even for a bvec one it's completely bogus, and > for pipe ones it blows up immediately. > > Sorry, I'd missed that bogosity - replace > if (iov_iter_rw(iter) == WRITE) > return 0; > with > if (iov_iter_rw(iter) != READ || !iter_is_iovec(iter)) > return 0; > in there; that should fix the damn thing. Yep, seems to do the trick. Have been running the last six hours without seeing it or anything similar since. Dave ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: btrfs_direct_IO oops 2016-10-08 23:20 ` Dave Jones @ 2016-10-09 15:11 ` Dave Jones 2016-10-10 3:43 ` Al Viro 0 siblings, 1 reply; 8+ messages in thread From: Dave Jones @ 2016-10-09 15:11 UTC (permalink / raw) To: Al Viro, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Linux Kernel On Sat, Oct 08, 2016 at 07:20:08PM -0400, Dave Jones wrote: > On Sat, Oct 08, 2016 at 07:29:03PM +0100, Al Viro wrote: > > On Sat, Oct 08, 2016 at 02:08:06PM -0400, Dave Jones wrote: > > > That code: matches this dissembly: > > > > > > for (i = seg + 1; i < iter->nr_segs; i++) { > > > > *whoa* > > > > OK, that loop in check_direct_IO() should be done *ONLY* for > > iovec iter - even for a bvec one it's completely bogus, and > > for pipe ones it blows up immediately. > > > > Sorry, I'd missed that bogosity - replace > > if (iov_iter_rw(iter) == WRITE) > > return 0; > > with > > if (iov_iter_rw(iter) != READ || !iter_is_iovec(iter)) > > return 0; > > in there; that should fix the damn thing. > > Yep, seems to do the trick. Have been running the last six hours > without seeing it or anything similar since. Overnight, I did hit another iov related warning.. idx = 0, offset = 0 curbuf = 0, nrbufs = 1, buffers = 16 [ffffffff9fa21100 ffffea00065f6d80 0 4096] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] WARNING: CPU: 0 PID: 29610 at lib/iov_iter.c:327 sanity+0x102/0x150 CPU: 0 PID: 29610 Comm: trinity-c9 Not tainted 4.8.0-think+ #8 ffffc900007b7ae8 ffffffff9f3e2011 0000000000000000 0000000000000000 ffffffff9fc1e22b ffffffff9f3fa2f2 ffffc900007b7b28 ffffffff9f08b010 0000014734c3d60f ffffffff9fc1e22b 0000000000000147 0000000000000010 Call Trace: [<ffffffff9f3e2011>] dump_stack+0x6c/0x9b [<ffffffff9f3fa2f2>] ? sanity+0x102/0x150 [<ffffffff9f08b010>] __warn+0x110/0x130 [<ffffffff9f08b19c>] warn_slowpath_null+0x2c/0x40 [<ffffffff9f3fa2f2>] sanity+0x102/0x150 [<ffffffff9f3fe62e>] copy_page_to_iter+0x2be/0x480 [<ffffffff9f1932da>] ? pagecache_get_page+0xba/0x4f0 [<ffffffff9f195b85>] generic_file_read_iter+0x245/0xd30 [<ffffffff9f2764ed>] generic_file_splice_read+0xfd/0x230 [<ffffffff9f2763f0>] ? pipe_to_user+0x40/0x40 [<ffffffff9f275f08>] do_splice_to+0x98/0xd0 [<ffffffff9f276014>] splice_direct_to_actor+0xd4/0x2c0 [<ffffffff9f275660>] ? generic_pipe_buf_nosteal+0x10/0x10 [<ffffffff9f2762c5>] do_splice_direct+0xc5/0x110 [<ffffffff9f2381c2>] do_sendfile+0x242/0x470 [<ffffffff9f23929d>] SyS_sendfile64+0x7d/0xf0 [<ffffffff9f00279f>] do_syscall_64+0x7f/0x200 [<ffffffff9f9de5cb>] entry_SYSCALL64_slow_path+0x25/0x25 ---[ end trace 2c7bd411d4aa0491 ]--- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: btrfs_direct_IO oops 2016-10-09 15:11 ` Dave Jones @ 2016-10-10 3:43 ` Al Viro 2016-10-10 13:11 ` Dave Jones 0 siblings, 1 reply; 8+ messages in thread From: Al Viro @ 2016-10-10 3:43 UTC (permalink / raw) To: Dave Jones, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Linux Kernel On Sun, Oct 09, 2016 at 11:11:06AM -0400, Dave Jones wrote: > idx = 0, offset = 0 == starts at slot 0, nothing put into it yet, but > curbuf = 0, nrbufs = 1, buffers = 16 > [ffffffff9fa21100 ffffea00065f6d80 0 4096] the underlying pipe has something stored into slot 0. That definitely should not happen. > WARNING: CPU: 0 PID: 29610 at lib/iov_iter.c:327 sanity+0x102/0x150 > CPU: 0 PID: 29610 Comm: trinity-c9 Not tainted 4.8.0-think+ #8 > ffffc900007b7ae8 > ffffffff9f3e2011 > 0000000000000000 > 0000000000000000 > ffffffff9fc1e22b > ffffffff9f3fa2f2 > ffffc900007b7b28 > ffffffff9f08b010 > > 0000014734c3d60f > ffffffff9fc1e22b > 0000000000000147 > 0000000000000010 *blink* where have those come from? > Call Trace: > [<ffffffff9f3e2011>] dump_stack+0x6c/0x9b > [<ffffffff9f3fa2f2>] ? sanity+0x102/0x150 > [<ffffffff9f08b010>] __warn+0x110/0x130 > [<ffffffff9f08b19c>] warn_slowpath_null+0x2c/0x40 > [<ffffffff9f3fa2f2>] sanity+0x102/0x150 > [<ffffffff9f3fe62e>] copy_page_to_iter+0x2be/0x480 > [<ffffffff9f1932da>] ? pagecache_get_page+0xba/0x4f0 > [<ffffffff9f195b85>] generic_file_read_iter+0x245/0xd30 > [<ffffffff9f2764ed>] generic_file_splice_read+0xfd/0x230 > [<ffffffff9f2763f0>] ? pipe_to_user+0x40/0x40 > [<ffffffff9f275f08>] do_splice_to+0x98/0xd0 > [<ffffffff9f276014>] splice_direct_to_actor+0xd4/0x2c0 > [<ffffffff9f275660>] ? generic_pipe_buf_nosteal+0x10/0x10 > [<ffffffff9f2762c5>] do_splice_direct+0xc5/0x110 > [<ffffffff9f2381c2>] do_sendfile+0x242/0x470 > [<ffffffff9f23929d>] SyS_sendfile64+0x7d/0xf0 > [<ffffffff9f00279f>] do_syscall_64+0x7f/0x200 > [<ffffffff9f9de5cb>] entry_SYSCALL64_slow_path+0x25/0x25 > ---[ end trace 2c7bd411d4aa0491 ]--- Very interesting. Could you slap something like diff --git a/lib/iov_iter.c b/lib/iov_iter.c index 0ce3411..1ef00e7 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -682,8 +682,9 @@ static void pipe_advance(struct iov_iter *i, size_t size) { struct pipe_inode_info *pipe = i->pipe; struct pipe_buffer *buf; - int idx = i->idx; - size_t off = i->iov_offset; + int old_idx = idx = i->idx; + size_t old_off = off = i->iov_offset; + size_t old_size = size; if (unlikely(i->count < size)) size = i->count; @@ -713,6 +714,9 @@ static void pipe_advance(struct iov_iter *i, size_t size) pipe->nrbufs--; } } + if (!sanity(i)) + printk(KERN_ERR "buggered pipe_advance(%zd) [%d,%zd]", + old_size, old_idx, old_off); } void iov_iter_advance(struct iov_iter *i, size_t size) in there and try to reproduce that one? ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: btrfs_direct_IO oops 2016-10-10 3:43 ` Al Viro @ 2016-10-10 13:11 ` Dave Jones 2016-10-10 15:55 ` Al Viro 0 siblings, 1 reply; 8+ messages in thread From: Dave Jones @ 2016-10-10 13:11 UTC (permalink / raw) To: Al Viro; +Cc: Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Linux Kernel On Mon, Oct 10, 2016 at 04:43:57AM +0100, Al Viro wrote: > Very interesting. Could you slap something like > diff --git a/lib/iov_iter.c b/lib/iov_iter.c > index 0ce3411..1ef00e7 100644 > --- a/lib/iov_iter.c > +++ b/lib/iov_iter.c > @@ -682,8 +682,9 @@ static void pipe_advance(struct iov_iter *i, size_t size) > { > struct pipe_inode_info *pipe = i->pipe; > struct pipe_buffer *buf; > - int idx = i->idx; > - size_t off = i->iov_offset; > + int old_idx = idx = i->idx; > + size_t old_off = off = i->iov_offset; > + size_t old_size = size; > > if (unlikely(i->count < size)) > size = i->count; > @@ -713,6 +714,9 @@ static void pipe_advance(struct iov_iter *i, size_t size) > pipe->nrbufs--; > } > } > + if (!sanity(i)) > + printk(KERN_ERR "buggered pipe_advance(%zd) [%d,%zd]", > + old_size, old_idx, old_off); > } > > void iov_iter_advance(struct iov_iter *i, size_t size) > > in there and try to reproduce that one? My compiler choked on that, but I fixed it up. The printk didn't trigger though.. idx = 0, offset = 0 curbuf = 0, nrbufs = 1, buffers = 16 [ffffffffb9a21100 ffffea00126019c0 0 4096] [ (null) ffffea0013746440 0 0] [ (null) ffffea00132956c0 0 0] [ (null) ffffea0013295700 0 0] [ (null) ffffea0013295740 0 0] [ (null) ffffea0013295780 0 0] [ (null) ffffea00132957c0 0 0] [ (null) ffffea0013595c00 0 0] [ (null) ffffea0012b1b6c0 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] [ (null) (null) 0 0] ------------[ cut here ]------------ WARNING: CPU: 1 PID: 13581 at lib/iov_iter.c:327 sanity+0x102/0x150 CPU: 1 PID: 13581 Comm: trinity-c17 Not tainted 4.8.0-think+ #9 ffffc90000963ae8 ffffffffb93e22d1 0000000000000000 0000000000000000 ffffffffb9c1e1cb ffffffffb93fa5b2 ffffc90000963b28 ffffffffb908b010 00000147d43c0e7f ffffffffb9c1e1cb 0000000000000147 0000000000000010 Call Trace: [<ffffffffb93e22d1>] dump_stack+0x6c/0x9b [<ffffffffb93fa5b2>] ? sanity+0x102/0x150 [<ffffffffb908b010>] __warn+0x110/0x130 [<ffffffffb908b19c>] warn_slowpath_null+0x2c/0x40 [<ffffffffb93fa5b2>] sanity+0x102/0x150 [<ffffffffb93fe94e>] copy_page_to_iter+0x2be/0x480 [<ffffffffb91cc8b1>] ? workingset_activation+0xc1/0x120 [<ffffffffb91cc7f0>] ? workingset_refault+0x190/0x190 [<ffffffffb9195b85>] generic_file_read_iter+0x245/0xd30 [<ffffffffb92764ed>] generic_file_splice_read+0xfd/0x230 [<ffffffffb92763f0>] ? pipe_to_user+0x40/0x40 [<ffffffffb9275f08>] do_splice_to+0x98/0xd0 [<ffffffffb9276014>] splice_direct_to_actor+0xd4/0x2c0 [<ffffffffb9275660>] ? generic_pipe_buf_nosteal+0x10/0x10 [<ffffffffb92762c5>] do_splice_direct+0xc5/0x110 [<ffffffffb92381c2>] do_sendfile+0x242/0x470 [<ffffffffb923929d>] SyS_sendfile64+0x7d/0xf0 [<ffffffffb900279f>] do_syscall_64+0x7f/0x200 [<ffffffffb99de8cb>] entry_SYSCALL64_slow_path+0x25/0x25 ---[ end trace 6773f425063b7f84 ]--- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: btrfs_direct_IO oops 2016-10-10 13:11 ` Dave Jones @ 2016-10-10 15:55 ` Al Viro 2016-10-10 17:17 ` Dave Jones 0 siblings, 1 reply; 8+ messages in thread From: Al Viro @ 2016-10-10 15:55 UTC (permalink / raw) To: Dave Jones, Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Linux Kernel On Mon, Oct 10, 2016 at 09:11:22AM -0400, Dave Jones wrote: > My compiler choked on that, but I fixed it up. The printk didn't > trigger though.. > > idx = 0, offset = 0 > curbuf = 0, nrbufs = 1, buffers = 16 > [ffffffffb9a21100 ffffea00126019c0 0 4096] > [ (null) ffffea0013746440 0 0] > [ (null) ffffea00132956c0 0 0] > [ (null) ffffea0013295700 0 0] > [ (null) ffffea0013295740 0 0] > [ (null) ffffea0013295780 0 0] > [ (null) ffffea00132957c0 0 0] > [ (null) ffffea0013595c00 0 0] > [ (null) ffffea0012b1b6c0 0 0] > [ (null) (null) 0 0] > [ (null) (null) 0 0] > [ (null) (null) 0 0] > [ (null) (null) 0 0] > [ (null) (null) 0 0] > [ (null) (null) 0 0] > [ (null) (null) 0 0] > ------------[ cut here ]------------ > WARNING: CPU: 1 PID: 13581 at lib/iov_iter.c:327 sanity+0x102/0x150 > CPU: 1 PID: 13581 Comm: trinity-c17 Not tainted 4.8.0-think+ #9 > ffffc90000963ae8 > ffffffffb93e22d1 > 0000000000000000 > 0000000000000000 > > ffffffffb9c1e1cb > ffffffffb93fa5b2 > ffffc90000963b28 > ffffffffb908b010 > > 00000147d43c0e7f > ffffffffb9c1e1cb > 0000000000000147 > 0000000000000010 What are these from? Confused... > Call Trace: [via splice_direct_to_actor()] Hmmm... I think I see it. Could you try the following (on top of debugging in lib/iov_iter.c) and see if anything triggers? diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index bfc2aa7..b63d8c5 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -319,7 +319,7 @@ xfs_file_dio_aio_read( data = *to; ret = __blockdev_direct_IO(iocb, inode, target->bt_bdev, &data, xfs_get_blocks_direct, NULL, NULL, 0); - if (ret > 0) { + if (ret >= 0) { iocb->ki_pos += ret; iov_iter_advance(to, ret); } diff --git a/mm/filemap.c b/mm/filemap.c index 68f1813..88e5ddd 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1935,7 +1935,7 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter) file_accessed(file); retval = mapping->a_ops->direct_IO(iocb, &data); - if (retval > 0) { + if (retval >= 0) { iocb->ki_pos += retval; iov_iter_advance(iter, retval); } ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: btrfs_direct_IO oops 2016-10-10 15:55 ` Al Viro @ 2016-10-10 17:17 ` Dave Jones 0 siblings, 0 replies; 8+ messages in thread From: Dave Jones @ 2016-10-10 17:17 UTC (permalink / raw) To: Al Viro; +Cc: Chris Mason, Josef Bacik, David Sterba, linux-btrfs, Linux Kernel On Mon, Oct 10, 2016 at 04:55:03PM +0100, Al Viro wrote: > > WARNING: CPU: 1 PID: 13581 at lib/iov_iter.c:327 sanity+0x102/0x150 > > CPU: 1 PID: 13581 Comm: trinity-c17 Not tainted 4.8.0-think+ #9 > > ffffc90000963ae8 > > ffffffffb93e22d1 > > 0000000000000000 > > 0000000000000000 > > > > ffffffffb9c1e1cb > > ffffffffb93fa5b2 > > ffffc90000963b28 > > ffffffffb908b010 > > > > 00000147d43c0e7f > > ffffffffb9c1e1cb > > 0000000000000147 > > 0000000000000010 > > What are these from? Confused... That's the stack I think. I don't know why it started printing all weird.. > [via splice_direct_to_actor()] > > Hmmm... I think I see it. Could you try the following (on top of debugging > in lib/iov_iter.c) and see if anything triggers? Been running for an hour without incident so far, so this looks promising. I'll follow-up if anything jumps out, but normally I'd have seen this by now. Dave ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2016-10-10 17:17 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-10-08 18:08 btrfs_direct_IO oops Dave Jones 2016-10-08 18:29 ` Al Viro 2016-10-08 23:20 ` Dave Jones 2016-10-09 15:11 ` Dave Jones 2016-10-10 3:43 ` Al Viro 2016-10-10 13:11 ` Dave Jones 2016-10-10 15:55 ` Al Viro 2016-10-10 17:17 ` Dave Jones
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).