EXPORT_SYMBOL(obd_memory);
#endif
+char obd_jobid_node[LUSTRE_JOBID_SIZE + 1];
+
/* Get jobid of current process by reading the environment variable
* stored in between the "env_start" & "env_end" of task struct.
*
if (strcmp(obd_jobid_var, JOBSTATS_DISABLE) == 0)
RETURN(0);
+ /* Whole node dedicated to single job */
+ if (strcmp(obd_jobid_var, JOBSTATS_NODELOCAL) == 0) {
+ memcpy(jobid, obd_jobid_node, LUSTRE_JOBID_SIZE);
+ RETURN(0);
+ }
+
/* Use process name + fsuid as jobid */
if (strcmp(obd_jobid_var, JOBSTATS_PROCNAME_UID) == 0) {
snprintf(jobid, LUSTRE_JOBID_SIZE, "%s.%u",
static int obd_proc_jobid_var_seq_show(struct seq_file *m, void *v)
{
- return seq_printf(m, "%s\n", obd_jobid_var);
+ if (strlen(obd_jobid_var) != 0)
+ seq_printf(m, "%s\n", obd_jobid_var);
+ return 0;
}
static ssize_t
}
LPROC_SEQ_FOPS(obd_proc_jobid_var);
+static int obd_proc_jobid_name_seq_show(struct seq_file *m, void *v)
+{
+ if (strlen(obd_jobid_node) != 0)
+ seq_printf(m, "%s\n", obd_jobid_node);
+ return 0;
+}
+
+static ssize_t obd_proc_jobid_name_seq_write(struct file *file,
+ const char __user *buffer,
+ size_t count, loff_t *off)
+{
+ if (count == 0 || count > LUSTRE_JOBID_SIZE)
+ return -EINVAL;
+
+ /* clear previous value */
+ memset(obd_jobid_node, 0, LUSTRE_JOBID_SIZE);
+
+ if (copy_from_user(obd_jobid_node, buffer, count))
+ return -EFAULT;
+
+ /* Trim the trailing '\n' if any */
+ if (obd_jobid_node[count - 1] == '\n') {
+ /* Don't echo just a newline */
+ if (count == 1)
+ return -EINVAL;
+ obd_jobid_node[count - 1] = 0;
+ }
+
+ return count;
+}
+LPROC_SEQ_FOPS(obd_proc_jobid_name);
+
/* Root for /proc/fs/lustre */
struct proc_dir_entry *proc_lustre_root = NULL;
EXPORT_SYMBOL(proc_lustre_root);
.fops = &obd_proc_health_fops },
{ .name = "jobid_var",
.fops = &obd_proc_jobid_var_fops},
+ { .name = "jobid_name",
+ .fops = &obd_proc_jobid_name_fops},
{ NULL }
};
#else
elif [ -n "$JOB_ID" ]; then # Sun Grid Engine
JOBENV=JOB_ID
else
- JOBENV=FAKE_JOBID
+ $LCTL list_param jobid_name > /dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ JOBENV=nodelocal
+ else
+ JOBENV=FAKE_JOBID
+ fi
fi
verify_jobstats() {
FAKE_JOBID=id.$testnum.$(basename ${cmd[0]}).$RANDOM
JOBVAL=${!JOBENV}
+
+ [ "$JOBENV" = "nodelocal" ] && {
+ FAKE_JOBID=id.$testnum.$(basename ${cmd[0]}).$RANDOM
+ $LCTL set_param jobid_name=$FAKE_JOBID
+ JOBVAL=$FAKE_JOBID
+ }
+
log "Test: ${cmd[*]}"
log "Using JobID environment variable $JOBENV=$JOBVAL"