11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * linux/fs/sysv/file.c 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * minix/file.c 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1991, 1992 Linus Torvalds 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * coh/file.c 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1993 Pascal Haible, Bruno Haible 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * sysv/file.c 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1993 Bruno Haible 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * SystemV/Coherent regular file handling primitives 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "sysv.h" 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * We have mostly NULLs here: the current defaults are OK for 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the coh filesystem. 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 224b6f5d20b04dcbc3d888555522b90ba6d36c4106Arjan van de Venconst struct file_operations sysv_file_operations = { 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .llseek = generic_file_llseek, 24543ade1fc901db4c3dbe9fb27241fb977f1f3eeaBadari Pulavarty .read = do_sync_read, 25543ade1fc901db4c3dbe9fb27241fb977f1f3eeaBadari Pulavarty .aio_read = generic_file_aio_read, 26543ade1fc901db4c3dbe9fb27241fb977f1f3eeaBadari Pulavarty .write = do_sync_write, 27543ade1fc901db4c3dbe9fb27241fb977f1f3eeaBadari Pulavarty .aio_write = generic_file_aio_write, 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mmap = generic_file_mmap, 291b061d9247f71cd15edc4c4c4600191a903642c0Christoph Hellwig .fsync = generic_file_fsync, 305ffc4ef45b3b0a57872f631b4e4ceb8ace0d7496Jens Axboe .splice_read = generic_file_splice_read, 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 33d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwigstatic int sysv_setattr(struct dentry *dentry, struct iattr *attr) 34d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwig{ 35d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwig struct inode *inode = dentry->d_inode; 36d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwig int error; 37d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwig 38d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwig error = inode_change_ok(inode, attr); 39d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwig if (error) 40d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwig return error; 411025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig 421025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig if ((attr->ia_valid & ATTR_SIZE) && 431025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig attr->ia_size != i_size_read(inode)) { 441025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig error = vmtruncate(inode, attr->ia_size); 451025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig if (error) 461025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig return error; 471025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig } 481025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig 491025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig setattr_copy(inode, attr); 501025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig mark_inode_dirty(inode); 511025774ce411f2bd4b059ad7b53f0003569b74faChristoph Hellwig return 0; 52d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwig} 53d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwig 54c5ef1c42c51b1b5b4a401a6517bdda30933ddbafArjan van de Venconst struct inode_operations sysv_file_inode_operations = { 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .truncate = sysv_truncate, 56d39aae9ec447dda84d9a2850743a78a535a71c90Christoph Hellwig .setattr = sysv_setattr, 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .getattr = sysv_getattr, 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 59