Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 May 2004 11:24:41 -0700 (PDT)
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sbin/ggate/ggatec ggatec.c
Message-ID:  <200405031824.i43IOfYQ089631@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
pjd         2004/05/03 11:24:41 PDT

  FreeBSD src repository

  Modified files:
    sbin/ggate/ggatec    ggatec.c 
  Log:
  Don't repeat handshake.
  
  This little thing can cause a deadlock, because taste mechanism start
  to work after creation of ggate provider and I/O requests are sent from
  other classes from the g_event thread, so number of pending events isn't 0.
  Now ggatec(8) start second handshake and ggated(8) is trying to open
  GEOM provider (for example md(4)) and it can't, because it hangs on
  g_waitidle() in g_dev_open(). g_waitidle() cannot finish because
  there is a pending read on event queue, and this read can't be
  finished, because ggated(8) can't open target device.
  GEOM Gate will recover from this deadlock, because requests will
  timeout, but it of course isn't the best solution and I don't know
  better one for now, so we should avoid opening GEOM providers while
  there are pending requests in event queue.
  
  Revision  Changes    Path
  1.3       +4 -4      src/sbin/ggate/ggatec/ggatec.c



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