The following reply was made to PR kern/175897; it has been noted by GNATS.

From: Andriy Gapon <a...@freebsd.org>
To: John Hein <jh...@symmetricom.com>, Martin Matuska <m...@freebsd.org>,
        Pawel Jakub Dawidek <p...@freebsd.org>
Cc: bug-follo...@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
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to