diff --git a/pin.go b/pin.go
index 7a3cabdf07966d2d087dfdf79f1492503939f279..aa74c51854509cba3f63f732e72194d81e19b158 100644
--- a/pin.go
+++ b/pin.go
@@ -526,7 +526,11 @@ func (p *pinner) Update(ctx context.Context, from, to cid.Cid, unpin bool) error
 		return fmt.Errorf("'from' cid was not recursively pinned already")
 	}
 
+	// Temporarily unlock while we fetch the differences.
+	p.lock.Unlock()
 	err := dagutils.DiffEnumerate(ctx, p.dserv, from, to)
+	p.lock.Lock()
+
 	if err != nil {
 		return err
 	}