X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosp%2Flproc_osp.c;h=b84b453ec29c46d287bdbbbee47d00c063ac494d;hb=21ec386df7314348e9d483008648524192b51054;hp=21839f4c43db901d12d343997da3f7d14e9bcfa1;hpb=1761cd6de4c3e114247e7c01ba1a568ff93f4569;p=fs%2Flustre-release.git diff --git a/lustre/osp/lproc_osp.c b/lustre/osp/lproc_osp.c index 21839f4..b84b453 100644 --- a/lustre/osp/lproc_osp.c +++ b/lustre/osp/lproc_osp.c @@ -27,7 +27,7 @@ * 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, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -291,7 +291,8 @@ static int osp_rd_prealloc_next_id(char *page, char **start, off_t off, 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, @@ -303,7 +304,34 @@ 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, @@ -402,12 +430,6 @@ static struct lprocfs_vars lprocfs_osp_obd_vars[] = { { "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 }, @@ -420,7 +442,9 @@ static struct lprocfs_vars lprocfs_osp_obd_vars[] = { { "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 }, @@ -437,6 +461,16 @@ static struct lprocfs_vars lprocfs_osp_obd_vars[] = { { 0 } }; +static struct lprocfs_vars lprocfs_osp_osd_vars[] = { + { "blocksize", lprocfs_osd_rd_blksize, 0, 0 }, + { "kbytestotal", lprocfs_osd_rd_kbytestotal, 0, 0 }, + { "kbytesfree", lprocfs_osd_rd_kbytesfree, 0, 0 }, + { "kbytesavail", lprocfs_osd_rd_kbytesavail, 0, 0 }, + { "filestotal", lprocfs_osd_rd_filestotal, 0, 0 }, + { "filesfree", lprocfs_osd_rd_filesfree, 0, 0 }, + { 0 } +}; + static struct lprocfs_vars lprocfs_osp_module_vars[] = { { "num_refs", lprocfs_rd_numrefs, 0, 0 }, { 0 } @@ -447,5 +481,54 @@ void lprocfs_osp_init_vars(struct lprocfs_static_vars *lvars) 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 */