From: Tim Chase Date: Sat, 12 Oct 2013 22:33:28 +0000 (-0500) Subject: Add missing dsl pool configuration lock X-Git-Tag: zfs-0.6.3~246 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fbcb768c8fd1f32653f46ed4a8a9ceafe139087b;p=zfs Add missing dsl pool configuration lock The semantics introduced by the restructured sync task of illumos 3464 require this lock when calling dmu_snapshot_list_next(). The pool is locked/unlocked for each iteration to reduce the chance of long-running locks. This was accidentally missed when doing the original port because ZoL's control directory code is Linux-specific and is in a different file than in illumos. Signed-off-by: Richard Yao Signed-off-by: Brian Behlendorf Closes #1785 --- diff --git a/module/zfs/zpl_ctldir.c b/module/zfs/zpl_ctldir.c index 1bb646fdf..96157ec78 100644 --- a/module/zfs/zpl_ctldir.c +++ b/module/zfs/zpl_ctldir.c @@ -261,8 +261,10 @@ zpl_snapdir_iterate(struct file *filp, struct dir_context *ctx) goto out; while (error == 0) { + dsl_pool_config_enter(dmu_objset_pool(zsb->z_os), FTAG); error = -dmu_snapshot_list_next(zsb->z_os, MAXNAMELEN, - snapname, &id, &(ctx->pos), &case_conflict); + snapname, &id, &ctx->pos, &case_conflict); + dsl_pool_config_exit(dmu_objset_pool(zsb->z_os), FTAG); if (error) goto out;