2005-04-16 15:20:36 -07:00
/*
* 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 .
*/
2006-03-28 01:56:42 -08:00
const struct file_operations sysv_file_operations = {
2005-04-16 15:20:36 -07:00
. llseek = generic_file_llseek ,
2014-04-02 14:33:16 -04:00
. read_iter = generic_file_read_iter ,
2014-04-03 03:17:43 -04:00
. write_iter = generic_file_write_iter ,
2005-04-16 15:20:36 -07:00
. mmap = generic_file_mmap ,
2010-05-26 17:53:41 +02:00
. fsync = generic_file_fsync ,
2007-06-01 11:49:19 +02:00
. splice_read = generic_file_splice_read ,
2005-04-16 15:20:36 -07:00
} ;
2010-06-04 11:29:59 +02:00
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 ;
2010-06-04 11:30:02 +02:00
if ( ( attr - > ia_valid & ATTR_SIZE ) & &
attr - > ia_size ! = i_size_read ( inode ) ) {
2012-12-15 11:45:58 +01:00
error = inode_newsize_ok ( inode , attr - > ia_size ) ;
2010-06-04 11:30:02 +02:00
if ( error )
return error ;
2012-12-15 11:45:58 +01:00
truncate_setsize ( inode , attr - > ia_size ) ;
sysv_truncate ( inode ) ;
2010-06-04 11:30:02 +02:00
}
setattr_copy ( inode , attr ) ;
mark_inode_dirty ( inode ) ;
return 0 ;
2010-06-04 11:29:59 +02:00
}
2007-02-12 00:55:40 -08:00
const struct inode_operations sysv_file_inode_operations = {
2010-06-04 11:29:59 +02:00
. setattr = sysv_setattr ,
2005-04-16 15:20:36 -07:00
. getattr = sysv_getattr ,
} ;