This is totally screwed up:  The rules used to determine whether
    a path component buffer ( struct componentname, sys/namei.h ) is freed
    by a VOP routine or not are idiotic.

    As far as I can tell, the rule is:

        * if no error is returned free the path component buffer, but only
          if the SAVESTART flag is not set.

        * If an error is returned, free the path component buffer whether
          SAVESTART is set or not.

    Combine this with the callers which decide whether to set SAVESTART,
    and the result is an extremely fragile mess.  Combine this with
    VOP_ABORTOP's operation ( which frees the path component if SAVESTART is
    not set ) and it gets even worse.

    Confused yet?

    At the very least, anyone who zfree's a path component should
    clear the HASBUF flag so sanity checks can be added to the code.  The
    nfs_serv.c code is unnecessarily complex due to this junkiness.

    I would like to fix this in the tree and add sanity checks.

                                        -Matt
                                        Matthew Dillon 
                                        <dil...@backplane.com>


To Unsubscribe: send mail to majord...@freebsd.org
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to