Skip to content
Snippets Groups Projects
Select Git revision
  • 68c9d702bb72f367f3b148963ec6cf5e07ff7f65
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

file.c

Blame
  • user avatar
    Josef Bacik authored and Theodore Ts'o committed
    Any block based fs (this patch includes ext3) just has to declare its own
    fiemap() function and then call this generic function with its own
    get_block_t. This works well for block based filesystems that will map
    multiple contiguous blocks at one time, but will work for filesystems that
    only map one block at a time, you will just end up with an "extent" for each
    block. One gotcha is this will not play nicely where there is hole+data
    after the EOF. This function will assume its hit the end of the data as soon
    as it hits a hole after the EOF, so if there is any data past that it will
    not pick that up. AFAIK no block based fs does this anyway, but its in the
    comments of the function anyway just in case.
    
    Signed-off-by: default avatarJosef Bacik <jbacik@redhat.com>
    Signed-off-by: default avatarMark Fasheh <mfasheh@suse.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    Cc: linux-fsdevel@vger.kernel.org
    68c9d702
    History
    file.c 2.26 KiB
    /*
     *  linux/fs/ext2/file.c
     *
     * Copyright (C) 1992, 1993, 1994, 1995
     * Remy Card (card@masi.ibp.fr)
     * Laboratoire MASI - Institut Blaise Pascal
     * Universite Pierre et Marie Curie (Paris VI)
     *
     *  from
     *
     *  linux/fs/minix/file.c
     *
     *  Copyright (C) 1991, 1992  Linus Torvalds
     *
     *  ext2 fs regular file handling primitives
     *
     *  64-bit file support on 64-bit platforms by Jakub Jelinek
     * 	(jj@sunsite.ms.mff.cuni.cz)
     */
    
    #include <linux/time.h>
    #include "ext2.h"
    #include "xattr.h"
    #include "acl.h"
    
    /*
     * Called when filp is released. This happens when all file descriptors
     * for a single struct file are closed. Note that different open() calls
     * for the same file yield different struct file structures.
     */
    static int ext2_release_file (struct inode * inode, struct file * filp)
    {
    	if (filp->f_mode & FMODE_WRITE) {
    		mutex_lock(&EXT2_I(inode)->truncate_mutex);
    		ext2_discard_reservation(inode);
    		mutex_unlock(&EXT2_I(inode)->truncate_mutex);
    	}
    	return 0;
    }
    
    /*
     * We have mostly NULL's here: the current defaults are ok for
     * the ext2 filesystem.
     */
    const struct file_operations ext2_file_operations = {
    	.llseek		= generic_file_llseek,
    	.read		= do_sync_read,
    	.write		= do_sync_write,
    	.aio_read	= generic_file_aio_read,
    	.aio_write	= generic_file_aio_write,
    	.unlocked_ioctl = ext2_ioctl,
    #ifdef CONFIG_COMPAT
    	.compat_ioctl	= ext2_compat_ioctl,
    #endif
    	.mmap		= generic_file_mmap,
    	.open		= generic_file_open,
    	.release	= ext2_release_file,
    	.fsync		= ext2_sync_file,
    	.splice_read	= generic_file_splice_read,
    	.splice_write	= generic_file_splice_write,
    };
    
    #ifdef CONFIG_EXT2_FS_XIP
    const struct file_operations ext2_xip_file_operations = {
    	.llseek		= generic_file_llseek,
    	.read		= xip_file_read,
    	.write		= xip_file_write,
    	.unlocked_ioctl = ext2_ioctl,
    #ifdef CONFIG_COMPAT
    	.compat_ioctl	= ext2_compat_ioctl,
    #endif
    	.mmap		= xip_file_mmap,
    	.open		= generic_file_open,
    	.release	= ext2_release_file,
    	.fsync		= ext2_sync_file,
    };
    #endif
    
    const struct inode_operations ext2_file_inode_operations = {
    	.truncate	= ext2_truncate,
    #ifdef CONFIG_EXT2_FS_XATTR
    	.setxattr	= generic_setxattr,
    	.getxattr	= generic_getxattr,
    	.listxattr	= ext2_listxattr,
    	.removexattr	= generic_removexattr,
    #endif
    	.setattr	= ext2_setattr,
    	.permission	= ext2_permission,
    	.fiemap		= ext2_fiemap,
    };