Applied.
Charles
On Tue, 2005-12-20 at 14:39 +0900, [EMAIL PROTECTED] wrote:
> I am afraid it might be a unionfs copyup_permissions() bug.
> It copies some attributes of the inode, but timestamps.
> When a user chmod to the file on ro branch, unionfs will copyup the
> file, and the timestamps will be updated illegally.
>
> /dev/shm/u$ grep union /proc/mounts
> unionfs /dev/shm/u unionfs
> rw,dirs=/dev/shm/rw=rw:/dev/shm/ro=ro,debug=0,delete=whiteout,copyup=preserve
> 0 0
> /dev/shm/u$ ls -l ../r?/f_dst f_dst
> -rw-r--r-- 1 jro jro 2 Dec 20 14:15 ../ro/f_dst
> -rw-r--r-- 1 jro jro 2 Dec 20 14:15 f_dst
>
> It shows 'f_dst' exists on ro branch only.
>
> /dev/shm/u$ stat f_dst
> File: `f_dst'
> Size: 2 Blocks: 2 IO Block: 4096 regular file
> Device: 22h/34d Inode: 4 Links: 1
> Access: (0644/-rw-r--r--) Uid: ( 1000/ jro) Gid: ( 1000/ jro)
> Access: 2005-12-20 14:15:40.000000000 +0900
> Modify: 2005-12-20 14:15:40.000000000 +0900
> Change: 2005-12-20 14:15:40.000000000 +0900
> /dev/shm/u$ chmod a+w f_dst
> /dev/shm/u$ stat f_dst
> File: `f_dst'
> Size: 2 Blocks: 2 IO Block: 4096 regular file
> Device: 22h/34d Inode: 4 Links: 1
> Access: (0666/-rw-rw-rw-) Uid: ( 1000/ jro) Gid: ( 1000/ jro)
> Access: 2005-12-20 14:17:24.000000000 +0900
> Modify: 2005-12-20 14:17:24.000000000 +0900
> Change: 2005-12-20 14:17:24.000000000 +0900
>
> It shows three timestamps are updated after chmod.
> In this case, mtime must not be changed.
>
> Here is a patch.
>
>
> Junjiro Okajima
>
>
> --- unionfs-20051130-1554.orig/copyup.c 2005-12-01 05:54:06.000000000
> +0900
> +++ unionfs-20051130-1554/copyup.c 2005-12-20 14:12:02.000000000 +0900
> @@ -137,7 +137,11 @@ static int copyup_permissions(struct sup
>
> print_entry_location();
>
> - newattrs.ia_valid = ATTR_CTIME;
> + newattrs.ia_atime = old_hidden_dentry->d_inode->i_atime;
> + newattrs.ia_mtime = old_hidden_dentry->d_inode->i_mtime;
> + newattrs.ia_ctime = old_hidden_dentry->d_inode->i_ctime;
> + newattrs.ia_valid = ATTR_CTIME | ATTR_ATIME | ATTR_MTIME |
> + ATTR_ATIME_SET | ATTR_MTIME_SET;
> if (IS_SET(sb, COPYUP_FS_MOUNTER)) {
> /* f/s mounter */
> newattrs.ia_mode = stopd(sb)->copyupmode;
> _______________________________________________
> unionfs mailing list
> [email protected]
> http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs
_______________________________________________
unionfs mailing list
[email protected]
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs