| /* | |
| * linux/fs/sysv/file.c | |
| * | |
| * minix/file.c | |
| * Copyright (C) 1991, 1992 Linus Torvalds | |
| * | |
| * coh/file.c | |
| * Copyright (C) 1993 Pascal Haible, Bruno Haible | |
| * | |
| * sysv/file.c | |
| * Copyright (C) 1993 Bruno Haible | |
| * | |
| * SystemV/Coherent regular file handling primitives | |
| */ | |
| #include "sysv.h" | |
| /* | |
| * We have mostly NULLs here: the current defaults are OK for | |
| * the coh filesystem. | |
| */ | |
| const struct file_operations sysv_file_operations = { | |
| .llseek = generic_file_llseek, | |
| .read = do_sync_read, | |
| .aio_read = generic_file_aio_read, | |
| .write = do_sync_write, | |
| .aio_write = generic_file_aio_write, | |
| .mmap = generic_file_mmap, | |
| .fsync = generic_file_fsync, | |
| .splice_read = generic_file_splice_read, | |
| }; | |
| static int sysv_setattr(struct dentry *dentry, struct iattr *attr) | |
| { | |
| struct inode *inode = dentry->d_inode; | |
| int error; | |
| error = inode_change_ok(inode, attr); | |
| if (error) | |
| return error; | |
| if ((attr->ia_valid & ATTR_SIZE) && | |
| attr->ia_size != i_size_read(inode)) { | |
| error = vmtruncate(inode, attr->ia_size); | |
| if (error) | |
| return error; | |
| } | |
| setattr_copy(inode, attr); | |
| mark_inode_dirty(inode); | |
| return 0; | |
| } | |
| const struct inode_operations sysv_file_inode_operations = { | |
| .truncate = sysv_truncate, | |
| .setattr = sysv_setattr, | |
| .getattr = sysv_getattr, | |
| }; |