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 */ 23 const 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 32 static 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 55 const struct inode_operations sysv_file_inode_operations = { 56 .setattr = sysv_setattr, 57 .getattr = sysv_getattr, 58 }; 59