Date: Sat, 9 Feb 2013 17:10:02 GMT From: Andriy Gapon <avg@FreeBSD.org> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/175897: operations on readonly zpool hang Message-ID: <201302091710.r19HA2Bp099581@freefall.freebsd.org>
index | next in thread | raw e-mail
The following reply was made to PR kern/175897; it has been noted by GNATS.
From: Andriy Gapon <avg@FreeBSD.org>
To: John Hein <jhein@symmetricom.com>, Martin Matuska <mm@FreeBSD.org>,
Pawel Jakub Dawidek <pjd@FreeBSD.org>
Cc: bug-followup@FreeBSD.org
Subject: Re: kern/175897: operations on readonly zpool hang
Date: Sat, 09 Feb 2013 19:06:55 +0200
on 09/02/2013 17:53 John Hein said the following:
> Here's the full procstat -kk -a output...
John,
thank you very much!
This problem seems to be a weird omission in our ZFS port.
This is how pool_status_check function looks in the last open source version of
OpenSolaris:
int
pool_status_check(const char *name, zfs_ioc_namecheck_t type,
zfs_ioc_poolcheck_t check)
{
spa_t *spa;
int error;
ASSERT(type == POOL_NAME || type == DATASET_NAME);
if (check & POOL_CHECK_NONE)
return (0);
error = spa_open(name, &spa, FTAG);
if (error == 0) {
if ((check & POOL_CHECK_SUSPENDED) && spa_suspended(spa))
error = EAGAIN;
else if ((check & POOL_CHECK_READONLY) && !spa_writeable(spa))
error = EROFS;
spa_close(spa, FTAG);
}
return (error);
}
In current Illumos the code seems to be the same:
http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs/zfs_ioctl.c#pool_status_check
Here is how the code looks in FreeBSD:
int
pool_status_check(const char *name, zfs_ioc_namecheck_t type)
{
spa_t *spa;
int error;
ASSERT(type == POOL_NAME || type == DATASET_NAME);
error = spa_open(name, &spa, FTAG);
if (error == 0) {
if (spa_suspended(spa))
error = EAGAIN;
spa_close(spa, FTAG);
}
return (error);
}
The code seems to have been introduced in ZFSv15 import (commit r209962) and has
not been changed/updated since then.
The spa_writeable() check should have prevented the situation you are seeing.
P.S.
Exact cause of the hang is that txg threads are not started at all but the
thread doing the ioctl waits on txg sync thread to do something.
--
Andriy Gapon
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302091710.r19HA2Bp099581>
