*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
*
* GPL HEADER END
*/
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2013, Intel Corporation.
+ * Copyright (c) 2011, 2015, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#define DEBUG_SUBSYSTEM S_LOG
-#ifndef __KERNEL__
-#include <liblustre.h>
-#endif
-
#include <obd_class.h>
#include <lu_target.h>
#include <lustre_log.h>
#include <lustre_net.h>
-#if defined(__KERNEL__) && defined(LUSTRE_LOG_SERVER)
static int llog_origin_close(const struct lu_env *env, struct llog_handle *lgh)
{
if (lgh->lgh_hdr != NULL && lgh->lgh_hdr->llh_flags & LLOG_F_IS_CAT)
CDEBUG(D_INFO, "%s: opening log %s\n", obd->obd_name, name);
}
+ if (body->lgd_ctxt_idx >= LLOG_MAX_CTXTS) {
+ CDEBUG(D_WARNING, "%s: bad ctxt ID: idx=%d name=%s\n",
+ obd->obd_name, body->lgd_ctxt_idx, name);
+ RETURN(-EPROTO);
+ }
+
ctxt = llog_get_context(obd, body->lgd_ctxt_idx);
if (ctxt == NULL) {
CDEBUG(D_WARNING, "%s: no ctxt. group=%p idx=%d name=%s\n",
llog_ctxt_put(ctxt);
return rc;
}
-EXPORT_SYMBOL(llog_origin_handle_open);
int llog_origin_handle_destroy(struct ptlrpc_request *req)
{
CERROR("%s: wrong llog flags %x\n",
req->rq_export->exp_obd->obd_name, body->lgd_llh_flags);
+ if (body->lgd_ctxt_idx >= LLOG_MAX_CTXTS) {
+ CDEBUG(D_WARNING, "%s: bad ctxt ID: idx=%d\n",
+ req->rq_export->exp_obd->obd_name, body->lgd_ctxt_idx);
+ RETURN(-EPROTO);
+ }
+
ctxt = llog_get_context(req->rq_export->exp_obd, body->lgd_ctxt_idx);
if (ctxt == NULL)
RETURN(-ENODEV);
llog_ctxt_put(ctxt);
RETURN(rc);
}
-EXPORT_SYMBOL(llog_origin_handle_destroy);
int llog_origin_handle_next_block(struct ptlrpc_request *req)
{
RETURN(err_serious(-EFAULT));
req_capsule_set_size(&req->rq_pill, &RMF_EADATA, RCL_SERVER,
- LLOG_CHUNK_SIZE);
+ LLOG_MIN_CHUNK_SIZE);
rc = req_capsule_server_pack(&req->rq_pill);
if (rc)
RETURN(err_serious(-ENOMEM));
+ if (body->lgd_ctxt_idx >= LLOG_MAX_CTXTS) {
+ CDEBUG(D_WARNING, "%s: bad ctxt ID: idx=%d\n",
+ req->rq_export->exp_obd->obd_name, body->lgd_ctxt_idx);
+ RETURN(-EPROTO);
+ }
+
ctxt = llog_get_context(req->rq_export->exp_obd, body->lgd_ctxt_idx);
if (ctxt == NULL)
RETURN(-ENODEV);
ptr = req_capsule_server_get(&req->rq_pill, &RMF_EADATA);
rc = llog_next_block(req->rq_svc_thread->t_env, loghandle,
&repbody->lgd_saved_index, repbody->lgd_index,
- &repbody->lgd_cur_offset, ptr, LLOG_CHUNK_SIZE);
+ &repbody->lgd_cur_offset, ptr,
+ LLOG_MIN_CHUNK_SIZE);
if (rc)
GOTO(out_close, rc);
EXIT;
llog_ctxt_put(ctxt);
return rc;
}
-EXPORT_SYMBOL(llog_origin_handle_next_block);
int llog_origin_handle_prev_block(struct ptlrpc_request *req)
{
RETURN(err_serious(-EFAULT));
req_capsule_set_size(&req->rq_pill, &RMF_EADATA, RCL_SERVER,
- LLOG_CHUNK_SIZE);
+ LLOG_MIN_CHUNK_SIZE);
rc = req_capsule_server_pack(&req->rq_pill);
if (rc)
RETURN(err_serious(-ENOMEM));
+ if (body->lgd_ctxt_idx >= LLOG_MAX_CTXTS) {
+ CDEBUG(D_WARNING, "%s: bad ctxt ID: idx=%d\n",
+ req->rq_export->exp_obd->obd_name, body->lgd_ctxt_idx);
+ RETURN(-EPROTO);
+ }
+
ctxt = llog_get_context(req->rq_export->exp_obd, body->lgd_ctxt_idx);
if (ctxt == NULL)
RETURN(-ENODEV);
ptr = req_capsule_server_get(&req->rq_pill, &RMF_EADATA);
rc = llog_prev_block(req->rq_svc_thread->t_env, loghandle,
- body->lgd_index, ptr, LLOG_CHUNK_SIZE);
+ body->lgd_index, ptr, LLOG_MIN_CHUNK_SIZE);
if (rc)
GOTO(out_close, rc);
llog_ctxt_put(ctxt);
return rc;
}
-EXPORT_SYMBOL(llog_origin_handle_prev_block);
int llog_origin_handle_read_header(struct ptlrpc_request *req)
{
if (rc)
RETURN(err_serious(-ENOMEM));
+ if (body->lgd_ctxt_idx >= LLOG_MAX_CTXTS) {
+ CDEBUG(D_WARNING, "%s: bad ctxt ID: idx=%d\n",
+ req->rq_export->exp_obd->obd_name, body->lgd_ctxt_idx);
+ RETURN(-EPROTO);
+ }
+
ctxt = llog_get_context(req->rq_export->exp_obd, body->lgd_ctxt_idx);
if (ctxt == NULL)
RETURN(-ENODEV);
llog_ctxt_put(ctxt);
return rc;
}
-EXPORT_SYMBOL(llog_origin_handle_read_header);
int llog_origin_handle_close(struct ptlrpc_request *req)
{
RETURN(err_serious(-ENOMEM));
RETURN(0);
}
-EXPORT_SYMBOL(llog_origin_handle_close);
-
-#else /* !__KERNEL__ */
-int llog_origin_handle_open(struct ptlrpc_request *req)
-{
- LBUG();
- return 0;
-}
-
-int llog_origin_handle_destroy(struct ptlrpc_request *req)
-{
- LBUG();
- return 0;
-}
-
-int llog_origin_handle_next_block(struct ptlrpc_request *req)
-{
- LBUG();
- return 0;
-}
-int llog_origin_handle_prev_block(struct ptlrpc_request *req)
-{
- LBUG();
- return 0;
-}
-int llog_origin_handle_read_header(struct ptlrpc_request *req)
-{
- LBUG();
- return 0;
-}
-int llog_origin_handle_close(struct ptlrpc_request *req)
-{
- LBUG();
- return 0;
-}
-#endif