linux/fs/sysv/file.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 *  linux/fs/sysv/file.c
   4 *
   5 *  minix/file.c
   6 *  Copyright (C) 1991, 1992  Linus Torvalds
   7 *
   8 *  coh/file.c
   9 *  Copyright (C) 1993  Pascal Haible, Bruno Haible
  10 *
  11 *  sysv/file.c
  12 *  Copyright (C) 1993  Bruno Haible
  13 *
  14 *  SystemV/Coherent regular file handling primitives
  15 */
  16
  17#include "sysv.h"
  18
  19/*
  20 * We have mostly NULLs here: the current defaults are OK for
  21 * the coh filesystem.
  22 */
  23const struct file_operations sysv_file_operations = {
  24        .llseek         = generic_file_llseek,
  25        .read_iter      = generic_file_read_iter,
  26        .write_iter     = generic_file_write_iter,
  27        .mmap           = generic_file_mmap,
  28        .fsync          = generic_file_fsync,
  29        .splice_read    = generic_file_splice_read,
  30};
  31
  32static int sysv_setattr(struct dentry *dentry, struct iattr *attr)
  33{
  34        struct inode *inode = d_inode(dentry);
  35        int error;
  36
  37        error = setattr_prepare(dentry, attr);
  38        if (error)
  39                return error;
  40
  41        if ((attr->ia_valid & ATTR_SIZE) &&
  42            attr->ia_size != i_size_read(inode)) {
  43                error = inode_newsize_ok(inode, attr->ia_size);
  44                if (error)
  45                        return error;
  46                truncate_setsize(inode, attr->ia_size);
  47                sysv_truncate(inode);
  48        }
  49
  50        setattr_copy(inode, attr);
  51        mark_inode_dirty(inode);
  52        return 0;
  53}
  54
  55const struct inode_operations sysv_file_inode_operations = {
  56        .setattr        = sysv_setattr,
  57        .getattr        = sysv_getattr,
  58};
  59