#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>
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;
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;
return rc;
}
-int osc_disconnect(struct obd_conn *conn)
+static int osc_disconnect(struct obd_conn *conn)
{
struct ptlrpc_request *request;
int rc;
}
-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;
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;
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;
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,
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++) {
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,