Date: Wed, 18 May 2011 14:05:06 +0200 From: Borja Marcos <borjam@sarenet.es> To: Jeremy Chadwick <freebsd@jdc.parodius.com> Cc: Charles Sprickman <spork@bway.net>, stable@FreeBSD.org, Andriy Gapon <avg@FreeBSD.org> Subject: Re: 8.1R possible zfs snapshot livelock? Message-ID: <FCE5F082-A3BF-4A21-B2E3-FEF3EA715F2C@sarenet.es> In-Reply-To: <20110517112952.GA48610@icarus.home.lan> References: <alpine.OSX.2.00.1105170120510.1983@hotlap.nat.fasttrackmonkey.com> <20110517073029.GA44359@icarus.home.lan> <4DD25264.8040305@FreeBSD.org> <20110517112952.GA48610@icarus.home.lan>
next in thread | previous in thread | raw e-mail | index | archive | help
On May 17, 2011, at 1:29 PM, Jeremy Chadwick wrote: > * ZFS send | ssh zfs recv results in ZFS subsystem hanging; = 8.1-RELEASE; > February 2011: > = http://lists.freebsd.org/pipermail/freebsd-fs/2011-February/010602.html I found a reproducible deadlock condition actually. If you keep some I/O = activity on a dataset on which you are receiving a ZFS incremental = snapshot at the same time, it can deadlock. Imagine this situation: Two servers, A and B. A dataset on server A is = replicated at regular intervals to B, so that you keep a reasonably up = to date copy. Something like: (Runnning on server A): zfs snapshot thepool/thedataset@thistime zfs send -Ri thepooll/thedataser@previoustime hepool/thedataset@thistime = | ssh serverB zfs receive -d thepool It works, but I suffered a deadlock when one of the periodic "daily" = scripts was running. Doing some tests, I saw that ZFS can deadlock if = you do a zfs receive onto a dataset which has some read activity. = Disabling atime didn't help either. But if you make sure *not* to access the replicated dataset it works, I = haven=B4t seen it failing otherwise.=20 If you wish to reproduce it, try creating a dataset for /usr/obj, = running make buildworld on it, replicating at, say, 30 or 60 second = intervals, and keep several scripts (or rsync) reading the target = dataset files and just copying them to another place in the usual, = "classic" way. (example: tar cf - . | ( cd /destination && tar xf -) Borja
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?FCE5F082-A3BF-4A21-B2E3-FEF3EA715F2C>