On Sun, 4 Mar 2007, Divacky Roman wrote:

I noticed that kern___getcwd() calls vn_fullpath1() with Giant held like this:

        mtx_lock(&Giant);
        FILEDESC_LOCK(fdp);
       error = vn_fullpath1(td, fdp->fd_cdir, fdp->fd_rdir, tmpbuf,
           &bp, buflen);
       FILEDESC_UNLOCK(fdp);
       mtx_unlock(&Giant);

on the other hand vn_fullpath() calls it without Giant held like this:

        FILEDESC_LOCK(fdp);
       error = vn_fullpath1(td, vn, fdp->fd_rdir, buf, retbuf, MAXPATHLEN);
       FILEDESC_UNLOCK(fdp);

I dont see much difference in the callings so I wonder if holding Giant is necessary when calling vn_fullpath1(). Because we either - do one unecessary locking operation or unsufficiently lock it.

thnx for explaining to me and possibly fixing it.

I suspect that the Giant acquisition there is a conservative acquisition based on VFS not having been MPSAFE, and can be removed.

Robert N M Watson
Computer Laboratory
University of Cambridge
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to