Blame view

fs/nfs/nfs4filelayout.h 3.9 KB
16b374ca4   Andy Adamson   NFSv4.1: pnfs: fi...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  /*
   *  NFSv4 file layout driver data structures.
   *
   *  Copyright (c) 2002
   *  The Regents of the University of Michigan
   *  All Rights Reserved
   *
   *  Dean Hildebrand <dhildebz@umich.edu>
   *
   *  Permission is granted to use, copy, create derivative works, and
   *  redistribute this software and such derivative works for any purpose,
   *  so long as the name of the University of Michigan is not used in
   *  any advertising or publicity pertaining to the use or distribution
   *  of this software without specific, written prior authorization. If
   *  the above copyright notice or any other identification of the
   *  University of Michigan is included in any copy of any portion of
   *  this software, then the disclaimer below must also be included.
   *
   *  This software is provided as is, without representation or warranty
   *  of any kind either express or implied, including without limitation
   *  the implied warranties of merchantability, fitness for a particular
   *  purpose, or noninfringement.  The Regents of the University of
   *  Michigan shall not be liable for any damages, including special,
   *  indirect, incidental, or consequential damages, with respect to any
   *  claim arising out of or in connection with the use of the software,
   *  even if it has been or is hereafter advised of the possibility of
   *  such damages.
   */
  
  #ifndef FS_NFS_NFS4FILELAYOUT_H
  #define FS_NFS_NFS4FILELAYOUT_H
  
  #include "pnfs.h"
  
  /*
25985edce   Lucas De Marchi   Fix common misspe...
36
   * Field testing shows we need to support up to 4096 stripe indices.
16b374ca4   Andy Adamson   NFSv4.1: pnfs: fi...
37
38
39
40
41
42
43
44
45
46
47
48
49
   * We store each index as a u8 (u32 on the wire) to keep the memory footprint
   * reasonable. This in turn means we support a maximum of 256
   * RFC 5661 multipath_list4 structures.
   */
  #define NFS4_PNFS_MAX_STRIPE_CNT 4096
  #define NFS4_PNFS_MAX_MULTI_CNT  256 /* 256 fit into a u8 stripe_index */
  
  enum stripetype4 {
  	STRIPE_SPARSE = 1,
  	STRIPE_DENSE = 2
  };
  
  /* Individual ip address */
14f9a6076   Weston Andros Adamson   NFS: Parse and st...
50
51
52
53
54
55
  struct nfs4_pnfs_ds_addr {
  	struct sockaddr_storage	da_addr;
  	size_t			da_addrlen;
  	struct list_head	da_node;  /* nfs4_pnfs_dev_hlist dev_dslist */
  	char			*da_remotestr;	/* human readable addr+port */
  };
16b374ca4   Andy Adamson   NFSv4.1: pnfs: fi...
56
57
  struct nfs4_pnfs_ds {
  	struct list_head	ds_node;  /* nfs4_pnfs_dev_hlist dev_dslist */
14f9a6076   Weston Andros Adamson   NFS: Parse and st...
58
59
  	char			*ds_remotestr;	/* comma sep list of addrs */
  	struct list_head	ds_addrs;
16b374ca4   Andy Adamson   NFSv4.1: pnfs: fi...
60
61
62
  	struct nfs_client	*ds_clp;
  	atomic_t		ds_count;
  };
568e8c494   Andy Adamson   NFSv4.1: turn off...
63
64
  /* nfs4_file_layout_dsaddr flags */
  #define NFS4_DEVICE_ID_NEG_ENTRY	0x00000001
16b374ca4   Andy Adamson   NFSv4.1: pnfs: fi...
65
  struct nfs4_file_layout_dsaddr {
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
66
  	struct nfs4_deviceid_node	id_node;
568e8c494   Andy Adamson   NFSv4.1: turn off...
67
  	unsigned long			flags;
16b374ca4   Andy Adamson   NFSv4.1: pnfs: fi...
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
  	u32				stripe_count;
  	u8				*stripe_indices;
  	u32				ds_num;
  	struct nfs4_pnfs_ds		*ds_list[1];
  };
  
  struct nfs4_filelayout_segment {
  	struct pnfs_layout_segment generic_hdr;
  	u32 stripe_type;
  	u32 commit_through_mds;
  	u32 stripe_unit;
  	u32 first_stripe_index;
  	u64 pattern_offset;
  	struct nfs4_file_layout_dsaddr *dsaddr; /* Point to GETDEVINFO data */
  	unsigned int num_fh;
  	struct nfs_fh **fh_array;
425eb736c   Fred Isaman   NFSv4.1: alloc an...
84
85
  	struct list_head *commit_buckets; /* Sort commits to ds */
  	int number_of_buckets;
16b374ca4   Andy Adamson   NFSv4.1: pnfs: fi...
86
87
88
89
90
91
92
93
94
  };
  
  static inline struct nfs4_filelayout_segment *
  FILELAYOUT_LSEG(struct pnfs_layout_segment *lseg)
  {
  	return container_of(lseg,
  			    struct nfs4_filelayout_segment,
  			    generic_hdr);
  }
c47abcf8f   Andy Adamson   NFSv4.1: do not u...
95
96
97
98
99
  static inline struct nfs4_deviceid_node *
  FILELAYOUT_DEVID_NODE(struct pnfs_layout_segment *lseg)
  {
  	return &FILELAYOUT_LSEG(lseg)->dsaddr->id_node;
  }
cfe7f4120   Fred Isaman   NFSv4.1: filelayo...
100
101
  extern struct nfs_fh *
  nfs4_fl_select_ds_fh(struct pnfs_layout_segment *lseg, u32 j);
16b374ca4   Andy Adamson   NFSv4.1: pnfs: fi...
102
  extern void print_ds(struct nfs4_pnfs_ds *ds);
cfe7f4120   Fred Isaman   NFSv4.1: filelayo...
103
104
105
106
  u32 nfs4_fl_calc_j_index(struct pnfs_layout_segment *lseg, loff_t offset);
  u32 nfs4_fl_calc_ds_index(struct pnfs_layout_segment *lseg, u32 j);
  struct nfs4_pnfs_ds *nfs4_fl_prepare_ds(struct pnfs_layout_segment *lseg,
  					u32 ds_idx);
ea8eecdd1   Christoph Hellwig   NFSv4.1 move devi...
107
  extern void nfs4_fl_put_deviceid(struct nfs4_file_layout_dsaddr *dsaddr);
1775bc342   Benny Halevy   NFSv4.1: purge de...
108
  extern void nfs4_fl_free_deviceid(struct nfs4_file_layout_dsaddr *dsaddr);
16b374ca4   Andy Adamson   NFSv4.1: pnfs: fi...
109
  struct nfs4_file_layout_dsaddr *
a75b9df9d   Trond Myklebust   NFSv4.1: Ensure t...
110
  get_device_info(struct inode *inode, struct nfs4_deviceid *dev_id, gfp_t gfp_flags);
16b374ca4   Andy Adamson   NFSv4.1: pnfs: fi...
111
112
  
  #endif /* FS_NFS_NFS4FILELAYOUT_H */