Print this page
NEX-16818 Add fksmbcl development tool
NEX-17264 SMB client test tp_smbutil_013 fails after NEX-14666
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
and: (fix ref leaks)

*** 18,34 **** * * CDDL HEADER END */ /* ! * Copyright 2011 Nexenta Systems, Inc. All rights reserved. * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ - #include <sys/mdb_modapi.h> #include <sys/types.h> #include <sys/refstr_impl.h> #include <sys/vnode.h> #include <sys/vfs.h> #include <smbfs/smbfs.h> --- 18,40 ---- * * CDDL HEADER END */ /* ! * Copyright 2017 Nexenta Systems, Inc. All rights reserved. * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #include <sys/types.h> + #include <sys/mdb_modapi.h> + + #ifdef _USER + #include "../genunix/avl.h" + #define _FAKE_KERNEL + #endif + #include <sys/refstr_impl.h> #include <sys/vnode.h> #include <sys/vfs.h> #include <smbfs/smbfs.h>
*** 147,157 **** NULL) != argc) { return (DCMD_USAGE); } if (!(flags & DCMD_ADDRSPEC)) { ! if (mdb_walk("genunix`vfs", smbfs_vfs_cb, cbd) == -1) { mdb_warn("can't walk smbfs vfs"); return (DCMD_ERR); } return (DCMD_OK); --- 153,163 ---- NULL) != argc) { return (DCMD_USAGE); } if (!(flags & DCMD_ADDRSPEC)) { ! if (mdb_walk("vfs", smbfs_vfs_cb, cbd) == -1) { mdb_warn("can't walk smbfs vfs"); return (DCMD_ERR); } return (DCMD_OK);
*** 236,246 **** mdb_warn("expect an smbmntinfo_t addr"); return (DCMD_USAGE); } addr += OFFSETOF(smbmntinfo_t, smi_hash_avl); ! if (mdb_pwalk("genunix`avl", smbfs_node_cb, cbd, addr) == -1) { mdb_warn("cannot walk smbfs nodes"); return (DCMD_ERR); } return (DCMD_OK); --- 242,252 ---- mdb_warn("expect an smbmntinfo_t addr"); return (DCMD_USAGE); } addr += OFFSETOF(smbmntinfo_t, smi_hash_avl); ! if (mdb_pwalk("avl", smbfs_node_cb, cbd, addr) == -1) { mdb_warn("cannot walk smbfs nodes"); return (DCMD_ERR); } return (DCMD_OK);
*** 265,278 **** --- 271,333 ---- smbfs_node_dcmd, smbfs_node_help }, {NULL} }; + #ifdef _USER + /* + * Sadly, can't just compile ../genunix/vfs.c with this since + * it has become a catch-all for FS-specific headers etc. + */ + int + vfs_walk_init(mdb_walk_state_t *wsp) + { + if (wsp->walk_addr == NULL && + mdb_readvar(&wsp->walk_addr, "rootvfs") == -1) { + mdb_warn("failed to read 'rootvfs'"); + return (WALK_ERR); + } + + wsp->walk_data = (void *)wsp->walk_addr; + return (WALK_NEXT); + } + + int + vfs_walk_step(mdb_walk_state_t *wsp) + { + vfs_t vfs; + int status; + + if (mdb_vread(&vfs, sizeof (vfs), wsp->walk_addr) == -1) { + mdb_warn("failed to read vfs_t at %p", wsp->walk_addr); + return (WALK_DONE); + } + + status = wsp->walk_callback(wsp->walk_addr, &vfs, wsp->walk_cbdata); + + if (vfs.vfs_next == wsp->walk_data) + return (WALK_DONE); + + wsp->walk_addr = (uintptr_t)vfs.vfs_next; + + return (status); + } + #endif // _USER + static const mdb_walker_t walkers[] = { + #ifdef _USER + /* from avl.c */ + { AVL_WALK_NAME, AVL_WALK_DESC, + avl_walk_init, avl_walk_step, avl_walk_fini }, + /* from vfs.c */ + { "vfs", "walk file system list", + vfs_walk_init, vfs_walk_step }, + #endif // _USER {NULL} }; + static const mdb_modinfo_t modinfo = { MDB_API_VERSION, dcmds, walkers };