From: Eric Sandeen <sandeen@sandeen.net>
To: Eric Sandeen <sandeen@redhat.com>
Cc: "linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
ext4 development <linux-ext4@vger.kernel.org>,
Andreas Dilger <adilger@dilger.ca>,
Bernd Schubert <bernd.schubert@itwm.fraunhofer.de>
Subject: Re: [PATCH] vfs: allow custom EOF in generic_file_llseek code
Date: Fri, 27 Apr 2012 11:28:58 -0500 [thread overview]
Message-ID: <4F9AC94A.3070506@sandeen.net> (raw)
In-Reply-To: <4F9AC770.8080004@redhat.com>
On 4/27/12 11:21 AM, Eric Sandeen wrote:
> For ext3/4 htree directories, using the vfs llseek function with
> SEEK_END goes to i_size like for any other file, but in reality
> we want the maximum possible hash value. Recent changes
> in ext4 have cut & pasted generic_file_llseek() back into fs/ext4/dir.c,
> but replicating this core code seems like a bad idea, especially
> since the copy has already diverged from the vfs.
>
> This patch implements a version of generic_file_llseek which can accept
> both a custom maximum offset, and a custom EOF position. With this
> in place, ext4_dir_llseek can pass in the appropriate maximum hash
> position for both maxsize and eof, and get what it wants.
>
> As far as I know, this does not fix any bugs - nfs in the kernel
> doesn't use SEEK_END, and I don't know of any user who does. But
> some ext4 folks seem keen on doing the right thing here, and I can't
> really argue.
>
> (Patch also fixes up some comments slightly)
>
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
I guess I should ahev done a patch series, although the ext4 patch is so
messy it's hard to read as a patch. With the new framework in place,
ext4_dir_llseek can just be:
/*
* ext4_dir_llseek() calls generic_file_llseek_size to handle htree
* directories, where the "offset" is in terms of the filename hash
* value instead of the byte offset.
*
* Because we may return a 64-bit hash that is well beyond offset limits,
* we need to pass the max hash as the maximum allowable offset in
* the htree directory case.
*
* For non-htree, ext4_llseek already chooses the proper max offset.
*/
loff_t ext4_dir_llseek(struct file *file, loff_t offset, int origin)
{
struct inode *inode = file->f_mapping->host;
int dx_dir = is_dx_dir(inode);
loff_t htree_max = ext4_get_htree_eof(file);
if (likely(dx_dir))
return generic_file_llseek_size_eof(file, offset, origin,
htree_max, htree_max);
else
return ext4_llseek(file, offset, origin);
}
-Eric
next prev parent reply other threads:[~2012-04-27 16:28 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-27 16:21 [PATCH] vfs: allow custom EOF in generic_file_llseek code Eric Sandeen
2012-04-27 16:28 ` Eric Sandeen [this message]
2012-04-27 22:47 ` Bernd Schubert
2012-04-27 23:01 ` Eric Sandeen
2012-04-28 18:33 ` Matthew Wilcox
2012-04-30 14:17 ` Eric Sandeen
2012-04-30 18:11 ` [PATCH 1/3 V2] " Eric Sandeen
2012-04-30 18:14 ` [PATCH 2/3] ext4: use core vfs llseek code for dir seeks Eric Sandeen
2012-04-30 18:16 ` [PATCH 3/3] ext3: pass custom EOF to generic_file_llseek_size() Eric Sandeen
2012-04-30 22:10 ` Jan Kara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F9AC94A.3070506@sandeen.net \
--to=sandeen@sandeen.net \
--cc=adilger@dilger.ca \
--cc=bernd.schubert@itwm.fraunhofer.de \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=sandeen@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.