2005-04-17 02:20:36 +04: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 13:56:42 +04:00
const struct file_operations sysv_file_operations = {
2005-04-17 02:20:36 +04:00
. llseek = generic_file_llseek ,
2006-10-01 10:28:48 +04:00
. read = do_sync_read ,
. aio_read = generic_file_aio_read ,
. write = do_sync_write ,
. aio_write = generic_file_aio_write ,
2005-04-17 02:20:36 +04:00
. mmap = generic_file_mmap ,
2010-05-26 19:53:41 +04:00
. fsync = generic_file_fsync ,
2007-06-01 13:49:19 +04:00
. splice_read = generic_file_splice_read ,
2005-04-17 02:20:36 +04:00
} ;
2010-06-04 13:29:59 +04: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 13:30:02 +04:00
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 ;
2010-06-04 13:29:59 +04:00
}
2007-02-12 11:55:40 +03:00
const struct inode_operations sysv_file_inode_operations = {
2005-04-17 02:20:36 +04:00
. truncate = sysv_truncate ,
2010-06-04 13:29:59 +04:00
. setattr = sysv_setattr ,
2005-04-17 02:20:36 +04:00
. getattr = sysv_getattr ,
} ;