#ifdef HAVE_SERVER_SUPPORT
#define DEBUG_SUBSYSTEM S_RPC
-#ifndef __KERNEL__
-#include <liblustre.h>
-#endif
#include <obd_support.h>
#include <obd_class.h>
#include <lustre_net.h>
return cfs_hash_djb2_hash(key, sizeof(lnet_nid_t), mask);
}
-static int nrs_crrn_hop_keycmp(const void *key, cfs_hlist_node_t *hnode)
+static int nrs_crrn_hop_keycmp(const void *key, struct hlist_node *hnode)
{
lnet_nid_t *nid = (lnet_nid_t *)key;
- struct nrs_crrn_client *cli = cfs_hlist_entry(hnode,
+ struct nrs_crrn_client *cli = hlist_entry(hnode,
struct nrs_crrn_client,
cc_hnode);
return *nid == cli->cc_nid;
}
-static void *nrs_crrn_hop_key(cfs_hlist_node_t *hnode)
+static void *nrs_crrn_hop_key(struct hlist_node *hnode)
{
- struct nrs_crrn_client *cli = cfs_hlist_entry(hnode,
+ struct nrs_crrn_client *cli = hlist_entry(hnode,
struct nrs_crrn_client,
cc_hnode);
return &cli->cc_nid;
}
-static void *nrs_crrn_hop_object(cfs_hlist_node_t *hnode)
+static void *nrs_crrn_hop_object(struct hlist_node *hnode)
{
- return cfs_hlist_entry(hnode, struct nrs_crrn_client, cc_hnode);
+ return hlist_entry(hnode, struct nrs_crrn_client, cc_hnode);
}
-static void nrs_crrn_hop_get(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+static void nrs_crrn_hop_get(cfs_hash_t *hs, struct hlist_node *hnode)
{
- struct nrs_crrn_client *cli = cfs_hlist_entry(hnode,
+ struct nrs_crrn_client *cli = hlist_entry(hnode,
struct nrs_crrn_client,
cc_hnode);
- cfs_atomic_inc(&cli->cc_ref);
+ atomic_inc(&cli->cc_ref);
}
-static void nrs_crrn_hop_put(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+static void nrs_crrn_hop_put(cfs_hash_t *hs, struct hlist_node *hnode)
{
- struct nrs_crrn_client *cli = cfs_hlist_entry(hnode,
+ struct nrs_crrn_client *cli = hlist_entry(hnode,
struct nrs_crrn_client,
cc_hnode);
- cfs_atomic_dec(&cli->cc_ref);
+ atomic_dec(&cli->cc_ref);
}
-static void nrs_crrn_hop_exit(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+static void nrs_crrn_hop_exit(cfs_hash_t *hs, struct hlist_node *hnode)
{
- struct nrs_crrn_client *cli = cfs_hlist_entry(hnode,
+ struct nrs_crrn_client *cli = hlist_entry(hnode,
struct nrs_crrn_client,
cc_hnode);
- LASSERTF(cfs_atomic_read(&cli->cc_ref) == 0,
+ LASSERTF(atomic_read(&cli->cc_ref) == 0,
"Busy CRR-N object from client with NID %s, with %d refs\n",
- libcfs_nid2str(cli->cc_nid), cfs_atomic_read(&cli->cc_ref));
+ libcfs_nid2str(cli->cc_nid), atomic_read(&cli->cc_ref));
OBD_FREE_PTR(cli);
}
* \retval -ENOMEM OOM error
* \retval 0 success
*/
-static int nrs_crrn_start(struct ptlrpc_nrs_policy *policy)
+static int nrs_crrn_start(struct ptlrpc_nrs_policy *policy, char *arg)
{
struct nrs_crrn_net *net;
int rc = 0;
* with the default max_rpcs_in_flight value, as we are scheduling over
* NIDs, and there may be more than one mount point per client.
*/
- net->cn_quantum = OSC_MAX_RIF_DEFAULT;
+ net->cn_quantum = OBD_MAX_RIF_DEFAULT;
/**
* Set to 1 so that the test inside nrs_crrn_req_add() can evaluate to
* true.
* \param[in] opc the opcode
* \param[in,out] arg used for passing parameters and information
*
- * \pre spin_is_locked(&policy->pol_nrs->->nrs_lock)
- * \post spin_is_locked(&policy->pol_nrs->->nrs_lock)
+ * \pre assert_spin_locked(&policy->pol_nrs->->nrs_lock)
+ * \post assert_spin_locked(&policy->pol_nrs->->nrs_lock)
*
* \retval 0 operation carried out successfully
* \retval -ve error
int nrs_crrn_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc,
void *arg)
{
- LASSERT(spin_is_locked(&policy->pol_nrs->nrs_lock));
+ assert_spin_locked(&policy->pol_nrs->nrs_lock);
- switch(opc) {
+ switch((enum nrs_ctl_crr)opc) {
default:
RETURN(-EINVAL);
goto out;
OBD_CPT_ALLOC_GFP(cli, nrs_pol2cptab(policy), nrs_pol2cptid(policy),
- sizeof(*cli), moving_req ? CFS_ALLOC_ATOMIC :
- CFS_ALLOC_IO);
+ sizeof(*cli), moving_req ? GFP_ATOMIC : GFP_NOFS);
if (cli == NULL)
return -ENOMEM;
cli->cc_nid = req->rq_peer.nid;
- cfs_atomic_set(&cli->cc_ref, 1);
+ atomic_set(&cli->cc_ref, 1);
tmp = cfs_hash_findadd_unique(net->cn_cli_hash, &cli->cc_nid,
&cli->cc_hnode);
if (tmp != cli) {
* reg_quantum:8
* hp_quantum:4
*/
-static int ptlrpc_lprocfs_rd_nrs_crrn_quantum(char *page, char **start,
- off_t off, int count, int *eof,
- void *data)
+static int
+ptlrpc_lprocfs_nrs_crrn_quantum_seq_show(struct seq_file *m, void *data)
{
- struct ptlrpc_service *svc = data;
- __u16 quantum;
- int rc;
- int rc2 = 0;
+ struct ptlrpc_service *svc = m->private;
+ __u16 quantum;
+ int rc;
/**
* Perform two separate calls to this as only one of the NRS heads'
NRS_CTL_CRRN_RD_QUANTUM,
true, &quantum);
if (rc == 0) {
- *eof = 1;
- rc2 = snprintf(page, count, NRS_LPROCFS_QUANTUM_NAME_REG
- "%-5d\n", quantum);
+ seq_printf(m, NRS_LPROCFS_QUANTUM_NAME_REG
+ "%-5d\n", quantum);
/**
* Ignore -ENODEV as the regular NRS head's policy may be in the
* ptlrpc_nrs_pol_state::NRS_POL_STATE_STOPPED state.
NRS_CTL_CRRN_RD_QUANTUM,
true, &quantum);
if (rc == 0) {
- *eof = 1;
- rc2 += snprintf(page + rc2, count - rc2,
- NRS_LPROCFS_QUANTUM_NAME_HP"%-5d\n", quantum);
+ seq_printf(m, NRS_LPROCFS_QUANTUM_NAME_HP"%-5d\n", quantum);
/**
* Ignore -ENODEV as the high priority NRS head's policy may be
* in the ptlrpc_nrs_pol_state::NRS_POL_STATE_STOPPED state.
}
no_hp:
-
- return rc2 ? : rc;
+ return rc;
}
/**
* policy instances in the ptlrpc_nrs_pol_state::NRS_POL_STATE_STOPPED state
* are skipped later by nrs_crrn_ctl().
*/
-static int ptlrpc_lprocfs_wr_nrs_crrn_quantum(struct file *file,
- const char *buffer,
- unsigned long count, void *data)
+static ssize_t
+ptlrpc_lprocfs_nrs_crrn_quantum_seq_write(struct file *file,
+ const char *buffer, size_t count,
+ loff_t *off)
{
- struct ptlrpc_service *svc = data;
+ struct ptlrpc_service *svc = ((struct seq_file *)file->private_data)->private;
enum ptlrpc_nrs_queue_type queue = 0;
char kernbuf[LPROCFS_NRS_WR_QUANTUM_MAX_CMD];
char *val;
long quantum_reg;
long quantum_hp;
/** lprocfs_find_named_value() modifies its argument, so keep a copy */
- unsigned long count_copy;
+ size_t count_copy;
int rc = 0;
int rc2 = 0;
if (count > (sizeof(kernbuf) - 1))
return -EINVAL;
- if (cfs_copy_from_user(kernbuf, buffer, count))
+ if (copy_from_user(kernbuf, buffer, count))
return -EFAULT;
kernbuf[count] = '\0';
return rc == -ENODEV && rc2 == -ENODEV ? -ENODEV : count;
}
+LPROC_SEQ_FOPS(ptlrpc_lprocfs_nrs_crrn_quantum);
/**
* Initializes a CRR-N policy's lprocfs interface for service \a svc
*/
int nrs_crrn_lprocfs_init(struct ptlrpc_service *svc)
{
- int rc;
-
- struct lprocfs_vars nrs_crrn_lprocfs_vars[] = {
+ struct lprocfs_seq_vars nrs_crrn_lprocfs_vars[] = {
{ .name = "nrs_crrn_quantum",
- .read_fptr = ptlrpc_lprocfs_rd_nrs_crrn_quantum,
- .write_fptr = ptlrpc_lprocfs_wr_nrs_crrn_quantum,
+ .fops = &ptlrpc_lprocfs_nrs_crrn_quantum_fops,
.data = svc },
{ NULL }
};
if (svc->srv_procroot == NULL)
return 0;
- rc = lprocfs_add_vars(svc->srv_procroot, nrs_crrn_lprocfs_vars, NULL);
-
- return rc;
+ return lprocfs_seq_add_vars(svc->srv_procroot, nrs_crrn_lprocfs_vars,
+ NULL);
}
/**