Skip to content
This repository has been archived by the owner on Feb 26, 2020. It is now read-only.

Disabled rw_tryupgrade() for newer kernels #2

Closed
behlendorf opened this issue May 14, 2010 · 1 comment
Closed

Disabled rw_tryupgrade() for newer kernels #2

behlendorf opened this issue May 14, 2010 · 1 comment
Labels

Comments

@behlendorf
Copy link
Contributor

VERIFY(rc = rw_tryenter_locked(SEM(&dn->dn_struct_rwlock))) failed
SPLError: 24204:0:(dnode.c:923:dnode_new_blkid()) SBUG

For kernels using the CONFIG_RWSEM_GENERIC_SPINLOCK implementation everything is fine. But if your kernel is building with the arch specific rwsems then rw_tryupgrade() has been disabled until it can be implemented correctly. In particular, the x86 implementation now leverages atomic primitives for serialization rather than spinlocks. So to get this working again it will need to be implemented as a cmpxchg for x86 and likely something similar for other arches we are interested in. For now it's safest to simply disable it.

@behlendorf
Copy link
Contributor Author

It turns out this isn't proving to be an issue in practice, I'm closing the bug.

FransUrbo pushed a commit to FransUrbo/spl that referenced this issue Apr 11, 2013
Fix scatterlists temporarily with tmp buffer
delphix-devops-bot pushed a commit to delphix-devops-bot/spl that referenced this issue May 8, 2018
tonyhutter added a commit to tonyhutter/spl that referenced this issue Jan 30, 2019
(This is the ported SPL portion of this patch)

The bug time sequence:
1. thread openzfs#1, `zfs_write` assign a txg "n".
2. In a same process, thread openzfs#2, mmap page fault (which means the
`mm_sem` is hold) occurred, `zfs_dirty_inode` open a txg failed,
and wait previous txg "n" completed.
3. thread openzfs#1 call `uiomove` to write, however page fault is occurred
in `uiomove`, which means it need `mm_sem`, but `mm_sem` is hold by
thread openzfs#2, so it stuck and can't complete,  then txg "n" will
not complete.

So thread openzfs#1 and thread openzfs#2 are deadlocked.

Reviewed-by: Chunwei Chen <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Matthew Ahrens <[email protected]>
Signed-off-by: Grady Wong <[email protected]>
Closes #7939
tonyhutter added a commit that referenced this issue Mar 4, 2019
(This is the ported SPL portion of this patch)

The bug time sequence:
1. thread #1, `zfs_write` assign a txg "n".
2. In a same process, thread #2, mmap page fault (which means the
`mm_sem` is hold) occurred, `zfs_dirty_inode` open a txg failed,
and wait previous txg "n" completed.
3. thread #1 call `uiomove` to write, however page fault is occurred
in `uiomove`, which means it need `mm_sem`, but `mm_sem` is hold by
thread #2, so it stuck and can't complete,  then txg "n" will
not complete.

So thread #1 and thread #2 are deadlocked.

Reviewed-by: Chunwei Chen <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Matthew Ahrens <[email protected]>
Signed-off-by: Grady Wong <[email protected]>
Closes #7939
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

1 participant