X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlbd%2Fserver.c;h=e54e5b34f368d9c89bcd54e92ff5a168c22e19db;hb=f00e58db820398abb5cb7a9dc1cc9a21e56342c4;hp=793354d07d79ec11f58b5c6f4ea82ef78faa1cce;hpb=040033cef24c5aca2967daf2da7a862abcd074cf;p=fs%2Flustre-release.git diff --git a/lustre/ptlbd/server.c b/lustre/ptlbd/server.c index 793354d..e54e5b3 100644 --- a/lustre/ptlbd/server.c +++ b/lustre/ptlbd/server.c @@ -32,30 +32,46 @@ #include #include +#define BACKING_FILE "/tmp/ptlbd-backing-file-la-la-la" + static int ptlbd_sv_already_setup = 1; -static int ptlbd_sv_setup(struct obd_device *obddev, obd_count len, void *buf) +static int ptlbd_sv_attach(struct obd_device *obd, obd_count len, void *buf) +{ + struct lprocfs_static_vars lvars; + + lprocfs_init_vars(ptlbd_sv, &lvars); + return lprocfs_obd_attach(obd, lvars.obd_vars); +} + +static int ptlbd_sv_detach(struct obd_device *obd) { - struct ptlbd_obd *ptlbd = &obddev->u.ptlbd; + return lprocfs_obd_detach(obd); +} + +static int ptlbd_sv_setup(struct obd_device *obd, obd_count len, void *buf) +{ + struct ptlbd_obd *ptlbd = &obd->u.ptlbd; int rc; ENTRY; - ptlbd->filp = filp_open("/tmp/ptlbd-backing-file-la-la-la", - O_RDWR|O_CREAT, 0600); + ptlbd->filp = filp_open(BACKING_FILE, + O_RDWR|O_CREAT|O_LARGEFILE, 0600); + if ( IS_ERR(ptlbd->filp) ) RETURN(PTR_ERR(ptlbd->filp)); ptlbd->ptlbd_service = - ptlrpc_init_svc(PTLBD_NEVENTS, PTLBD_NBUFS, PTLBD_BUFSIZE, - PTLBD_MAXREQSIZE, PTLBD_REQUEST_PORTAL, - PTLBD_REPLY_PORTAL, - ptlbd_parse_req, "ptlbd_sv"); + ptlrpc_init_svc(PTLBD_NBUFS, PTLBD_BUFSIZE, PTLBD_MAXREQSIZE, + PTLBD_REQUEST_PORTAL, PTLBD_REPLY_PORTAL, + ptlbd_handle, "ptlbd_sv", + obd->obd_proc_entry); - if (ptlbd->ptlbd_service == NULL) + if (ptlbd->ptlbd_service == NULL) GOTO(out_filp, rc = -ENOMEM); - rc = ptlrpc_start_thread(obddev, ptlbd->ptlbd_service, "ptldb"); - if (rc != 0) + rc = ptlrpc_start_n_threads(obd, ptlbd->ptlbd_service, 1, "ptldb"); + if (rc != 0) GOTO(out_thread, rc); ptlbd_sv_already_setup = 1; @@ -63,21 +79,18 @@ static int ptlbd_sv_setup(struct obd_device *obddev, obd_count len, void *buf) RETURN(0); out_thread: - ptlrpc_stop_all_threads(ptlbd->ptlbd_service); ptlrpc_unregister_service(ptlbd->ptlbd_service); out_filp: filp_close(ptlbd->filp, NULL); - RETURN(rc); } -static int ptlbd_sv_cleanup(struct obd_device *obddev) +static int ptlbd_sv_cleanup(struct obd_device *obd, int flags) { - struct ptlbd_obd *ptlbd = &obddev->u.ptlbd; + struct ptlbd_obd *ptlbd = &obd->u.ptlbd; ENTRY; /* XXX check for state */ - ptlrpc_stop_all_threads(ptlbd->ptlbd_service); ptlrpc_unregister_service(ptlbd->ptlbd_service); if ( ! IS_ERR(ptlbd->filp) ) @@ -87,18 +100,35 @@ static int ptlbd_sv_cleanup(struct obd_device *obddev) RETURN(0); } +static int ptlbd_connect(struct lustre_handle *conn, struct obd_device *obd, + struct obd_uuid *cluuid, unsigned long connect_flags) +{ + int rc; + + rc = class_connect(conn, obd, cluuid); + RETURN(rc); +} + static struct obd_ops ptlbd_sv_obd_ops = { - o_owner: THIS_MODULE, - o_setup: ptlbd_sv_setup, - o_cleanup: ptlbd_sv_cleanup, + .o_owner = THIS_MODULE, + .o_attach = ptlbd_sv_attach, + .o_detach = ptlbd_sv_detach, + .o_setup = ptlbd_sv_setup, + .o_cleanup = ptlbd_sv_cleanup, + .o_connect = ptlbd_connect, + .o_disconnect = class_disconnect, }; +static struct lprocfs_vars lprocfs_obd_vars[] = { {0} }; +static struct lprocfs_vars lprocfs_module_vars[] = { {0} }; +LPROCFS_INIT_VARS(ptlbd_sv, lprocfs_module_vars, lprocfs_obd_vars) + int ptlbd_sv_init(void) { struct lprocfs_static_vars lvars; - lprocfs_init_vars(&lvars); - return class_register_type(&ptlbd_sv_obd_ops, lvars.module_vars, + lprocfs_init_vars(ptlbd_sv,&lvars); + return class_register_type(&ptlbd_sv_obd_ops, NULL, lvars.module_vars, OBD_PTLBD_SV_DEVICENAME); }