#include <linux/lustre_net.h>
#include <linux/lustre_dlm.h>
#include <linux/init.h>
+#include <linux/lprocfs_status.h>
+
+extern lprocfs_vars_t status_var_nm_1[];
+extern lprocfs_vars_t status_class_var[];
static int ost_destroy(struct ptlrpc_request *req)
{
RETURN(rc);
repbody = lustre_msg_buf(req->rq_repmsg, 0);
+ /* FIXME: unpack only valid fields instead of memcpy, endianness */
memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
req->rq_status = obd_getattr(conn, &repbody->oa, NULL);
RETURN(0);
{
struct lustre_handle *conn = (struct lustre_handle *)req->rq_reqmsg;
struct obd_statfs *osfs;
- struct statfs sfs;
int rc, size = sizeof(*osfs);
ENTRY;
- rc = obd_statfs(conn, &sfs);
- if (rc) {
- CERROR("ost: statfs failed: rc %d\n", rc);
- req->rq_status = rc;
- RETURN(rc);
- }
-
rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repmsg);
if (rc)
RETURN(rc);
osfs = lustre_msg_buf(req->rq_repmsg, 0);
memset(osfs, 0, size);
- obd_statfs_pack(osfs, &sfs);
+
+ rc = obd_statfs(conn, osfs);
+ if (rc) {
+ CERROR("ost: statfs failed: rc %d\n", rc);
+ req->rq_status = rc;
+ RETURN(rc);
+ }
+ obd_statfs_pack(osfs, osfs);
+
RETURN(0);
}
RETURN(rc);
repbody = lustre_msg_buf(req->rq_repmsg, 0);
+ /* FIXME: unpack only valid fields instead of memcpy, endianness */
memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
req->rq_status = obd_open(conn, &repbody->oa, NULL);
RETURN(0);
RETURN(rc);
repbody = lustre_msg_buf(req->rq_repmsg, 0);
+ /* FIXME: unpack only valid fields instead of memcpy, endianness */
memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
req->rq_status = obd_close(conn, &repbody->oa, NULL);
RETURN(0);
RETURN(rc);
repbody = lustre_msg_buf(req->rq_repmsg, 0);
+ /* FIXME: unpack only valid fields instead of memcpy, endianness */
memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
req->rq_status = obd_create(conn, &repbody->oa, NULL);
RETURN(0);
body = lustre_msg_buf(req->rq_reqmsg, 0);
+ if ((NTOH__u32(body->oa.o_valid) & (OBD_MD_FLSIZE | OBD_MD_FLBLOCKS))!=
+ (OBD_MD_FLSIZE | OBD_MD_FLBLOCKS))
+ RETURN(-EINVAL);
+
rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repmsg);
if (rc)
RETURN(rc);
repbody = lustre_msg_buf(req->rq_repmsg, 0);
+ /* FIXME: unpack only valid fields instead of memcpy, endianness */
memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
req->rq_status = obd_punch(conn, &repbody->oa, NULL,
- repbody->oa.o_blocks, repbody->oa.o_size);
+ repbody->oa.o_size, repbody->oa.o_blocks);
RETURN(0);
}
RETURN(rc);
repbody = lustre_msg_buf(req->rq_repmsg, 0);
+ /* FIXME: unpack only valid fields instead of memcpy, endianness */
memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
req->rq_status = obd_setattr(conn, &repbody->oa, NULL);
RETURN(0);
out_local:
OBD_FREE(local_nb, sizeof(*local_nb) * niocount);
out:
- if (rc)
+ if (rc) {
+ /* It's a lot of work to delay allocating the reply, and a lot
+ * less work to just free it here. */
+ OBD_FREE(req->rq_repmsg, req->rq_replen);
+ req->rq_repmsg = NULL;
ptlrpc_error(req->rq_svc, req);
- else
+ } else
ptlrpc_reply(req->rq_svc, req);
RETURN(rc);
}
OBD_FREE(local_nb, niocount * sizeof(*local_nb));
out:
if (!reply_sent) {
- if (rc)
+ if (rc) {
+ OBD_FREE(req->rq_repmsg, req->rq_replen);
+ req->rq_repmsg = NULL;
ptlrpc_error(req->rq_svc, req);
- else
+ } else
ptlrpc_reply(req->rq_svc, req);
}
return rc;
GOTO(error_dec, err = -EINVAL);
}
- err = obd_connect(&ost->ost_conn, tgt, NULL);
+ err = obd_connect(&ost->ost_conn, tgt, NULL, NULL, NULL);
if (err) {
CERROR("fail to connect to device %d\n", data->ioc_dev);
GOTO(error_dec, err = -EINVAL);
}
- ost->ost_service = ptlrpc_init_svc(64 * 1024, OST_REQUEST_PORTAL,
- OSC_REPLY_PORTAL, "self", ost_handle,
- "ost");
+ ost->ost_service = ptlrpc_init_svc(OST_NEVENTS, OST_NBUFS,
+ OST_BUFSIZE, OST_MAXREQSIZE,
+ OST_REQUEST_PORTAL, OSC_REPLY_PORTAL,
+ "self", ost_handle, "ost");
if (!ost->ost_service) {
CERROR("failed to start service\n");
GOTO(error_disc, err = -EINVAL);
MOD_DEC_USE_COUNT;
RETURN(0);
}
+int ost_attach(struct obd_device *dev,
+ obd_count len, void *data)
+{
+ /* lprocfs_reg_dev(dev, (lprocfs_group_t*)lprocfs_ptlrpc_nm,
+ sizeof(struct lprofiler_ptlrpc));
+ */
+ lprocfs_reg_obd(dev, (lprocfs_vars_t*)status_var_nm_1, (void*)dev);
+ return 0;
+}
+
+int ost_detach(struct obd_device *dev)
+{
+ /* lprocfs_dereg_dev(dev); */
+ lprocfs_dereg_obd(dev);
+ return 0;
+
+}
+
+
/* use obd ops to offer management infrastructure */
static struct obd_ops ost_obd_ops = {
+ o_attach: ost_attach,
+ o_detach: ost_detach,
o_setup: ost_setup,
o_cleanup: ost_cleanup,
};
static int __init ost_init(void)
{
- class_register_type(&ost_obd_ops, LUSTRE_OST_NAME);
+ int rc;
+
+ rc = class_register_type(&ost_obd_ops,
+ (lprocfs_vars_t*)status_class_var,
+ LUSTRE_OST_NAME);
+ if (rc) RETURN(rc);
+
return 0;
+
}
static void __exit ost_exit(void)
{
+
class_unregister_type(LUSTRE_OST_NAME);
}