Messages in this thread | | | From | Linus Torvalds <> | Date | Wed, 19 Oct 2016 10:43:59 -0700 | Subject | Re: bio linked list corruption. |
| |
On Wed, Oct 19, 2016 at 10:09 AM, Philipp Hahn <pmhahn@pmhahn.de> wrote: > > Nearly a month ago I reported also a "list_add corruption", but with 4.1.6: > <http://marc.info/?l=linux-kernel&m=147508265316854&w=2> > > That server rungs Samba4, which also is a heavy user of xattr.
That one looks very different. In fact, the list that got corrupted for you has since been changed to a hlist (which is *similar* to our doubly-linked list, but has a smaller head and does not allow adding to the end of the list).
Also, the "should be" and "was" values are very close, and switched:
should be ffffffff81ab3ca8, but was ffffffff81ab3cc8 should be ffffffff81ab3cc8, but was ffffffff81ab3ca8
so it actually looks like it was the same data structure. In particular, it looks like enqueue_timer() ended up racing on adding an entry to one index in the "base->vectors[]" array, while hitting an entry that was pointing to another index near-by.
So I don't think it's related. Yours looks like some subtle timer base race. It smells like a locking problem with timers. I'm not seeing what it might be, but it *might* have been fixed by doing the TIMER_MIGRATING bit right in add_timer_on() (commit 22b886dd1018).
Adding some timer people just in case, but I don't think your 4.1 report is related.
Linus
| |