patch-2.4.10 linux/fs/coda/file.c
Next file: linux/fs/coda/psdev.c
Previous file: linux/fs/buffer.c
Back to the patch index
Back to the overall index
- Lines: 86
- Date:
Sat Sep 22 11:11:09 2001
- Orig file:
v2.4.9/linux/fs/coda/file.c
- Orig date:
Mon Aug 27 12:41:46 2001
diff -u --recursive --new-file v2.4.9/linux/fs/coda/file.c linux/fs/coda/file.c
@@ -31,28 +31,65 @@
int use_coda_close;
static ssize_t
-coda_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos)
+coda_file_read(struct file *file, char *buf, size_t count, loff_t *ppos)
{
+ struct inode *inode = file->f_dentry->d_inode;
+ struct coda_inode_info *cii = ITOC(inode);
struct file *cfile;
+
+ cfile = cii->c_container;
+ if (!cfile) BUG();
+
+ if (!cfile->f_op || !cfile->f_op->read)
+ return -EINVAL;
+
+ return cfile->f_op->read(cfile, buf, count, ppos);
+}
+
+static ssize_t
+coda_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos)
+{
struct inode *cinode, *inode = file->f_dentry->d_inode;
struct coda_inode_info *cii = ITOC(inode);
- ssize_t n;
+ struct file *cfile;
+ ssize_t ret;
+ int flags;
cfile = cii->c_container;
if (!cfile) BUG();
- if (!cfile->f_op || cfile->f_op->write != generic_file_write)
- BUG();
+ if (!cfile->f_op || !cfile->f_op->write)
+ return -EINVAL;
cinode = cfile->f_dentry->d_inode;
- down(&cinode->i_sem);
+ down(&inode->i_sem);
+ flags = cfile->f_flags;
+ cfile->f_flags |= file->f_flags & (O_APPEND | O_SYNC);
+
+ ret = cfile->f_op->write(cfile, buf, count, ppos);
- n = generic_file_write(file, buf, count, ppos);
+ cfile->f_flags = flags;
inode->i_size = cinode->i_size;
+ up(&inode->i_sem);
+
+ return ret;
+}
+
+static int
+coda_file_mmap(struct file *file, struct vm_area_struct *vma)
+{
+ struct inode *inode = file->f_dentry->d_inode;
+ struct coda_inode_info *cii = ITOC(inode);
+ struct file *cfile;
+
+ cfile = cii->c_container;
+
+ if (!cfile) BUG();
- up(&cinode->i_sem);
+ if (!cfile->f_op || !cfile->f_op->mmap)
+ return -ENODEV;
- return n;
+ return cfile->f_op->mmap(cfile, vma);
}
int coda_open(struct inode *i, struct file *f)
@@ -237,9 +274,9 @@
struct file_operations coda_file_operations = {
llseek: generic_file_llseek,
- read: generic_file_read,
+ read: coda_file_read,
write: coda_file_write,
- mmap: generic_file_mmap,
+ mmap: coda_file_mmap,
open: coda_open,
flush: coda_flush,
release: coda_release,
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)