mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-17 10:01:01 +03:00
fzap_cursor_move_to_key() should drop l_rwlock
Callers of zap_deref_leaf() must be careful to drop leaf->l_rwlock since that function returns with the lock held on success. All other callers drop the lock correctly but it seems fzap_cursor_move_to_key() does not. This may block writers or cause VERIFY failures when the lock is freed. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #1215 Closes zfsonlinux/spl#143 Closes zfsonlinux/spl#97
This commit is contained in:
parent
09a661e960
commit
1305d33a4b
@ -1257,13 +1257,13 @@ fzap_cursor_move_to_key(zap_cursor_t *zc, zap_name_t *zn)
|
|||||||
return (err);
|
return (err);
|
||||||
|
|
||||||
err = zap_leaf_lookup(l, zn, &zeh);
|
err = zap_leaf_lookup(l, zn, &zeh);
|
||||||
if (err != 0)
|
if (err == 0) {
|
||||||
return (err);
|
zc->zc_leaf = l;
|
||||||
|
zc->zc_hash = zeh.zeh_hash;
|
||||||
zc->zc_leaf = l;
|
zc->zc_cd = zeh.zeh_cd;
|
||||||
zc->zc_hash = zeh.zeh_hash;
|
}
|
||||||
zc->zc_cd = zeh.zeh_cd;
|
|
||||||
|
|
||||||
|
rw_exit(&l->l_rwlock);
|
||||||
return (err);
|
return (err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user