Re: [PATCH 5 2/4] Return 32/64-bit dir name hash according to usage type

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


On 04/24/2012 12:42 AM, Andreas Dilger wrote:
On 2012-04-23, at 5:23 PM, Eric Sandeen wrote:
I'm curious about the above as well as:

        case SEEK_END:
                if (unlikely(offset>  0))
                        goto out_err; /* not supported for directories */

The previous .llseek handler, and the generic handler for other filesystems, allow seeking past the end of the dir AFAICT.  (not sure why you'd want to, but I don't see that you'd get an error back).

Is there a reason to uniquely exclude it in ext4?  Does that line up with POSIX?

I don't know what the origin of this was...  I don't think there is a real reason for it except that it doesn't make any sense to do so.


I think I added that. According to pubs.opengroup.org:
(http://pubs.opengroup.org/onlinepubs/009695399/functions/seekdir.html)

void seekdir(DIR *dirp, long loc);

<quote>

If the value of loc was not obtained from an earlier call to telldir(), or if a call to rewinddir() occurred between the call to telldir() and the call to seekdir(), the results of subsequent calls to readdir() are unspecified.

</quote>


As telldir(), which should correlate to 'case SEEK_CUR' will not provide invalid values, the behaviour is undefined.


Also,


case SEEK_END:
[...]
                if (dx_dir)
                        offset += ext4_get_htree_eof(file);
                else
                        offset += inode->i_size;
[...]


        if (!dx_dir) {
                if (offset > inode->i_sb->s_maxbytes)
                        goto out_err;
        } else if (offset > ext4_get_htree_eof(file))
                goto out_err;




Hence, the additional:

         case SEEK_END:
                 if (unlikely(offset>  0))
                      goto out_err; /* not supported for directories */

	
is just a shortcut to avoid useless calculations.

Unless I missed something, it only remains the question if could break existing applications relying on undefined behaviour. However, I have no idea how an application might trigger that?


Thanks,
Bernd

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Reiser Filesystem Development]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Photo]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]


  Powered by Linux