X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fobdclass%2Fllog_cat.c;h=54e911f17293f65d71559e75882ee36d741c78bd;hp=de05bb6b3773dec859dbf7a529c8c35245b90115;hb=6fb209991e80cf71d97ad566d1a757e4a31466e0;hpb=6e3ec5812ebd1b5ecf7cae584f429b013ffe7431 diff --git a/lustre/obdclass/llog_cat.c b/lustre/obdclass/llog_cat.c index de05bb6..54e911f 100644 --- a/lustre/obdclass/llog_cat.c +++ b/lustre/obdclass/llog_cat.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -26,7 +24,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -46,10 +44,6 @@ #define DEBUG_SUBSYSTEM S_LOG -#ifndef EXPORT_SYMTAB -#define EXPORT_SYMTAB -#endif - #ifndef __KERNEL__ #include #endif @@ -97,13 +91,18 @@ static struct llog_handle *llog_cat_new_log(struct llog_handle *cathandle) if (index == 0) index = 1; + + cfs_spin_lock(&loghandle->lgh_hdr_lock); + llh->llh_count++; if (ext2_set_bit(index, llh->llh_bitmap)) { CERROR("argh, index %u already set in log bitmap?\n", index); + cfs_spin_unlock(&loghandle->lgh_hdr_lock); LBUG(); /* should never happen */ } + cfs_spin_unlock(&loghandle->lgh_hdr_lock); + cathandle->lgh_last_idx = index; - llh->llh_count++; llh->llh_tail.lrt_index = index; CDEBUG(D_RPCTRACE,"new recovery log "LPX64":%x for index %u of catalog " @@ -394,18 +393,20 @@ int llog_cat_process_cb(struct llog_handle *cat_llh, struct llog_rec_hdr *rec, cd.lpcd_first_idx = d->lpd_startidx; cd.lpcd_last_idx = 0; - rc = llog_process(llh, d->lpd_cb, d->lpd_data, &cd); + rc = llog_process_flags(llh, d->lpd_cb, d->lpd_data, &cd, + d->lpd_flags); /* Continue processing the next log from idx 0 */ d->lpd_startidx = 0; } else { - rc = llog_process(llh, d->lpd_cb, d->lpd_data, NULL); + rc = llog_process_flags(llh, d->lpd_cb, d->lpd_data, NULL, + d->lpd_flags); } RETURN(rc); } -int llog_cat_process(struct llog_handle *cat_llh, llog_cb_t cb, void *data, - int startcat, int startidx) +int llog_cat_process_flags(struct llog_handle *cat_llh, llog_cb_t cb, + void *data, int flags, int startcat, int startidx) { struct llog_process_data d; struct llog_log_hdr *llh = cat_llh->lgh_hdr; @@ -417,6 +418,7 @@ int llog_cat_process(struct llog_handle *cat_llh, llog_cb_t cb, void *data, d.lpd_cb = cb; d.lpd_startcat = startcat; d.lpd_startidx = startidx; + d.lpd_flags = flags; if (llh->llh_cat_idx > cat_llh->lgh_last_idx) { struct llog_process_cat_data cd; @@ -426,19 +428,29 @@ int llog_cat_process(struct llog_handle *cat_llh, llog_cb_t cb, void *data, cd.lpcd_first_idx = llh->llh_cat_idx; cd.lpcd_last_idx = 0; - rc = llog_process(cat_llh, llog_cat_process_cb, &d, &cd); + rc = llog_process_flags(cat_llh, llog_cat_process_cb, &d, &cd, + flags); if (rc != 0) RETURN(rc); cd.lpcd_first_idx = 0; cd.lpcd_last_idx = cat_llh->lgh_last_idx; - rc = llog_process(cat_llh, llog_cat_process_cb, &d, &cd); + rc = llog_process_flags(cat_llh, llog_cat_process_cb, &d, &cd, + flags); } else { - rc = llog_process(cat_llh, llog_cat_process_cb, &d, NULL); + rc = llog_process_flags(cat_llh, llog_cat_process_cb, &d, NULL, + flags); } RETURN(rc); } +EXPORT_SYMBOL(llog_cat_process_flags); + +int llog_cat_process(struct llog_handle *cat_llh, llog_cb_t cb, void *data, + int startcat, int startidx) +{ + return llog_cat_process_flags(cat_llh, cb, data, 0, startcat, startidx); +} EXPORT_SYMBOL(llog_cat_process); #ifdef __KERNEL__ @@ -478,7 +490,7 @@ int llog_cat_process_thread(void *data) /* * Make sure that all cached data is sent. */ - llog_sync(ctxt, NULL); + llog_sync(ctxt, NULL, 0); GOTO(release_llh, rc); release_llh: rc = llog_cat_put(llh);