linux/fs/ext2/file.c
<<
>>
Prefs
   1/*
   2 *  linux/fs/ext2/file.c
   3 *
   4 * Copyright (C) 1992, 1993, 1994, 1995
   5 * Remy Card (card@masi.ibp.fr)
   6 * Laboratoire MASI - Institut Blaise Pascal
   7 * Universite Pierre et Marie Curie (Paris VI)
   8 *
   9 *  from
  10 *
  11 *  linux/fs/minix/file.c
  12 *
  13 *  Copyright (C) 1991, 1992  Linus Torvalds
  14 *
  15 *  ext2 fs regular file handling primitives
  16 *
  17 *  64-bit file support on 64-bit platforms by Jakub Jelinek
  18 *      (jj@sunsite.ms.mff.cuni.cz)
  19 */
  20
  21#include <linux/time.h>
  22#include "ext2.h"
  23#include "xattr.h"
  24#include "acl.h"
  25
  26/*
  27 * Called when filp is released. This happens when all file descriptors
  28 * for a single struct file are closed. Note that different open() calls
  29 * for the same file yield different struct file structures.
  30 */
  31static int ext2_release_file (struct inode * inode, struct file * filp)
  32{
  33        if (filp->f_mode & FMODE_WRITE) {
  34                mutex_lock(&EXT2_I(inode)->truncate_mutex);
  35                ext2_discard_reservation(inode);
  36                mutex_unlock(&EXT2_I(inode)->truncate_mutex);
  37        }
  38        return 0;
  39}
  40
  41/*
  42 * We have mostly NULL's here: the current defaults are ok for
  43 * the ext2 filesystem.
  44 */
  45const struct file_operations ext2_file_operations = {
  46        .llseek         = generic_file_llseek,
  47        .read           = do_sync_read,
  48        .write          = do_sync_write,
  49        .aio_read       = generic_file_aio_read,
  50        .aio_write      = generic_file_aio_write,
  51        .unlocked_ioctl = ext2_ioctl,
  52#ifdef CONFIG_COMPAT
  53        .compat_ioctl   = ext2_compat_ioctl,
  54#endif
  55        .mmap           = generic_file_mmap,
  56        .open           = generic_file_open,
  57        .release        = ext2_release_file,
  58        .fsync          = simple_fsync,
  59        .splice_read    = generic_file_splice_read,
  60        .splice_write   = generic_file_splice_write,
  61};
  62
  63#ifdef CONFIG_EXT2_FS_XIP
  64const struct file_operations ext2_xip_file_operations = {
  65        .llseek         = generic_file_llseek,
  66        .read           = xip_file_read,
  67        .write          = xip_file_write,
  68        .unlocked_ioctl = ext2_ioctl,
  69#ifdef CONFIG_COMPAT
  70        .compat_ioctl   = ext2_compat_ioctl,
  71#endif
  72        .mmap           = xip_file_mmap,
  73        .open           = generic_file_open,
  74        .release        = ext2_release_file,
  75        .fsync          = simple_fsync,
  76};
  77#endif
  78
  79const struct inode_operations ext2_file_inode_operations = {
  80        .truncate       = ext2_truncate,
  81#ifdef CONFIG_EXT2_FS_XATTR
  82        .setxattr       = generic_setxattr,
  83        .getxattr       = generic_getxattr,
  84        .listxattr      = ext2_listxattr,
  85        .removexattr    = generic_removexattr,
  86#endif
  87        .setattr        = ext2_setattr,
  88        .check_acl      = ext2_check_acl,
  89        .fiemap         = ext2_fiemap,
  90};
  91