[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [PATCH 03/16] libdiskfs: track file name in struct peropen



I don't understand this part:

Justus Winter, le Tue 30 Jul 2013 11:59:11 +0200, a écrit :
> @@ -100,8 +100,17 @@ diskfs_S_dir_rename (struct protid *fromcred,
>        diskfs_nrele (fnp);
>        pthread_mutex_unlock (&renamedirlock);
>        if (!err)
> -	/* MiG won't do this for us, which it ought to. */
> -	mach_port_deallocate (mach_task_self (), tocred->pi.port_right);
> +	{
> +	  /* MiG won't do this for us, which it ought to. */
> +	  mach_port_deallocate (mach_task_self (), tocred->pi.port_right);
> +
> +	  /* Update fromcred->po->path for anyone who still has a
> +	     reference to this node.  */
> +	  free (fromcred->po->path);
> +	  fromcred->po->path = strdup (tocred->po->path);
> +	  if (! fromcred->po->path)
> +	    return ENOMEM;
> +	}
>        return err;
>      }
>  
> @@ -194,6 +203,13 @@ diskfs_S_dir_rename (struct protid *fromcred,
>  
>    /* We now hold no locks */
>  
> +  /* Update fromcred->po->path for anyone who still has a reference to
> +     this node.  */
> +  free (fromcred->po->path);
> +  fromcred->po->path = strdup (tocred->po->path);
> +  if (! fromcred->po->path)
> +    return ENOMEM;
> +
>    /* Now we remove the source.  Unfortunately, we haven't held 
>       fdp locked (nor could we), so someone else might have already
>       removed it. */

Why is this modifying fromcred?  AIUI that is the directory originally
containing the node to be renamed, so I don't see why its path should
change.

Samuel


Reply to: