* GPL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2002, 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/
return snprintf(page, count, LPU64"\n", obd->u.filter.fo_tot_pending);
}
-static int lprocfs_filter_rd_mntdev(char *page, char **start, off_t off,
- int count, int *eof, void *data)
-{
- struct obd_device *obd = (struct obd_device *)data;
-
- LASSERT(obd != NULL);
- LASSERT(obd->u.filter.fo_vfsmnt->mnt_devname);
- *eof = 1;
- return snprintf(page, count, "%s\n",
- obd->u.filter.fo_vfsmnt->mnt_devname);
-}
-
static int lprocfs_filter_rd_last_id(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
struct filter_obd *filter = &obd->u.filter;
int retval = 0, rc, i;
- if (obd == NULL)
+ if (obd == NULL || !obd->obd_set_up || obd->obd_stopping)
return 0;
rc = snprintf(page, count, LPU64"\n",filter_last_id(filter, 0));
if (rc < 0)
count -= rc;
retval += rc;
- for (i = FILTER_GROUP_MDS1_N_BASE; i < filter->fo_group_count; i++) {
+ for (i = FID_SEQ_OST_MDT1; i < filter->fo_group_count; i++) {
rc = snprintf(page, count, LPU64"\n",filter_last_id(filter, i));
if (rc < 0) {
retval = rc;
if (rc)
return rc;
- cfs_spin_lock_bh(&obd->obd_processing_task_lock);
- obd->u.filter.fo_read_cache = val;
- cfs_spin_unlock_bh(&obd->obd_processing_task_lock);
+ cfs_spin_lock_bh(&obd->u.filter.fo_flags_lock);
+ obd->u.filter.fo_read_cache = !!val;
+ cfs_spin_unlock_bh(&obd->u.filter.fo_flags_lock);
return count;
}
if (rc)
return rc;
- cfs_spin_lock_bh(&obd->obd_processing_task_lock);
- obd->u.filter.fo_writethrough_cache = val;
- cfs_spin_unlock_bh(&obd->obd_processing_task_lock);
+ cfs_spin_lock(&obd->u.filter.fo_flags_lock);
+ obd->u.filter.fo_writethrough_cache = !!val;
+ cfs_spin_unlock(&obd->u.filter.fo_flags_lock);
return count;
}
if (rc)
return rc;
- cfs_spin_lock(&obd->obd_osfs_lock);
+ cfs_spin_lock(&obd->u.filter.fo_flags_lock);
obd->u.filter.fo_raid_degraded = !!val;
- cfs_spin_unlock(&obd->obd_osfs_lock);
+ cfs_spin_unlock(&obd->u.filter.fo_flags_lock);
+ return count;
+}
+
+int lprocfs_filter_rd_syncjournal(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ struct obd_device *obd = data;
+ int rc;
+
+ rc = snprintf(page, count, "%u\n", obd->u.filter.fo_syncjournal);
+ return rc;
+}
+
+int lprocfs_filter_wr_syncjournal(struct file *file, const char *buffer,
+ unsigned long count, void *data)
+{
+ struct obd_device *obd = data;
+ int val;
+ int rc;
+
+ rc = lprocfs_write_helper(buffer, count, &val);
+ if (rc)
+ return rc;
+
+ if (val < 0)
+ return -EINVAL;
+
+ obd->u.filter.fo_syncjournal = !!val;
+ filter_slc_set(&obd->u.filter);
+
+ return count;
+}
+
+static char *sync_on_cancel_states[] = {"never",
+ "blocking",
+ "always" };
+
+int lprocfs_filter_rd_sync_lock_cancel(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ struct obd_device *obd = data;
+ int rc;
+
+ rc = snprintf(page, count, "%s\n",
+ sync_on_cancel_states[obd->u.filter.fo_sync_lock_cancel]);
+ return rc;
+}
+
+int lprocfs_filter_wr_sync_lock_cancel(struct file *file, const char *buffer,
+ unsigned long count, void *data)
+{
+ struct obd_device *obd = data;
+ int val = -1;
+ int i;
+
+ for (i = 0 ; i < NUM_SYNC_ON_CANCEL_STATES; i++) {
+ if (memcmp(buffer, sync_on_cancel_states[i],
+ strlen(sync_on_cancel_states[i])) == 0) {
+ val = i;
+ break;
+ }
+ }
+ if (val == -1) {
+ int rc;
+ rc = lprocfs_write_helper(buffer, count, &val);
+ if (rc)
+ return rc;
+ }
+
+ if (val < 0 || val > 2)
+ return -EINVAL;
+
+ obd->u.filter.fo_sync_lock_cancel = val;
return count;
}
{ "filesfree", lprocfs_rd_filesfree, 0, 0 },
{ "filegroups", lprocfs_filter_rd_groups, 0, 0 },
{ "fstype", lprocfs_rd_fstype, 0, 0 },
- { "mntdev", lprocfs_filter_rd_mntdev, 0, 0 },
+ { "mntdev", lprocfs_obd_rd_mntdev, 0, 0 },
{ "last_id", lprocfs_filter_rd_last_id,0, 0 },
{ "tot_dirty", lprocfs_filter_rd_tot_dirty, 0, 0 },
{ "tot_pending", lprocfs_filter_rd_tot_pending, 0, 0 },
{ "tot_granted", lprocfs_filter_rd_tot_granted, 0, 0 },
{ "hash_stats", lprocfs_obd_rd_hash, 0, 0 },
- { "recovery_status", lprocfs_obd_rd_recovery_status, 0, 0 },
- { "recovery_maxtime", lprocfs_obd_rd_recovery_maxtime,
- lprocfs_obd_wr_recovery_maxtime, 0},
+ { "recovery_status", lprocfs_obd_rd_recovery_status, 0, 0 },
+ { "recovery_time_soft", lprocfs_obd_rd_recovery_time_soft,
+ lprocfs_obd_wr_recovery_time_soft, 0},
+ { "recovery_time_hard", lprocfs_obd_rd_recovery_time_hard,
+ lprocfs_obd_wr_recovery_time_hard, 0},
{ "evict_client", 0, lprocfs_wr_evict_client, 0,
&lprocfs_evict_client_fops},
{ "num_exports", lprocfs_rd_num_exports, 0, 0 },
{ "mds_sync", lprocfs_filter_rd_mds_sync, 0, 0},
{ "degraded", lprocfs_filter_rd_degraded,
lprocfs_filter_wr_degraded, 0 },
+ { "sync_journal", lprocfs_filter_rd_syncjournal,
+ lprocfs_filter_wr_syncjournal, 0 },
+ { "sync_on_lock_cancel", lprocfs_filter_rd_sync_lock_cancel,
+ lprocfs_filter_wr_sync_lock_cancel, 0 },
+ { "instance", lprocfs_target_rd_instance, 0 },
+ { "ir_factor", lprocfs_obd_rd_ir_factor,
+ lprocfs_obd_wr_ir_factor, 0},
{ 0 }
};