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