On 2011-06-28, at 9:33 AM, Josef Bacik wrote: > Since Ext4 has its own lseek we need to make sure it handles > SEEK_HOLE/SEEK_DATA. For now just do the same thing that is done in the generic > case, somebody else can come along and make it do fancy things later. Thanks, Josef, are you planning to add an ext4-based version of this in the future? Another possibility is to have a generic SEEK_{DATA,HOLE} -> FIEMAP converter, since there are several filesystems that already support FIEMAP (ext3, ext4, etc). > Signed-off-by: Josef Bacik <josef@xxxxxxxxxx> > --- > fs/ext4/file.c | 21 +++++++++++++++++++++ > 1 files changed, 21 insertions(+), 0 deletions(-) > > diff --git a/fs/ext4/file.c b/fs/ext4/file.c > index 2c09723..ce766f9 100644 > --- a/fs/ext4/file.c > +++ b/fs/ext4/file.c > @@ -236,6 +236,27 @@ loff_t ext4_llseek(struct file *file, loff_t offset, int origin) > } > offset += file->f_pos; > break; > + case SEEK_DATA: > + /* > + * In the generic case the entire file is data, so as long as > + * offset isn't at the end of the file then the offset is data. > + */ > + if (offset >= inode->i_size) { > + mutex_unlock(&inode->i_mutex); > + return -ENXIO; > + } > + break; > + case SEEK_HOLE: > + /* > + * There is a virtual hole at the end of the file, so as long as > + * offset isn't i_size or larger, return i_size. > + */ > + if (offset >= inode->i_size) { > + mutex_unlock(&inode->i_mutex); > + return -ENXIO; > + } > + offset = inode->i_size; > + break; > } > > if (offset < 0 || offset > maxbytes) { > -- > 1.7.5.2 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html Cheers, Andreas -- 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