Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Mar 2009 08:02:25 GMT
From:      Yoshihiro Ota <ota@j.email.ne.jp>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   misc/132845: [patch][geom]ggated does not close files opened after disconnec
Message-ID:  <200903200802.n2K82PmF021185@www.freebsd.org>
Resent-Message-ID: <200903200810.n2K8A3od067970@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         132845
>Category:       misc
>Synopsis:       [patch][geom]ggated does not close files opened after disconnec
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Mar 20 08:10:03 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Yoshihiro Ota
>Release:        FreeBSD 7.1/8-CURRENT
>Organization:
>Environment:
%uname -a
FreeBSD xxx 7.1-RELEASE-p3 FreeBSD 7.1-RELEASE-p3 #463 r188634M: Thu Mar 12 12:27:06 EDT 2009     xxx:/usr/obj/usr/src/sys/GENERIC  i386
>Description:
ggated doesn't close local file after closing client connections.

By the way, the patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/132798 also includes this fix, too.  I decided to file this because it is a separate issue.
>How-To-Repeat:
server# ggated
client# ggatec create -oro server /dev/da0
client# ggatec destroy -u 0
server# mount -orw /dev/da0 /mnt/backup

RW mount on server fails because ggated remain /dev/da0 opened.
>Fix:
Add the following in connection_remove function in sbin/ggate/ggated/ggated.c

        if(conn->c_diskfd == -1)
                close(conn->c_diskfd);


FYI:
static void
connection_remove(struct ggd_connection *conn)
{

        LIST_REMOVE(conn, c_next);
        g_gate_log(LOG_DEBUG, "Connection removed [%s %s].",
            ip2str((struct sockaddr*)&conn->c_srcaddr), conn->c_path);
        if (conn->c_sendfd != -1)
                close(conn->c_sendfd);
        if (conn->c_recvfd != -1)
                close(conn->c_recvfd);
        free(conn->c_path);
        free(conn);
}

>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903200802.n2K82PmF021185>