Whamcloud - gitweb
demos/snaprest.sh: mount /dev/obd2 on /mnt/obd at end of restore
[fs/lustre-release.git] / lustre / obdfs / rw.c
index 1957c44..2be005b 100644 (file)
 #include <linux/smp_lock.h>
 
 #include <linux/obd_support.h>
-#include <linux/obd_sim.h>
+#include <linux/obd_ext2.h>
 #include <linux/obdfs.h>
 
 int console_loglevel;
 
 /* VFS super_block ops */
 
+#if 0
+int obdfs_brw(struct inode *dir, int rw, struct page *page, int create)
+{
+       return iops(dir)->o_brw(rw, iid(dir), dir, page, create);
+}
+#endif
+
 /* returns the page unlocked, but with a reference */
-int obdfs_readpage(struct file *file, struct page *page)
+int obdfs_readpage(struct dentry *dentry, struct page *page)
 {
-       struct inode *inode = file->f_dentry->d_inode;
+       struct inode *inode = dentry->d_inode;
        int rc;
 
         ENTRY;
-
        /* XXX flush stuff */
        PDEBUG(page, "READ");
        rc =  iops(inode)->o_brw(READ, iid(inode),inode, page, 0);
@@ -58,6 +64,23 @@ int obdfs_readpage(struct file *file, struct page *page)
 
 }
 
+/* returns the page unlocked, but with a reference */
+int obdfs_writepage(struct dentry *dentry, struct page *page)
+{
+        struct inode *inode = dentry->d_inode;
+       int rc;
+
+        ENTRY;
+       PDEBUG(page, "WRITEPAGE");
+       /* XXX flush stuff */
+
+       rc = iops(inode)->o_brw(WRITE, iid(inode), inode, page, 1);
+
+       SetPageUptodate(page);
+       PDEBUG(page,"WRITEPAGE");
+       return rc;
+}
+
 /*
  * This does the "real" work of the write. The generic routine has
  * allocated the page, locked it, done all the page alignment stuff
@@ -85,9 +108,8 @@ int obdfs_write_one_page(struct file *file, struct page *page, unsigned long off
        status = -EFAULT;
 
        if (bytes) {
-
                lock_kernel();
-               status = obdfs_writepage(file, page);
+               status = obdfs_writepage(file->f_dentry, page);
                unlock_kernel();
        }
        EXIT;
@@ -100,23 +122,6 @@ int obdfs_write_one_page(struct file *file, struct page *page, unsigned long off
 
 
 
-/* returns the page unlocked, but with a reference */
-int obdfs_writepage(struct file *file, struct page *page)
-{
-        struct inode *inode = file->f_dentry->d_inode;
-       int rc;
-
-        ENTRY;
-       PDEBUG(page, "WRITEPAGE");
-       /* XXX flush stuff */
-
-       rc = iops(inode)->o_brw(WRITE, iid(inode), inode, page, 1);
-
-       SetPageUptodate(page);
-       PDEBUG(page,"WRITEPAGE");
-       return rc;
-}
-
 
 void report_inode(struct page * page) {
        struct inode *inode = (struct inode *)0;
@@ -153,27 +158,7 @@ struct page *obdfs_getpage(struct inode *inode, unsigned long offset, int create
        CDEBUG(D_INODE, "page_cache %p\n", page_cache);
 
        hash = page_hash(&inode->i_data, offset);
- repeat:
-       CDEBUG(D_INODE, "Finding page\n");
-       IDEBUG(inode);
-
-       page = __find_lock_page(&inode->i_data, offset, hash); 
-       if ( page ) {
-               CDEBUG(D_INODE, "Page found freeing\n");
-               page_cache_free(page_cache);
-       } else {
-               page = page_cache;
-               if ( page->buffers ) {
-                       PDEBUG(page, "GETPAGE: buffers bug\n");
-                       UnlockPage(page);
-                       return NULL;
-               }
-               if (add_to_page_cache_unique(page, &inode->i_data, offset, hash)) {
-                       page_cache_release(page);
-                       CDEBUG(D_INODE, "Someone raced: try again\n");
-                       goto repeat;
-               }
-       }
+       page = grab_cache_page(&inode->i_data, offset);
 
        PDEBUG(page, "GETPAGE: got page - before reading\n");
        /* now check if the data in the page is up to date */
@@ -188,9 +173,7 @@ struct page *obdfs_getpage(struct inode *inode, unsigned long offset, int create
        if (! page) {
            printk("get_page_map says no dice ...\n");
            return 0;
-           }
-
-
+       }
 
        rc = iops(inode)->o_brw(READ, iid(inode), inode, page, create);
        if ( rc != PAGE_SIZE ) {
@@ -208,42 +191,3 @@ struct page *obdfs_getpage(struct inode *inode, unsigned long offset, int create
 }
 
 
-struct file_operations obdfs_file_ops = {
-       NULL,                   /* lseek - default */
-       generic_file_read,      /* read */
-       obdfs_file_write,       /* write - bad */
-        obdfs_readdir,         /* readdir */
-       NULL,                   /* poll - default */
-       NULL,                   /* ioctl */
-       NULL,                   /* mmap */
-       NULL,                   /* no special open code */
-       NULL,                   /* flush */
-       NULL,                   /* no special release code */
-       NULL,                   /* fsync */
-       NULL,                   /* fasync */
-       NULL,                   /* check_media_change */
-       NULL                    /* revalidate */
-};
-
-struct inode_operations obdfs_inode_ops = {
-       &obdfs_file_ops,        /* default directory file-ops */
-       obdfs_create,   /* create */
-       obdfs_lookup,   /* lookup */
-       obdfs_link,     /* link */
-       obdfs_unlink,   /* unlink */
-       obdfs_symlink,  /* symlink */
-       obdfs_mkdir,    /* mkdir */
-       obdfs_rmdir,    /* rmdir */
-       obdfs_mknod,    /* mknod */
-       obdfs_rename,   /* rename */
-       NULL,           /* readlink */
-       NULL,           /* follow_link */
-       NULL,           /* get_block */
-       obdfs_readpage, /* readpage */
-       obdfs_writepage, /* writepage */
-       NULL,           /* flushpage */
-       NULL,           /* truncate */
-       NULL,           /* permission */
-       NULL,           /* smap */
-       NULL            /* revalidate */
-};