Whamcloud - gitweb
add some methods in file.c
authorwangdi <wangdi>
Thu, 5 Feb 2004 18:25:41 +0000 (18:25 +0000)
committerwangdi <wangdi>
Thu, 5 Feb 2004 18:25:41 +0000 (18:25 +0000)
lustre/smfs/file.c
lustre/smfs/inode.c
lustre/smfs/smfs_internal.h

index 751f13a..fec85af 100644 (file)
 #include <linux/pagemap.h>
 #include "smfs_internal.h" 
 
+
+static int smfs_readpage(struct file *file, 
+                        struct page *page)
+{
+       struct  inode *inode = page->mapping->host;
+       struct  inode *cache_inode;
+       int     rc;
+       
+       ENTRY;
+       
+       cache_inode = I2CI(inode);
+        if (!cache_inode)
+                RETURN(-ENOENT);
+
+       if (cache_inode->i_mapping->a_ops->readpage)
+               rc = cache_inode->i_mapping->a_ops->readpage(file, page);
+               
+        RETURN(rc);
+       
+}
+static int smfs_writepage(struct page *page)
+{
+
+       struct  inode *inode = page->mapping->host;
+       struct  inode *cache_inode;
+       int     rc;
+       
+       ENTRY;
+       
+       cache_inode = I2CI(inode);
+        if (!cache_inode)
+                RETURN(-ENOENT);
+
+       if (cache_inode->i_mapping->a_ops->writepage)
+               rc = cache_inode->i_mapping->a_ops->writepage(page);
+               
+        RETURN(rc);
+       
+}
 struct address_space_operations smfs_file_aops = {
+       readpage:   smfs_readpage,
+       writepage:  smfs_writepage,
 };
                                                                                                                                                                                                      
+
+static ssize_t smfs_write (struct file *filp, const char *buf, 
+                          size_t count, loff_t *ppos)
+{
+       struct  inode *cache_inode;
+       struct  dentry *dentry = filp->f_dentry;
+       int     rc;
+       
+       ENTRY;
+       
+       cache_inode = I2CI(dentry->d_inode);
+        if (!cache_inode)
+                RETURN(-ENOENT);
+
+       if (cache_inode->i_fop->write)
+               cache_inode->i_fop->write(filp, buf, count, ppos);
+               
+        RETURN(rc);
+}
+
+static ssize_t smfs_read (struct file *filp, char *buf, 
+                         size_t count, loff_t *ppos)
+{
+       struct  inode *cache_inode;
+       struct  dentry *dentry = filp->f_dentry;
+       ssize_t rc;
+       
+       ENTRY;
+       
+       cache_inode = I2CI(dentry->d_inode);
+        if (!cache_inode)
+                RETURN(-ENOENT);
+
+       if (cache_inode->i_fop->read)
+               rc = cache_inode->i_fop->read(filp, buf, count, ppos);
+               
+        RETURN(rc);
+}
+
 struct file_operations smfs_file_fops = {
+       read:   smfs_read,
+       write:  smfs_write,
 };
-                                                                                                                                                                                                     
+
+static void smfs_truncate(struct inode * inode)      
+{
+       struct  inode *cache_inode;
+
+       cache_inode = I2CI(inode);
+
+       if (!cache_inode)
+               return;
+       
+       if (cache_inode->i_op->truncate)
+               cache_inode->i_op->truncate(cache_inode);
+
+       duplicate(inode, cache_inode);          
+        
+       return; 
+} 
+static int smfs_setattr(struct dentry *dentry, struct iattr *attr)      
+{
+       struct  inode *cache_inode;
+       int     rc = 0;
+
+       cache_inode = I2CI(dentry->d_inode);
+
+       if (!cache_inode) 
+               RETURN(-ENOENT);
+       
+       if (cache_inode->i_op->setattr)
+               rc = cache_inode->i_op->setattr(dentry, attr);
+
+       RETURN(rc);
+} 
+                                                                                                                                                                                     
 struct inode_operations smfs_file_iops = {
+       truncate:       smfs_truncate,          /* BKL held */
+        setattr:        smfs_setattr,           /* BKL held */
 };
 
index 4057f94..f9f3b73 100644 (file)
@@ -14,7 +14,7 @@
 #include <linux/string.h>
 #include "smfs_internal.h" 
 
-static void duplicate_inode(struct inode *cache_inode, struct inode *inode)
+void duplicate_inode(struct inode *cache_inode, struct inode *inode)
 {
        
        inode->i_mode = cache_inode->i_mode;
index ad58e8e..1e09a61 100644 (file)
@@ -66,4 +66,9 @@ extern int sm_debug_level;
 extern int sm_inodes;
 extern long sm_kmemory;
 extern int sm_stack;
-#endif /* __LINUX_SNAPFS_H */
+/*dir.c*/
+extern struct inode_operations smfs_dir_iops; 
+extern struct file_operations smfs_dir_fops; 
+/*inode.c*/
+extern void duplicate_inode(struct inode *cache_inode, struct inode *inode);
+#endif /* __LINUX_SMFS_H */