From cf1853ce53abc6c50874d80130b09129ef147a96 Mon Sep 17 00:00:00 2001 From: wangdi <wangdi> Date: Wed, 11 Feb 2004 09:29:52 +0000 Subject: [PATCH] update smfs, some fix about read in smfs --- lustre/smfs/file.c | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/lustre/smfs/file.c b/lustre/smfs/file.c index e9afdd1d63..82639831ac 100644 --- a/lustre/smfs/file.c +++ b/lustre/smfs/file.c @@ -140,6 +140,8 @@ static ssize_t smfs_write (struct file *filp, const char *buf, struct inode *inode = dentry->d_inode; struct file open_file; struct dentry open_dentry; + loff_t tmp_ppos; + loff_t *cache_ppos; int rc = 0; ENTRY; @@ -149,13 +151,19 @@ static ssize_t smfs_write (struct file *filp, const char *buf, if (!cache_inode) RETURN(-ENOENT); + if (ppos != &(filp->f_pos)) { + cache_ppos = &tmp_ppos; + } else { + cache_ppos = &open_file.f_pos; + } + *cache_ppos = *ppos; + smfs_prepare_cachefile(inode, filp, cache_inode, &open_file, &open_dentry); - if (cache_inode->i_fop->write) - rc = cache_inode->i_fop->write(&open_file, buf, count, &open_file.f_pos); + rc = cache_inode->i_fop->write(&open_file, buf, count, cache_ppos); - *ppos = open_file.f_pos; + *ppos = *cache_ppos; duplicate_inode(cache_inode, inode); smfs_update_file(filp, &open_file); @@ -168,7 +176,7 @@ int smfs_ioctl(struct inode * inode, struct file * filp, struct dentry *dentry = filp->f_dentry; struct file open_file; struct dentry open_dentry; - ssize_t rc; + ssize_t rc = 0; ENTRY; @@ -195,7 +203,9 @@ static ssize_t smfs_read (struct file *filp, char *buf, struct inode *inode = dentry->d_inode; struct file open_file; struct dentry open_dentry; - ssize_t rc; + loff_t tmp_ppos; + loff_t *cache_ppos; + ssize_t rc = 0; ENTRY; @@ -203,13 +213,22 @@ static ssize_t smfs_read (struct file *filp, char *buf, if (!cache_inode) RETURN(-ENOENT); + if (ppos != &(filp->f_pos)) { + cache_ppos = &tmp_ppos; + } else { + cache_ppos = &open_file.f_pos; + } + *cache_ppos = *ppos; + + smfs_prepare_cachefile(inode, filp, cache_inode, &open_file, &open_dentry); + if (cache_inode->i_fop->read) - rc = cache_inode->i_fop->read(&open_file, buf, count, &open_file.f_pos); + rc = cache_inode->i_fop->read(&open_file, buf, count, cache_ppos); - *ppos = open_file.f_pos; + *ppos = *cache_ppos; duplicate_inode(cache_inode, inode); smfs_update_file(filp, &open_file); RETURN(rc); @@ -223,7 +242,7 @@ static loff_t smfs_llseek(struct file *file, struct dentry *dentry = file->f_dentry; struct file open_file; struct dentry open_dentry; - ssize_t rc; + ssize_t rc = 0; ENTRY; @@ -236,7 +255,7 @@ static loff_t smfs_llseek(struct file *file, if (cache_inode->i_fop->llseek) rc = cache_inode->i_fop->llseek(&open_file, offset, origin); - + duplicate_inode(cache_inode, dentry->d_inode); smfs_update_file(file, &open_file); -- GitLab