Print this page
    
NEX-15279 support NFS server in zone
NEX-15520 online NFS shares cause zoneadm halt to hang in nfs_export_zone_fini
Portions contributed by: Dan Kruchinin dan.kruchinin@nexenta.com
Portions contributed by: Stepan Zastupov stepan.zastupov@gmail.com
Reviewed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/sharefs/sharefs.h
          +++ new/usr/src/uts/common/sharefs/sharefs.h
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  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
  
    | 
      ↓ open down ↓ | 
    16 lines elided | 
    
      ↑ open up ↑ | 
  
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   */
  26   26  
       27 +/*
       28 + * Copyright 2018 Nexenta Systems, Inc.
       29 + */
       30 +
  27   31  #ifndef _SHAREFS_SHAREFS_H
  28   32  #define _SHAREFS_SHAREFS_H
  29   33  
  30      -#pragma ident   "%Z%%M% %I%     %E% SMI"
  31      -
  32   34  /*
  33   35   * This header provides service for the sharefs module.
  34   36   */
  35   37  
  36   38  #include <sys/modctl.h>
  37   39  #include <sys/vfs.h>
  38   40  #include <sys/vnode.h>
  39   41  #include <sys/gfs.h>
  40   42  #include <sharefs/share.h>
  41   43  #include <sharefs/sharetab.h>
  42   44  
  43   45  #ifdef __cplusplus
  44   46  extern "C" {
  45   47  #endif
  46   48  
  47   49  #define SHAREFS_ROOT    "/etc/dfs"
  48   50  #define SHAREFS_BASE    "sharetab"
  49   51  
  50   52  /*
  51   53   * Lengths of strings.
  52   54   */
  53   55  typedef struct sharefs_lens {
  54   56          int     shl_path;
  55   57          int     shl_res;
  56   58          int     shl_fstype;
  57   59          int     shl_opts;
  58   60          int     shl_descr;
  59   61  } sharefs_lens_t;
  
    | 
      ↓ open down ↓ | 
    18 lines elided | 
    
      ↑ open up ↑ | 
  
  60   62  
  61   63  /*
  62   64   * VFS data object
  63   65   */
  64   66  typedef struct sharefs_vfs {
  65   67          vnode_t *sharefs_vfs_root;
  66   68  } sharefs_vfs_t;
  67   69  
  68   70  #define SHAREFS_NAME_MAX        MAXNAMELEN
  69   71  
  70      -/*
  71      - * The lock ordering whenever sharefs_lock and sharetab_lock both
  72      - * need to be held is: sharefs_lock and then sharetab_lock.
  73      - */
  74      -extern krwlock_t        sharefs_lock;   /* lock for the vnode ops */
  75      -extern sharetab_t       *sharefs_sharetab;      /* The sharetab. */
       72 +typedef struct sharetab_globals {
       73 +        /*
       74 +         * The lock ordering whenever sharefs_lock and sharetab_lock both
       75 +         * need to be held is: sharefs_lock and then sharetab_lock.
       76 +         */
       77 +        krwlock_t       sharefs_lock;   /* lock for the vnode ops */
       78 +        sharetab_t      *sharefs_sharetab;      /* The sharetab. */
  76   79  
  77      -extern uint_t           sharetab_count; /* How many shares? */
  78      -extern krwlock_t        sharetab_lock;  /* lock for the cached sharetab */
  79      -extern size_t           sharetab_size;  /* How big is the sharetab file? */
       80 +        uint_t          sharetab_count; /* How many shares? */
       81 +        krwlock_t       sharetab_lock;  /* lock for the cached sharetab */
       82 +        size_t          sharetab_size;  /* How big is the sharetab file? */
  80   83  
  81      -extern timestruc_t      sharetab_mtime; /* Last mod to sharetab */
  82      -extern timestruc_t      sharetab_snap_time;     /* Last snap */
  83      -extern uint_t           sharetab_generation;    /* Which copy is it? */
       84 +        timestruc_t     sharetab_mtime; /* Last mod to sharetab */
       85 +        timestruc_t     sharetab_snap_time;     /* Last snap */
       86 +        uint_t          sharetab_generation;    /* Which copy is it? */
       87 +} sharetab_globals_t;
  84   88  
  85   89  #define SHAREFS_INO_FILE        0x80
  86   90  
  87   91  extern vnode_t *sharefs_create_root_file(vfs_t *);
       92 +extern sharetab_globals_t *sharetab_get_globals(zone_t *zone);
  88   93  
  89   94  /*
  90   95   * Sharetab file
  91   96   *
  92   97   * Note that even though the sharetab code does not explictly
  93   98   * use 'sharefs_file', it is required by GFS that the first
  94   99   * field of the private data be a gfs_file_t.
  95  100   */
  96  101  typedef struct shnode_t {
  97  102          gfs_file_t      sharefs_file;           /* gfs file */
  98  103          char            *sharefs_snap;          /* snapshot of the share */
  99  104          size_t          sharefs_size;           /* size of the snapshot */
 100  105          uint_t          sharefs_count;          /* number of shares */
 101  106          uint_t          sharefs_refs;           /* reference count */
 102  107          uint_t          sharefs_real_vp;        /* Are we a real or snap */
 103  108          uint_t          sharefs_generation;     /* Which copy are we? */
 104  109          timestruc_t     sharefs_snap_time;      /* When were we modded? */
 105  110  } shnode_t;
 106  111  
 107  112  /*
 108  113   * Some conversion macros:
 109  114   */
 110  115  #define VTOSH(vp)       ((shnode_t *)((vp)->v_data))
 111  116  
 112  117  extern const fs_operation_def_t sharefs_tops_data[];
 113  118  extern vnodeops_t               *sharefs_ops_data;
 114  119  
 115  120  extern void sharefs_data_init(void);
 116  121  
 117  122  extern void sharefs_sharetab_init(void);
 118  123  
 119  124  #ifdef __cplusplus
 120  125  }
 121  126  #endif
 122  127  
 123  128  #endif /* !_SHAREFS_SHAREFS_H */
  
    | 
      ↓ open down ↓ | 
    26 lines elided | 
    
      ↑ open up ↑ | 
  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX