Whamcloud - gitweb
- Added DEBUG_SUBSYSTEMs
[fs/lustre-release.git] / lustre / osc / osc_request.c
index c74462e..b3a305f 100644 (file)
 #include <linux/fs.h>
 #include <linux/stat.h>
 #include <asm/uaccess.h>
-#include <linux/vmalloc.h>
 #include <asm/segment.h>
 #include <linux/miscdevice.h>
 
+#define DEBUG_SUBSYSTEM S_OSC
+
 #include <linux/obd_support.h>
 #include <linux/obd_class.h>
 #include <linux/lustre_lib.h>
@@ -53,7 +54,7 @@ struct ptlrpc_request *ost_prep_req(int opcode, int buflen1, char *buf1,
        int rc;
        ENTRY; 
 
-       request = (struct ptlrpc_request *)kmalloc(sizeof(*request), GFP_KERNEL); 
+       OBD_ALLOC(request, sizeof(*request));
        if (!request) { 
                printk("osc_prep_req: request allocation out of memory\n");
                return NULL;
@@ -130,12 +131,12 @@ extern int osc_queue_wait(struct obd_conn *conn, struct ptlrpc_request *req)
        return 0;
 }
 
-void osc_free_req(struct ptlrpc_request *request)
+static void osc_free_req(struct ptlrpc_request *request)
 {
-       kfree(request);
+       OBD_FREE(request, sizeof(*request));
 }
 
-int osc_connect(struct obd_conn *conn)
+static int osc_connect(struct obd_conn *conn)
 {
        struct ptlrpc_request *request;
        int rc; 
@@ -165,7 +166,7 @@ int osc_connect(struct obd_conn *conn)
        return rc;
 }
 
-int osc_disconnect(struct obd_conn *conn)
+static int osc_disconnect(struct obd_conn *conn)
 {
        struct ptlrpc_request *request;
        int rc; 
@@ -192,7 +193,7 @@ int osc_disconnect(struct obd_conn *conn)
 }
 
 
-int osc_getattr(struct obd_conn *conn, struct obdo *oa)
+static int osc_getattr(struct obd_conn *conn, struct obdo *oa)
 {
        struct ptlrpc_request *request;
        int rc; 
@@ -224,7 +225,7 @@ int osc_getattr(struct obd_conn *conn, struct obdo *oa)
        return 0;
 }
 
-int osc_setattr(struct obd_conn *conn, struct obdo *oa)
+static int osc_setattr(struct obd_conn *conn, struct obdo *oa)
 {
        struct ptlrpc_request *request;
        int rc; 
@@ -250,7 +251,7 @@ int osc_setattr(struct obd_conn *conn, struct obdo *oa)
        return 0;
 }
 
-int osc_create(struct obd_conn *conn, struct obdo *oa)
+static int osc_create(struct obd_conn *conn, struct obdo *oa)
 {
        struct ptlrpc_request *request;
        int rc; 
@@ -281,6 +282,37 @@ int osc_create(struct obd_conn *conn, struct obdo *oa)
        return 0;
 }
 
+static int osc_destroy(struct obd_conn *conn, struct obdo *oa)
+{
+       struct ptlrpc_request *request;
+       int rc; 
+
+       if (!oa) { 
+               printk(__FUNCTION__ ": oa NULL\n"); 
+       }
+       request = ost_prep_req(OST_DESTROY, 0, NULL, 0, NULL);
+       if (!request) { 
+               printk("osc_connect: cannot pack req!\n"); 
+               return -ENOMEM;
+       }
+       
+       memcpy(&request->rq_req.ost->oa, oa, sizeof(*oa));
+       request->rq_req.ost->oa.o_valid = ~0;
+       request->rq_replen = 
+               sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
+       
+       rc = osc_queue_wait(conn, request);
+       if (rc) { 
+               EXIT;
+               goto out;
+       }
+       memcpy(oa, &request->rq_rep.ost->oa, sizeof(*oa));
+
+ out:
+       osc_free_req(request);
+       return 0;
+}
+
 
 /* mount the file system (secretly) */
 static int osc_setup(struct obd_device *obddev, obd_count len,
@@ -400,7 +432,7 @@ int osc_brw(int rw, struct obd_conn *conn, obd_count num_oa,
 
  out:
        if (request->rq_rephdr)
-               kfree(request->rq_rephdr);
+               OBD_FREE(request->rq_rephdr, request->rq_replen);
        n = 0;
        for (i=0; i < num_oa; i++) { 
                for (j = 0 ; j < oa_bufs[i] ; j++) { 
@@ -423,6 +455,7 @@ struct obd_ops osc_obd_ops = {
        o_setup:   osc_setup,
        o_cleanup: osc_cleanup, 
        o_create: osc_create,
+       o_destroy: osc_destroy,
        o_getattr: osc_getattr,
        o_setattr: osc_setattr,
        o_connect: osc_connect,