* in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see [sun.com URL with a
- * copy of GPLv2].
+ * 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
struct llog_cookie *logcookies, int numcookies);
int llog_cat_initialize(struct obd_device *obd, struct obd_llog_group *olg,
- int count, struct obd_uuid *uuid);
+ int idx, struct obd_uuid *uuid);
int obd_llog_init(struct obd_device *obd, struct obd_llog_group *olg,
struct obd_device *disk_obd, int count,
struct llog_catid *logid, struct obd_uuid *uuid);
/* llog_net.c */
int llog_initiator_connect(struct llog_ctxt *ctxt);
int llog_receptor_accept(struct llog_ctxt *ctxt, struct obd_import *imp);
-int llog_origin_connect(struct llog_ctxt *ctxt, int count,
+int llog_origin_connect(struct llog_ctxt *ctxt,
struct llog_logid *logid, struct llog_gen *gen,
struct obd_uuid *uuid);
int llog_handle_connect(struct ptlrpc_request *req);
struct lov_stripe_md *lsm, int count,
struct llog_cookie *cookies, int flags);
int llog_obd_repl_sync(struct llog_ctxt *ctxt, struct obd_export *exp);
-int llog_obd_repl_connect(struct llog_ctxt *ctxt, int count,
+int llog_obd_repl_connect(struct llog_ctxt *ctxt,
struct llog_logid *logid, struct llog_gen *gen,
struct obd_uuid *uuid);
struct llog_cookie *logcookies, int numcookies);
int (*lop_cancel)(struct llog_ctxt *ctxt, struct lov_stripe_md *lsm,
int count, struct llog_cookie *cookies, int flags);
- int (*lop_connect)(struct llog_ctxt *ctxt, int count,
+ int (*lop_connect)(struct llog_ctxt *ctxt,
struct llog_logid *logid, struct llog_gen *gen,
struct obd_uuid *uuid);
/* XXX add 2 more: commit callbacks and llog recovery functions */
/* llog_lvfs.c */
extern struct llog_operations llog_lvfs_ops;
int llog_get_cat_list(struct obd_device *obd, struct obd_device *disk_obd,
- char *name, int count, struct llog_catid *idarray);
+ char *name, int idx, int count,
+ struct llog_catid *idarray);
+
+int llog_put_cat_list(struct obd_device *obd, struct obd_device *disk_obd,
+ char *name, int idx, int count, struct llog_catid *idarray);
struct llog_ctxt {
int loc_idx; /* my index the obd array of ctxt's */
*/
struct ptlrpcd_ctl lcm_pc;
/**
+ * Busy resources waitq
+ */
+ cfs_waitq_t lcm_waitq;
+ /**
* Commit thread name buffer. Only used for thread start.
*/
char lcm_name[LCM_NAME_SIZE];
extern void llog_recov_thread_stop(struct llog_commit_master *lcm,
int force);
-#ifndef __KERNEL__
-
-#define cap_raise(c, flag) do {} while(0)
-
-#define CAP_SYS_RESOURCE 24
-
-#endif /* !__KERNEL__ */
-
static inline void llog_gen_init(struct llog_ctxt *ctxt)
{
struct obd_device *obd = ctxt->loc_exp->exp_obd;
{
cfs_waitq_init(&olg->olg_waitq);
spin_lock_init(&olg->olg_lock);
+ sema_init(&olg->olg_cat_processing, 1);
olg->olg_group = group;
}
int numcookies, void *buf, int idx)
{
struct llog_operations *lop;
- __u32 cap;
- int rc, buflen;
+ int raised, rc, buflen;
ENTRY;
rc = llog_handle2ops(handle, &lop);
buflen = rec->lrh_len;
LASSERT(size_round(buflen) == buflen);
- cap = current->cap_effective;
- cap_raise(current->cap_effective, CAP_SYS_RESOURCE);
+ raised = cfs_cap_raised(CFS_CAP_SYS_RESOURCE);
+ if (!raised)
+ cfs_cap_raise(CFS_CAP_SYS_RESOURCE);
rc = lop->lop_write_rec(handle, rec, logcookies, numcookies, buf, idx);
- current->cap_effective = cap;
+ if (!raised)
+ cfs_cap_lower(CFS_CAP_SYS_RESOURCE);
RETURN(rc);
}
struct llog_logid *logid, char *name)
{
struct llog_operations *lop;
- __u32 cap;
- int rc;
+ int raised, rc;
ENTRY;
rc = llog_obd2ops(ctxt, &lop);
if (lop->lop_create == NULL)
RETURN(-EOPNOTSUPP);
- cap = current->cap_effective;
- cap_raise(current->cap_effective, CAP_SYS_RESOURCE);
+ raised = cfs_cap_raised(CFS_CAP_SYS_RESOURCE);
+ if (!raised)
+ cfs_cap_raise(CFS_CAP_SYS_RESOURCE);
rc = lop->lop_create(ctxt, res, logid, name);
- current->cap_effective = cap;
+ if (!raised)
+ cfs_cap_lower(CFS_CAP_SYS_RESOURCE);
RETURN(rc);
}
-static inline int llog_connect(struct llog_ctxt *ctxt, int count,
+static inline int llog_connect(struct llog_ctxt *ctxt,
struct llog_logid *logid, struct llog_gen *gen,
struct obd_uuid *uuid)
{
if (lop->lop_connect == NULL)
RETURN(-EOPNOTSUPP);
- rc = lop->lop_connect(ctxt, count, logid, gen, uuid);
+ rc = lop->lop_connect(ctxt, logid, gen, uuid);
RETURN(rc);
}