Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 1 Jan 2006 11:06:48 +1100 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Gilbert Cao <hika@bsdmon.com>
Cc:        freebsd-bugs@freebsd.org, FreeBSD-gnats-submit@freebsd.org
Subject:   Re: bin/91134: [PATCH] Preserve access and modification time when cp to a smbfs destination path
Message-ID:  <20060101105648.J39665@delplex.bde.org>
In-Reply-To: <20051231112258.C4B72B853@sdf1.bsdmon.com>
References:  <20051231112258.C4B72B853@sdf1.bsdmon.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 31 Dec 2005, Gilbert Cao wrote:

>> Fix:
> The following patch has fixed the problem as I have finally found the problem in
> the src/bin/cp source code, especially the utils.c file :
> I have found out that utimes() does nothing on the newly created file, if its
> file descriptor is not closed yet, and this is only the case in a SMB destination path.

This is a bug in smbfs.  cp only works on POSIX file systems.

> --- patch_cp_utils.diff begins here ---
> --- ./src/bin/cp/utils.c.orig	Sat Nov 12 22:21:45 2005
> +++ ./src/bin/cp/utils.c	Fri Dec 30 19:23:04 2005
> @@ -204,8 +204,6 @@
> 	 * to remove it if we created it and its length is 0.
> 	 */
>
> -	if (pflag && setfile(fs, to_fd))
> -		rval = 1;
> 	if (pflag && preserve_fd_acls(from_fd, to_fd) != 0)
> 		rval = 1;
> 	(void)close(from_fd);
> @@ -213,6 +211,14 @@
> 		warn("%s", to.p_path);
> 		rval = 1;
> 	}
> +	/*
> +	 * To preserve times in SMB to.p_path,
> +	 * setfile() should be call *AFTER* we have closed the file
> +	 * descriptors. As we have closed the descriptors, we should
> +	 * pass -1 instead of the `to_fd` value
> +	 */
> +	if (pflag && setfile(fs, -1))
> +		rval = 1;
> 	return (rval);
> }

It can't be right to always close the file.  This leaves the fd >= 0 case
in setfile() unused and bogotifies all the code that handles this case,
even for POSIX file systems where this code just works.  However, I can't
see any reason to have the fd >= 0 case except to avoid minor races for
regular files only.

Bruce



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