Re: bug? VFAT copy problem

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

 



Hi,

We encountered this problem before,it did being caused by dcache.
When creating files, VFS would check the dcache first and pass the dentry
it found there to vfat_create(). Instead of dentry , using the path info
passed by user solved the problem.

--- namei.c	2006-11-18 18:41:58.000000000 +0900
+++ namei.c.new	2006-11-23 12:45:34.000000000 +0900
@@ -742,7 +742,7 @@
 	lock_kernel();
 
 	ts = CURRENT_TIME_SEC;
-	err = vfat_add_entry(dir, &dentry->d_name, 0, 0, &ts, &sinfo);
+	err = vfat_add_entry(dir, &nd->last, 0, 0, &ts, &sinfo);
 	if (err)
 		goto out;
 	dir->i_version++;



From: OGAWA Hirofumi <[email protected]>
Subject: Re: bug? VFAT copy problem
Date: Wed, 22 Nov 2006 00:46:43 +0900

> The Peach <[email protected]> writes:
> 
> > On Tue, 21 Nov 2006 02:32:43 +0900
> > OGAWA Hirofumi <[email protected]> wrote:
> >
> >> I couldn't reproduce this for now. Could you tell mount options which
> >> you used? and after mount, "cat /proc/mounts", please.
> >
> > # mount | grep vfat 
> > /dev/sdb1 on /mnt/iomega type vfat (rw,uid=1000,gid=100,codepage=850,iocharset=iso8859-15) 
> >
> > it seems only related to those kind of files, but I don't know how to inspect the "file properties" and why these files behave like this.
> > As you can see and with a strace made on cp, the files _seems_ to be copied with the correct case, whilst it isn't, as seen with "ls". This and other things let me think is a vfat problem.
> 
> Hmm... This may be the dentry cache handling problem of fat.
> 
> Can you try the attached debug patch? And if you comment-in the
> following parts, does this problem fix?
> 
> @@ -787,6 +830,9 @@ static int vfat_rmdir(struct inode *dir,
>  	clear_nlink(inode);
>  	inode->i_mtime = inode->i_atime = CURRENT_TIME_SEC;
>  	fat_detach(inode);
> +	/* need to revalidate for next create */
> +	table = (sbi->options.name_check == 's') ? 3 : 1;
> +//	dentry->d_op = &vfat_dentry_ops[table];
> @@ -811,6 +858,9 @@ static int vfat_unlink(struct inode *dir
>  	clear_nlink(inode);
>  	inode->i_mtime = inode->i_atime = CURRENT_TIME_SEC;
>  	fat_detach(inode);
> +	/* need to revalidate for next create */
> +	table = (sbi->options.name_check == 's') ? 3 : 1;
> +//	dentry->d_op = &vfat_dentry_ops[table];
> -- 
> OGAWA Hirofumi <[email protected]>
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux