Whamcloud - gitweb
- RCS version experimet
[fs/lustre-release.git] / lustre / obdecho / echo.c
index d3cd0a7..18ea2bd 100644 (file)
@@ -33,12 +33,12 @@ static struct obdo OA;
 static obd_count GEN;
 static long echo_pages = 0;
 
-static int echo_connect(struct obd_conn *conn)
+static int echo_connect(struct lustre_handle *conn, struct obd_device *obd)
 {
         int rc;
 
         MOD_INC_USE_COUNT;
-        rc = gen_connect(conn);
+        rc = class_connect(conn, obd);
 
         if (rc)
                 MOD_DEC_USE_COUNT;
@@ -46,18 +46,18 @@ static int echo_connect(struct obd_conn *conn)
         return rc;
 }
 
-static int echo_disconnect(struct obd_conn *conn)
+static int echo_disconnect(struct lustre_handle *conn)
 {
         int rc;
 
-        rc = gen_disconnect(conn);
+        rc = class_disconnect(conn);
         if (!rc)
                 MOD_DEC_USE_COUNT;
 
         return rc;
 }
 
-static int echo_getattr(struct obd_conn *conn, struct obdo *oa)
+static int echo_getattr(struct lustre_handle *conn, struct obdo *oa)
 {
         memcpy(oa, &OA, sizeof(*oa));
         oa->o_mode = ++GEN;
@@ -65,7 +65,7 @@ static int echo_getattr(struct obd_conn *conn, struct obdo *oa)
         return 0;
 }
 
-int echo_preprw(int cmd, struct obd_conn *conn, int objcount,
+int echo_preprw(int cmd, struct lustre_handle *conn, int objcount,
                 struct obd_ioobj *obj, int niocount, struct niobuf_remote *nb,
                 struct niobuf_local *res, void **desc_private)
 {
@@ -95,22 +95,10 @@ int echo_preprw(int cmd, struct obd_conn *conn, int objcount,
                         }
                         echo_pages++;
 
-                        /*
-                        if (cmd == OBD_BRW_READ) {
-                                __u64 *data = address;
-
-                                data[0] = obj->ioo_id;
-                                data[1] = j;
-                                data[2] = nb->offset;
-                                data[3] = nb->len;
-                        }
-                        */
-
                         r->offset = nb->offset;
                         r->page = virt_to_page(address);
                         r->addr = kmap(r->page);
                         r->len = nb->len;
-                        // r->flags
                 }
         }
         CDEBUG(D_PAGE, "%ld pages allocated after prep\n", echo_pages);
@@ -126,7 +114,6 @@ preprw_cleanup:
         CERROR("cleaning up %ld pages (%d obdos)\n", (long)(r - res), objcount);
         while (r-- > res) {
                 kunmap(r->page);
-
                 __free_pages(r->page, 0);
                 echo_pages--;
         }
@@ -135,7 +122,7 @@ preprw_cleanup:
         return rc;
 }
 
-int echo_commitrw(int cmd, struct obd_conn *conn, int objcount,
+int echo_commitrw(int cmd, struct lustre_handle *conn, int objcount,
                   struct obd_ioobj *obj, int niocount, struct niobuf_local *res,
                   void *desc_private)
 {
@@ -157,16 +144,20 @@ int echo_commitrw(int cmd, struct obd_conn *conn, int objcount,
 
                 for (j = 0 ; j < obj->ioo_bufcnt ; j++, r++) {
                         struct page *page = r->page;
-                        unsigned long addr = (unsigned long)page_address(page);
+                        unsigned long addr;
+
+                        if (!page ||
+                            !(addr = (unsigned long)page_address(page)) ||
+                            !kern_addr_valid(addr)) {
 
-                        if (!addr || !kern_addr_valid(addr)) {
                                 CERROR("bad page %p, id %Ld (%d), buf %d/%d\n",
                                        page, (unsigned long long)obj->ioo_id, i,
                                        j, obj->ioo_bufcnt);
                                 GOTO(commitrw_cleanup, rc = -EFAULT);
                         }
 
-                        free_pages(addr, 0);
+                        kunmap(page);
+                        __free_pages(page, 0);
                         echo_pages--;
                 }
         }
@@ -178,9 +169,9 @@ commitrw_cleanup:
                niocount - (long)(r - res) - 1, objcount);
         while (++r < res + niocount) {
                 struct page *page = r->page;
-                unsigned long addr = (unsigned long)page_address(page);
 
-                free_pages(addr, 0);
+                kunmap(page);
+                __free_pages(page, 0);
                 echo_pages--;
         }
         return rc;
@@ -194,22 +185,23 @@ struct obd_ops echo_obd_ops = {
         o_commitrw:    echo_commitrw,
 };
 
+#define OBDECHO_VERSION "$Version$
 
 static int __init obdecho_init(void)
 {
-        printk(KERN_INFO "Echo OBD driver  v0.001, braam@clusterfs.com\n");
+        printk(KERN_INFO "Echo OBD driver " OBDECHO_VERSION " braam@clusterfs.com\n");
 
-        return obd_register_type(&echo_obd_ops, OBD_ECHO_DEVICENAME);
+        return class_register_type(&echo_obd_ops, OBD_ECHO_DEVICENAME);
 }
 
 static void __exit obdecho_exit(void)
 {
         CERROR("%ld prep/commitrw pages leaked\n", echo_pages);
-        obd_unregister_type(OBD_ECHO_DEVICENAME);
+        class_unregister_type(OBD_ECHO_DEVICENAME);
 }
 
 MODULE_AUTHOR("Cluster Filesystems Inc. <info@clusterfs.com>");
-MODULE_DESCRIPTION("Lustre Testing Echo OBD driver v1.0");
+MODULE_DESCRIPTION("Lustre Testing Echo OBD driver " OBDECHO_VERSION);
 MODULE_LICENSE("GPL"); 
 
 module_init(obdecho_init);