/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright (c) 2011, Whamcloud, Inc.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#include <obd.h>
#include <obd_class.h>
-#include <lu_target.h>
#include <dt_object.h>
#include <md_object.h>
#include <obd_support.h>
* Ask client for new range, assign that range to ->seq_space and write
* seq state to backing store should be atomic.
*/
- cfs_down(&seq->lss_sem);
+ cfs_mutex_lock(&seq->lss_mutex);
if (cli == NULL) {
CDEBUG(D_INFO, "%s: Detached sequence client %s\n",
cli->lcs_space.lsr_index = seq->lss_site->ms_node_id;
EXIT;
out_up:
- cfs_up(&seq->lss_sem);
+ cfs_mutex_unlock(&seq->lss_mutex);
return rc;
}
EXPORT_SYMBOL(seq_server_set_cli);
int rc;
ENTRY;
- cfs_down(&seq->lss_sem);
+ cfs_mutex_lock(&seq->lss_mutex);
rc = __seq_server_alloc_super(seq, out, env);
- cfs_up(&seq->lss_sem);
+ cfs_mutex_unlock(&seq->lss_mutex);
RETURN(rc);
}
range_alloc(&seq->lss_hiwater_set, space, seq->lss_set_width);
rc = seq_store_update(env, seq, NULL, 1);
- seq->lss_set_transno = 0;
return rc;
}
if (range_is_exhausted(loset)) {
/* reached high water mark. */
struct lu_device *dev = seq->lss_site->ms_lu.ls_top_dev;
- struct lu_target *tg = dev->ld_obd->u.obt.obt_lut;
int obd_num_clients = dev->ld_obd->obd_num_exports;
__u64 set_sz;
- int sync = 0;
/* calculate new seq width based on number of clients */
set_sz = max(seq->lss_set_width,
- obd_num_clients * seq->lss_width);
+ obd_num_clients * seq->lss_width);
set_sz = min(range_space(space), set_sz);
/* Switch to hiwater range now */
- loset = hiset;
+ *loset = *hiset;
/* allocate new hiwater range */
range_alloc(hiset, space, set_sz);
- if (seq->lss_set_transno > dev->ld_obd->obd_last_committed)
- sync = 1;
-
/* update ondisk seq with new *space */
- rc = seq_store_update(env, seq, NULL, sync);
-
- /* set new hiwater transno */
- cfs_spin_lock(&tg->lut_translock);
- seq->lss_set_transno = tg->lut_last_transno;
- cfs_spin_unlock(&tg->lut_translock);
+ rc = seq_store_update(env, seq, NULL, seq->lss_need_sync);
}
LASSERTF(!range_is_exhausted(loset) || range_is_sane(loset),
int rc;
ENTRY;
- cfs_down(&seq->lss_sem);
+ cfs_mutex_lock(&seq->lss_mutex);
rc = __seq_server_alloc_meta(seq, out, env);
- cfs_up(&seq->lss_sem);
+ cfs_mutex_unlock(&seq->lss_mutex);
RETURN(rc);
}
range_init(&seq->lss_hiwater_set);
seq->lss_set_width = LUSTRE_SEQ_BATCH_WIDTH;
- cfs_sema_init(&seq->lss_sem, 1);
+ cfs_mutex_init(&seq->lss_mutex);
seq->lss_width = is_srv ?
LUSTRE_SEQ_META_WIDTH : LUSTRE_SEQ_SUPER_WIDTH;