LCOV - code coverage report
Current view: top level - fs/nfs/filelayout - filelayout.h (source / functions) Hit Total Coverage
Test: Real Lines: 0 1 0.0 %
Date: 2020-10-17 15:46:16 Functions: 0 0 -
Legend: Neither, QEMU, Real, Both Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  *  NFSv4 file layout driver data structures.
       3                 :            :  *
       4                 :            :  *  Copyright (c) 2002
       5                 :            :  *  The Regents of the University of Michigan
       6                 :            :  *  All Rights Reserved
       7                 :            :  *
       8                 :            :  *  Dean Hildebrand <dhildebz@umich.edu>
       9                 :            :  *
      10                 :            :  *  Permission is granted to use, copy, create derivative works, and
      11                 :            :  *  redistribute this software and such derivative works for any purpose,
      12                 :            :  *  so long as the name of the University of Michigan is not used in
      13                 :            :  *  any advertising or publicity pertaining to the use or distribution
      14                 :            :  *  of this software without specific, written prior authorization. If
      15                 :            :  *  the above copyright notice or any other identification of the
      16                 :            :  *  University of Michigan is included in any copy of any portion of
      17                 :            :  *  this software, then the disclaimer below must also be included.
      18                 :            :  *
      19                 :            :  *  This software is provided as is, without representation or warranty
      20                 :            :  *  of any kind either express or implied, including without limitation
      21                 :            :  *  the implied warranties of merchantability, fitness for a particular
      22                 :            :  *  purpose, or noninfringement.  The Regents of the University of
      23                 :            :  *  Michigan shall not be liable for any damages, including special,
      24                 :            :  *  indirect, incidental, or consequential damages, with respect to any
      25                 :            :  *  claim arising out of or in connection with the use of the software,
      26                 :            :  *  even if it has been or is hereafter advised of the possibility of
      27                 :            :  *  such damages.
      28                 :            :  */
      29                 :            : 
      30                 :            : #ifndef FS_NFS_NFS4FILELAYOUT_H
      31                 :            : #define FS_NFS_NFS4FILELAYOUT_H
      32                 :            : 
      33                 :            : #include "../pnfs.h"
      34                 :            : 
      35                 :            : /*
      36                 :            :  * Field testing shows we need to support up to 4096 stripe indices.
      37                 :            :  * We store each index as a u8 (u32 on the wire) to keep the memory footprint
      38                 :            :  * reasonable. This in turn means we support a maximum of 256
      39                 :            :  * RFC 5661 multipath_list4 structures.
      40                 :            :  */
      41                 :            : #define NFS4_PNFS_MAX_STRIPE_CNT 4096
      42                 :            : #define NFS4_PNFS_MAX_MULTI_CNT  256 /* 256 fit into a u8 stripe_index */
      43                 :            : 
      44                 :            : enum stripetype4 {
      45                 :            :         STRIPE_SPARSE = 1,
      46                 :            :         STRIPE_DENSE = 2
      47                 :            : };
      48                 :            : 
      49                 :            : struct nfs4_file_layout_dsaddr {
      50                 :            :         struct nfs4_deviceid_node       id_node;
      51                 :            :         u32                             stripe_count;
      52                 :            :         u8                              *stripe_indices;
      53                 :            :         u32                             ds_num;
      54                 :            :         struct nfs4_pnfs_ds             *ds_list[1];
      55                 :            : };
      56                 :            : 
      57                 :            : struct nfs4_filelayout_segment {
      58                 :            :         struct pnfs_layout_segment      generic_hdr;
      59                 :            :         u32                             stripe_type;
      60                 :            :         u32                             commit_through_mds;
      61                 :            :         u32                             stripe_unit;
      62                 :            :         u32                             first_stripe_index;
      63                 :            :         u64                             pattern_offset;
      64                 :            :         struct nfs4_deviceid            deviceid;
      65                 :            :         struct nfs4_file_layout_dsaddr  *dsaddr; /* Point to GETDEVINFO data */
      66                 :            :         unsigned int                    num_fh;
      67                 :            :         struct nfs_fh                   **fh_array;
      68                 :            : };
      69                 :            : 
      70                 :            : struct nfs4_filelayout {
      71                 :            :         struct pnfs_layout_hdr generic_hdr;
      72                 :            :         struct pnfs_ds_commit_info commit_info;
      73                 :            : };
      74                 :            : 
      75                 :            : static inline struct nfs4_filelayout *
      76                 :            : FILELAYOUT_FROM_HDR(struct pnfs_layout_hdr *lo)
      77                 :            : {
      78                 :            :         return container_of(lo, struct nfs4_filelayout, generic_hdr);
      79                 :            : }
      80                 :            : 
      81                 :            : static inline struct nfs4_filelayout_segment *
      82                 :            : FILELAYOUT_LSEG(struct pnfs_layout_segment *lseg)
      83                 :            : {
      84                 :            :         return container_of(lseg,
      85                 :            :                             struct nfs4_filelayout_segment,
      86                 :            :                             generic_hdr);
      87                 :            : }
      88                 :            : 
      89                 :            : static inline struct nfs4_deviceid_node *
      90                 :            : FILELAYOUT_DEVID_NODE(struct pnfs_layout_segment *lseg)
      91                 :            : {
      92                 :          0 :         return &FILELAYOUT_LSEG(lseg)->dsaddr->id_node;
      93                 :            : }
      94                 :            : 
      95                 :            : static inline bool
      96                 :            : filelayout_test_devid_invalid(struct nfs4_deviceid_node *node)
      97                 :            : {
      98                 :            :         return test_bit(NFS_DEVICEID_INVALID, &node->flags);
      99                 :            : }
     100                 :            : 
     101                 :            : extern bool
     102                 :            : filelayout_test_devid_unavailable(struct nfs4_deviceid_node *node);
     103                 :            : 
     104                 :            : extern struct nfs_fh *
     105                 :            : nfs4_fl_select_ds_fh(struct pnfs_layout_segment *lseg, u32 j);
     106                 :            : 
     107                 :            : u32 nfs4_fl_calc_j_index(struct pnfs_layout_segment *lseg, loff_t offset);
     108                 :            : u32 nfs4_fl_calc_ds_index(struct pnfs_layout_segment *lseg, u32 j);
     109                 :            : struct nfs4_pnfs_ds *nfs4_fl_prepare_ds(struct pnfs_layout_segment *lseg,
     110                 :            :                                         u32 ds_idx);
     111                 :            : 
     112                 :            : extern struct nfs4_file_layout_dsaddr *
     113                 :            : nfs4_fl_alloc_deviceid_node(struct nfs_server *server,
     114                 :            :         struct pnfs_device *pdev, gfp_t gfp_flags);
     115                 :            : extern void nfs4_fl_put_deviceid(struct nfs4_file_layout_dsaddr *dsaddr);
     116                 :            : extern void nfs4_fl_free_deviceid(struct nfs4_file_layout_dsaddr *dsaddr);
     117                 :            : 
     118                 :            : #endif /* FS_NFS_NFS4FILELAYOUT_H */
    

Generated by: LCOV version 1.14