Re: [PATCH vfat] allow retrieving entries with trailing dots

Philippe De Muyter
2010-03-10T16:14:36Z

Hello Ogawa

Thanks for the quick answer.

On Wed, Mar 10, 2010 at 11:44:27PM +0900, OGAWA Hirofumi wrote:
> Philippe De Muyter <phdm@macqel.be> writes:
>
> > --- a/fs/fat/namei_vfat.c 2009-09-10 00:13:59.000000000 +0200
> > +++ b/fs/fat/namei_vfat.c 2010-02-08 02:28:37.010096903 +0100
> > @@ -702,9 +702,22 @@
> > static int vfat_find(struct inode *dir, struct qstr *qname,
> > struct fat_slot_info *sinfo)
> > {
> > - unsigned int len = vfat_striptail_len(qname);
> > + int err;
> > + unsigned int len;
> > +
> > + /* Some combined ethernet + usb external hard drive do not
> > + * remove the trailing dots when creating entries in ethernet mode.
> > + * (e.g. Iomega Home Network Hard Drive)
> > + * Make accessing those entries possible.
> > + */
> > + err = fat_search_long(dir, qname->name, qname->len, sinfo);
> > + if (!err)
> > + return err;
> > + len = vfat_striptail_len(qname);
> > if (len == 0)
> > return -ENOENT;
> > + if (len == qname->len)
> > + return err;
> > return fat_search_long(dir, qname->name, len, sinfo);
> > }
>
> This would be bad for both (standard and IO-MEGA hack).
>
> This introduces unneeded directory-parse to standard one. And for

No. There will only be a second parse if someone is looking for a filename
with a trailing dot, and it is not found (*). I there is no trailing dot in qname, only the first fat_search_long will be called, because len after vfat_striptail_len would be equal to qname->len.

> IO-MEGA, this wouldn't provide proper filename handling.

For accessing IO-MEGA disk in read mode, this is perfect. I didn't want
to replicate IO-MEGA write behaviour here, only fix the read behaviour for
such simple commands as 'ls', 'find' and all the directory browsers.

>
> If it wants to handle the tailing-dot as a part of filename, it
> shouldn't be able to access to the stripped-dots filename. (For simple
> example, I guess you can't do "mv a a." with this patch.)

As I explained above, I only fix read-access on IO-MEGA drives, while
preserving standard behaviour for write mode.

But I'll try your testcase asap. Which behaviour do you expect ?
I would expect a no-op, because I did not change the write-behaviour.

Best regards

Philippe

(*) This will never happen with 'ls', 'find' and friends who get their name
list from getdents. This could only happen if someone tries to open
a file called 'a.' on his vfat file-system, which of course does not exist
in his normal vfat file-system.