60 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * linux/fs/sysv/file.c4 *5 * minix/file.c6 * Copyright (C) 1991, 1992 Linus Torvalds7 *8 * coh/file.c9 * Copyright (C) 1993 Pascal Haible, Bruno Haible10 *11 * sysv/file.c12 * Copyright (C) 1993 Bruno Haible13 *14 * SystemV/Coherent regular file handling primitives15 */16 17#include "sysv.h"18 19/*20 * We have mostly NULLs here: the current defaults are OK for21 * 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 = filemap_splice_read,30};31 32static int sysv_setattr(struct mnt_idmap *idmap,33 struct dentry *dentry, struct iattr *attr)34{35 struct inode *inode = d_inode(dentry);36 int error;37 38 error = setattr_prepare(&nop_mnt_idmap, dentry, attr);39 if (error)40 return error;41 42 if ((attr->ia_valid & ATTR_SIZE) &&43 attr->ia_size != i_size_read(inode)) {44 error = inode_newsize_ok(inode, attr->ia_size);45 if (error)46 return error;47 truncate_setsize(inode, attr->ia_size);48 sysv_truncate(inode);49 }50 51 setattr_copy(&nop_mnt_idmap, inode, attr);52 mark_inode_dirty(inode);53 return 0;54}55 56const struct inode_operations sysv_file_inode_operations = {57 .setattr = sysv_setattr,58 .getattr = sysv_getattr,59};60