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)

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/mdb/common/modules/smbfs/smbfs.c
          +++ new/usr/src/cmd/mdb/common/modules/smbfs/smbfs.c
↓ open down ↓ 12 lines elided ↑ open up ↑
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23      - * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
       23 + * Copyright 2017 Nexenta Systems, Inc.  All rights reserved.
  24   24   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  25   25   * Use is subject to license terms.
  26   26   */
  27   27  
  28      -#include <sys/mdb_modapi.h>
  29   28  #include <sys/types.h>
       29 +#include <sys/mdb_modapi.h>
       30 +
       31 +#ifdef  _USER
       32 +#include "../genunix/avl.h"
       33 +#define _FAKE_KERNEL
       34 +#endif
       35 +
  30   36  #include <sys/refstr_impl.h>
  31   37  #include <sys/vnode.h>
  32   38  #include <sys/vfs.h>
  33   39  
  34   40  #include <smbfs/smbfs.h>
  35   41  #include <smbfs/smbfs_node.h>
  36   42  
  37   43  #define OPT_VERBOSE     0x0001  /* Be [-v]erbose in dcmd's */
  38   44  
  39   45  /*
↓ open down ↓ 102 lines elided ↑ open up ↑
 142  148                  return (DCMD_ERR);
 143  149          }
 144  150  
 145  151          if (mdb_getopts(argc, argv,
 146  152              'v', MDB_OPT_SETBITS, OPT_VERBOSE, &cbd->flags,
 147  153              NULL) != argc) {
 148  154                  return (DCMD_USAGE);
 149  155          }
 150  156  
 151  157          if (!(flags & DCMD_ADDRSPEC)) {
 152      -                if (mdb_walk("genunix`vfs", smbfs_vfs_cb, cbd)
      158 +                if (mdb_walk("vfs", smbfs_vfs_cb, cbd)
 153  159                      == -1) {
 154  160                          mdb_warn("can't walk smbfs vfs");
 155  161                          return (DCMD_ERR);
 156  162                  }
 157  163                  return (DCMD_OK);
 158  164          }
 159  165  
 160  166          vfs = mdb_alloc(sizeof (*vfs),  UM_SLEEP | UM_GC);
 161  167          SMBFS_OBJ_FETCH(addr, vfs_t, vfs, DCMD_ERR);
 162  168          smbfs_vfs_cb(addr, vfs, cbd);
↓ open down ↓ 68 lines elided ↑ open up ↑
 231  237              NULL) != argc) {
 232  238                  return (DCMD_USAGE);
 233  239          }
 234  240  
 235  241          if (!(flags & DCMD_ADDRSPEC)) {
 236  242                  mdb_warn("expect an smbmntinfo_t addr");
 237  243                  return (DCMD_USAGE);
 238  244          }
 239  245          addr += OFFSETOF(smbmntinfo_t, smi_hash_avl);
 240  246  
 241      -        if (mdb_pwalk("genunix`avl", smbfs_node_cb, cbd, addr) == -1) {
      247 +        if (mdb_pwalk("avl", smbfs_node_cb, cbd, addr) == -1) {
 242  248                  mdb_warn("cannot walk smbfs nodes");
 243  249                  return (DCMD_ERR);
 244  250          }
 245  251  
 246  252          return (DCMD_OK);
 247  253  }
 248  254  
 249  255  void
 250  256  smbfs_node_help(void)
 251  257  {
↓ open down ↓ 8 lines elided ↑ open up ↑
 260  266                  smbfs_vfs_dcmd, smbfs_vfs_help
 261  267          },
 262  268          {
 263  269                  "smbfs_node", "?[-v]",
 264  270                  "given an smbmntinfo_t, list smbnodes",
 265  271                  smbfs_node_dcmd, smbfs_node_help
 266  272          },
 267  273          {NULL}
 268  274  };
 269  275  
      276 +#ifdef _USER
      277 +/*
      278 + * Sadly, can't just compile ../genunix/vfs.c with this since
      279 + * it has become a catch-all for FS-specific headers etc.
      280 + */
      281 +int
      282 +vfs_walk_init(mdb_walk_state_t *wsp)
      283 +{
      284 +        if (wsp->walk_addr == NULL &&
      285 +            mdb_readvar(&wsp->walk_addr, "rootvfs") == -1) {
      286 +                mdb_warn("failed to read 'rootvfs'");
      287 +                return (WALK_ERR);
      288 +        }
      289 +
      290 +        wsp->walk_data = (void *)wsp->walk_addr;
      291 +        return (WALK_NEXT);
      292 +}
      293 +
      294 +int
      295 +vfs_walk_step(mdb_walk_state_t *wsp)
      296 +{
      297 +        vfs_t vfs;
      298 +        int status;
      299 +
      300 +        if (mdb_vread(&vfs, sizeof (vfs), wsp->walk_addr) == -1) {
      301 +                mdb_warn("failed to read vfs_t at %p", wsp->walk_addr);
      302 +                return (WALK_DONE);
      303 +        }
      304 +
      305 +        status = wsp->walk_callback(wsp->walk_addr, &vfs, wsp->walk_cbdata);
      306 +
      307 +        if (vfs.vfs_next == wsp->walk_data)
      308 +                return (WALK_DONE);
      309 +
      310 +        wsp->walk_addr = (uintptr_t)vfs.vfs_next;
      311 +
      312 +        return (status);
      313 +}
      314 +#endif  // _USER
      315 +
 270  316  static const mdb_walker_t walkers[] = {
      317 +#ifdef  _USER
      318 +        /* from avl.c */
      319 +        { AVL_WALK_NAME, AVL_WALK_DESC,
      320 +                avl_walk_init, avl_walk_step, avl_walk_fini },
      321 +        /* from vfs.c */
      322 +        { "vfs", "walk file system list",
      323 +                vfs_walk_init, vfs_walk_step },
      324 +#endif  // _USER
 271  325          {NULL}
 272  326  };
 273  327  
      328 +
 274  329  static const mdb_modinfo_t modinfo = {
 275  330          MDB_API_VERSION,
 276  331          dcmds,
 277  332          walkers
 278  333  };
 279  334  
 280  335  const mdb_modinfo_t *
 281  336  _mdb_init(void)
 282  337  {
 283  338          return (&modinfo);
 284  339  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX