* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2012, Intel, Inc.
+ * Copyright (c) 2012, 2013, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
if (osp == NULL)
return 0;
- return snprintf(page, count, LPU64"\n", osp->opd_pre_next);
+ return snprintf(page, count, "%u\n",
+ fid_oid(&osp->opd_pre_used_fid) + 1);
}
static int osp_rd_prealloc_last_id(char *page, char **start, off_t off,
if (osp == NULL)
return 0;
- return snprintf(page, count, LPU64"\n", osp->opd_pre_last_created);
+ return snprintf(page, count, "%u\n",
+ fid_oid(&osp->opd_pre_last_created_fid));
+}
+
+static int osp_rd_prealloc_next_seq(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ struct obd_device *obd = data;
+ struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
+
+ if (osp == NULL)
+ return 0;
+
+ return snprintf(page, count, LPX64"\n",
+ fid_seq(&osp->opd_pre_used_fid));
+}
+
+static int osp_rd_prealloc_last_seq(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ struct obd_device *obd = data;
+ struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
+
+ if (osp == NULL)
+ return 0;
+
+ return snprintf(page, count, LPX64"\n",
+ fid_seq(&osp->opd_pre_last_created_fid));
}
static int osp_rd_prealloc_reserved(char *page, char **start, off_t off,
struct obd_device *dev = data;
struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev);
+ if (osp == NULL)
+ return -EINVAL;
+
/*
* This counter used to determine if OST has space returned.
* Now we need to wait for the following:
{ "uuid", lprocfs_rd_uuid, 0, 0 },
{ "ping", 0, lprocfs_wr_ping, 0, 0, 0222 },
{ "connect_flags", lprocfs_rd_connect_flags, 0, 0 },
- { "blocksize", lprocfs_rd_blksize, 0, 0 },
- { "kbytestotal", lprocfs_rd_kbytestotal, 0, 0 },
- { "kbytesfree", lprocfs_rd_kbytesfree, 0, 0 },
- { "kbytesavail", lprocfs_rd_kbytesavail, 0, 0 },
- { "filestotal", lprocfs_rd_filestotal, 0, 0 },
- { "filesfree", lprocfs_rd_filesfree, 0, 0 },
{ "ost_server_uuid", lprocfs_rd_server_uuid, 0, 0 },
{ "ost_conn_uuid", lprocfs_rd_conn_uuid, 0, 0 },
{ "active", osp_rd_active, osp_wr_active, 0 },
{ "max_create_count", osp_rd_max_create_count,
osp_wr_max_create_count, 0 },
{ "prealloc_next_id", osp_rd_prealloc_next_id, 0, 0 },
- { "prealloc_last_id", osp_rd_prealloc_last_id, 0, 0 },
+ { "prealloc_next_seq", osp_rd_prealloc_next_seq, 0, 0 },
+ { "prealloc_last_id", osp_rd_prealloc_last_id, 0, 0 },
+ { "prealloc_last_seq", osp_rd_prealloc_last_seq, 0, 0 },
{ "prealloc_reserved", osp_rd_prealloc_reserved, 0, 0 },
{ "timeouts", lprocfs_rd_timeouts, 0, 0 },
{ "import", lprocfs_rd_import, lprocfs_wr_import, 0 },
{ 0 }
};
+static struct lprocfs_vars lprocfs_osp_osd_vars[] = {
+ { "blocksize", lprocfs_dt_rd_blksize, 0, 0 },
+ { "kbytestotal", lprocfs_dt_rd_kbytestotal, 0, 0 },
+ { "kbytesfree", lprocfs_dt_rd_kbytesfree, 0, 0 },
+ { "kbytesavail", lprocfs_dt_rd_kbytesavail, 0, 0 },
+ { "filestotal", lprocfs_dt_rd_filestotal, 0, 0 },
+ { "filesfree", lprocfs_dt_rd_filesfree, 0, 0 },
+ { 0 }
+};
+
static struct lprocfs_vars lprocfs_osp_module_vars[] = {
{ "num_refs", lprocfs_rd_numrefs, 0, 0 },
{ 0 }
lvars->module_vars = lprocfs_osp_module_vars;
lvars->obd_vars = lprocfs_osp_obd_vars;
}
+
+void osp_lprocfs_init(struct osp_device *osp)
+{
+ struct obd_device *obd = osp->opd_obd;
+ struct proc_dir_entry *osc_proc_dir;
+ int rc;
+
+ obd->obd_proc_entry = lprocfs_register(obd->obd_name,
+ obd->obd_type->typ_procroot,
+ lprocfs_osp_osd_vars,
+ &osp->opd_dt_dev);
+ if (IS_ERR(obd->obd_proc_entry)) {
+ CERROR("%s: can't register in lprocfs: %ld\n",
+ obd->obd_name, PTR_ERR(obd->obd_proc_entry));
+ obd->obd_proc_entry = NULL;
+ return;
+ }
+
+ rc = lprocfs_add_vars(obd->obd_proc_entry, lprocfs_osp_obd_vars, obd);
+ if (rc) {
+ CERROR("%s: can't register in lprocfs: %ld\n",
+ obd->obd_name, PTR_ERR(obd->obd_proc_entry));
+ return;
+ }
+
+ ptlrpc_lprocfs_register_obd(obd);
+
+ /* for compatibility we link old procfs's OSC entries to osp ones */
+ if (!osp->opd_connect_mdt) {
+ osc_proc_dir = lprocfs_srch(proc_lustre_root, "osc");
+ if (osc_proc_dir) {
+ cfs_proc_dir_entry_t *symlink = NULL;
+ char *name;
+
+ OBD_ALLOC(name, strlen(obd->obd_name) + 1);
+ if (name == NULL)
+ return;
+
+ strcpy(name, obd->obd_name);
+ if (strstr(name, "osc"))
+ symlink = lprocfs_add_symlink(name,
+ osc_proc_dir, "../osp/%s",
+ obd->obd_name);
+ OBD_FREE(name, strlen(obd->obd_name) + 1);
+ osp->opd_symlink = symlink;
+ }
+ }
+}
+
#endif /* LPROCFS */