Blame view

fs/exofs/exofs.h 7.83 KB
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
1
2
  /*
   * Copyright (C) 2005, 2006
27d2e1491   Boaz Harrosh   exofs: Remove IBM...
3
   * Avishay Traeger (avishay@gmail.com)
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
4
   * Copyright (C) 2008, 2009
aa281ac63   Boaz Harrosh   Boaz Harrosh - Fi...
5
   * Boaz Harrosh <ooo@electrozaur.com>
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
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
   *
   * Copyrights for code taken from ext2:
   *     Copyright (C) 1992, 1993, 1994, 1995
   *     Remy Card (card@masi.ibp.fr)
   *     Laboratoire MASI - Institut Blaise Pascal
   *     Universite Pierre et Marie Curie (Paris VI)
   *     from
   *     linux/fs/minix/inode.c
   *     Copyright (C) 1991, 1992  Linus Torvalds
   *
   * This file is part of exofs.
   *
   * exofs is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation.  Since it is based on ext2, and the only
   * valid version of GPL for the Linux kernel is version 2, the only valid
   * version of GPL for exofs is version 2.
   *
   * exofs is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with exofs; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
   */
06886a5a3   Boaz Harrosh   exofs: Move all o...
33
34
  #ifndef __EXOFS_H__
  #define __EXOFS_H__
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
35
36
37
  
  #include <linux/fs.h>
  #include <linux/time.h>
b3d0ab7e6   Jens Axboe   exofs: add bdi ba...
38
  #include <linux/backing-dev.h>
8ff660ab8   Boaz Harrosh   exofs: Rename rai...
39
  #include <scsi/osd_ore.h>
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
40
  #include "common.h"
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
41
42
43
44
45
46
47
48
49
50
51
52
  #define EXOFS_ERR(fmt, a...) printk(KERN_ERR "exofs: " fmt, ##a)
  
  #ifdef CONFIG_EXOFS_DEBUG
  #define EXOFS_DBGMSG(fmt, a...) \
  	printk(KERN_NOTICE "exofs @%s:%d: " fmt, __func__, __LINE__, ##a)
  #else
  #define EXOFS_DBGMSG(fmt, a...) \
  	do { if (0) printk(fmt, ##a); } while (0)
  #endif
  
  /* u64 has problems with printk this will cast it to unsigned long long */
  #define _LLU(x) (unsigned long long)(x)
d866d875f   Boaz Harrosh   ore/exofs: Change...
53
54
55
  struct exofs_dev {
  	struct ore_dev ored;
  	unsigned did;
8b56a30ca   Sachin Bhamare   exofs: Add SYSFS...
56
57
58
  	unsigned urilen;
  	uint8_t *uri;
  	struct kobject ed_kobj;
d866d875f   Boaz Harrosh   ore/exofs: Change...
59
  };
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
60
61
62
63
  /*
   * our extension to the in-memory superblock
   */
  struct exofs_sb_info {
6d4073e88   Boaz Harrosh   exofs: BUG: Avoid...
64
  	struct backing_dev_info bdi;		/* register our bdi with VFS  */
1cea312ad   Boaz Harrosh   exofs: Write sbi-...
65
  	struct exofs_sb_stats s_ess;		/* Written often, pre-allocate*/
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
66
67
68
69
70
71
  	int		s_timeout;		/* timeout for OSD operations */
  	uint64_t	s_nextid;		/* highest object ID used     */
  	uint32_t	s_numfiles;		/* number of files on fs      */
  	spinlock_t	s_next_gen_lock;	/* spinlock for gen # update  */
  	u32		s_next_generation;	/* next gen # to use          */
  	atomic_t	s_curr_pending;		/* number of pending commands */
04dc1e88a   Boaz Harrosh   exofs: Multi-devi...
72

8ff660ab8   Boaz Harrosh   exofs: Rename rai...
73
74
  	struct ore_layout	layout;		/* Default files layout       */
  	struct ore_comp one_comp;		/* id & cred of partition id=0*/
5bf696dad   Boaz Harrosh   exofs: Rename str...
75
  	struct ore_components oc;		/* comps for the partition    */
8b56a30ca   Sachin Bhamare   exofs: Add SYSFS...
76
  	struct kobject	s_kobj;			/* holds per-sbi kobject      */
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
77
78
79
80
81
82
  };
  
  /*
   * our extension to the in-memory inode
   */
  struct exofs_i_info {
518f167a3   Boaz Harrosh   exofs: Micro-opti...
83
84
  	struct inode   vfs_inode;          /* normal in-memory inode          */
  	wait_queue_head_t i_wq;            /* wait queue for inode            */
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
85
86
87
  	unsigned long  i_flags;            /* various atomic flags            */
  	uint32_t       i_data[EXOFS_IDATA];/*short symlink names and device #s*/
  	uint32_t       i_dir_start_lookup; /* which page to start lookup      */
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
88
  	uint64_t       i_commit_size;      /* the object's written length     */
8ff660ab8   Boaz Harrosh   exofs: Rename rai...
89
  	struct ore_comp one_comp;	   /* same component for all devices  */
5bf696dad   Boaz Harrosh   exofs: Rename str...
90
  	struct ore_components oc;	   /* inode view of the device table  */
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
91
  };
06886a5a3   Boaz Harrosh   exofs: Move all o...
92
93
94
95
  static inline osd_id exofs_oi_objno(struct exofs_i_info *oi)
  {
  	return oi->vfs_inode.i_ino + EXOFS_OBJ_OFF;
  }
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
  /*
   * our inode flags
   */
  #define OBJ_2BCREATED	0	/* object will be created soon*/
  #define OBJ_CREATED	1	/* object has been created on the osd*/
  
  static inline int obj_2bcreated(struct exofs_i_info *oi)
  {
  	return test_bit(OBJ_2BCREATED, &oi->i_flags);
  }
  
  static inline void set_obj_2bcreated(struct exofs_i_info *oi)
  {
  	set_bit(OBJ_2BCREATED, &oi->i_flags);
  }
  
  static inline int obj_created(struct exofs_i_info *oi)
  {
  	return test_bit(OBJ_CREATED, &oi->i_flags);
  }
  
  static inline void set_obj_created(struct exofs_i_info *oi)
  {
  	set_bit(OBJ_CREATED, &oi->i_flags);
  }
  
  int __exofs_wait_obj_created(struct exofs_i_info *oi);
  static inline int wait_obj_created(struct exofs_i_info *oi)
  {
  	if (likely(obj_created(oi)))
  		return 0;
  
  	return __exofs_wait_obj_created(oi);
  }
  
  /*
   * get to our inode from the vfs inode
   */
  static inline struct exofs_i_info *exofs_i(struct inode *inode)
  {
  	return container_of(inode, struct exofs_i_info, vfs_inode);
  }
e6af00f1d   Boaz Harrosh   exofs: dir_inode ...
138
139
140
141
  /*
   * Maximum count of links to a file
   */
  #define EXOFS_LINK_MAX           32000
e80627191   Boaz Harrosh   exofs: file and f...
142
143
144
  /*************************
   * function declarations *
   *************************/
06886a5a3   Boaz Harrosh   exofs: Move all o...
145

e80627191   Boaz Harrosh   exofs: file and f...
146
  /* inode.c               */
8ff660ab8   Boaz Harrosh   exofs: Rename rai...
147
  unsigned exofs_max_io_pages(struct ore_layout *layout,
66cd6cad4   bharrosh@panasas.com   exofs: Override r...
148
  			    unsigned expected_pages);
e80627191   Boaz Harrosh   exofs: file and f...
149
  int exofs_setattr(struct dentry *, struct iattr *);
beaec07ba   Boaz Harrosh   exofs: address_sp...
150
151
152
  int exofs_write_begin(struct file *file, struct address_space *mapping,
  		loff_t pos, unsigned len, unsigned flags,
  		struct page **pagep, void **fsdata);
e6af00f1d   Boaz Harrosh   exofs: dir_inode ...
153
  extern struct inode *exofs_iget(struct super_block *, unsigned long);
bef41c267   Al Viro   exofs: propagate ...
154
  struct inode *exofs_new_inode(struct inode *, umode_t);
a9185b41a   Christoph Hellwig   pass writeback_co...
155
  extern int exofs_write_inode(struct inode *, struct writeback_control *wbc);
4ec70c9b4   Al Viro   convert exofs to ...
156
  extern void exofs_evict_inode(struct inode *);
e6af00f1d   Boaz Harrosh   exofs: dir_inode ...
157
158
159
160
161
162
163
164
165
166
  
  /* dir.c:                */
  int exofs_add_link(struct dentry *, struct inode *);
  ino_t exofs_inode_by_name(struct inode *, struct dentry *);
  int exofs_delete_entry(struct exofs_dir_entry *, struct page *);
  int exofs_make_empty(struct inode *, struct inode *);
  struct exofs_dir_entry *exofs_find_entry(struct inode *, struct dentry *,
  					 struct page **);
  int exofs_empty_dir(struct inode *);
  struct exofs_dir_entry *exofs_dotdot(struct inode *, struct page **);
8cf74b393   Boaz Harrosh   exofs: export_ope...
167
  ino_t exofs_parent_ino(struct dentry *child);
e6af00f1d   Boaz Harrosh   exofs: dir_inode ...
168
169
  int exofs_set_link(struct inode *, struct exofs_dir_entry *, struct page *,
  		    struct inode *);
e80627191   Boaz Harrosh   exofs: file and f...
170

baaf94cdc   Boaz Harrosh   exofs: Avoid usin...
171
  /* super.c               */
85e44df47   Boaz Harrosh   exofs: Move exofs...
172
173
  void exofs_make_credential(u8 cred_a[OSD_CAP_LEN],
  			   const struct osd_obj_id *obj);
1cea312ad   Boaz Harrosh   exofs: Write sbi-...
174
  int exofs_sbi_write_stats(struct exofs_sb_info *sbi);
baaf94cdc   Boaz Harrosh   exofs: Avoid usin...
175

8b56a30ca   Sachin Bhamare   exofs: Add SYSFS...
176
177
178
179
180
181
182
183
184
  /* sys.c                 */
  int exofs_sysfs_init(void);
  void exofs_sysfs_uninit(void);
  int exofs_sysfs_sb_add(struct exofs_sb_info *sbi,
  		       struct exofs_dt_device_info *dt_dev);
  void exofs_sysfs_sb_del(struct exofs_sb_info *sbi);
  int exofs_sysfs_odev_add(struct exofs_dev *edev,
  			 struct exofs_sb_info *sbi);
  void exofs_sysfs_dbg_print(void);
e80627191   Boaz Harrosh   exofs: file and f...
185
186
187
  /*********************
   * operation vectors *
   *********************/
e6af00f1d   Boaz Harrosh   exofs: dir_inode ...
188
189
  /* dir.c:            */
  extern const struct file_operations exofs_dir_operations;
e80627191   Boaz Harrosh   exofs: file and f...
190
191
192
  /* file.c            */
  extern const struct inode_operations exofs_file_inode_operations;
  extern const struct file_operations exofs_file_operations;
beaec07ba   Boaz Harrosh   exofs: address_sp...
193
194
  /* inode.c           */
  extern const struct address_space_operations exofs_aops;
e6af00f1d   Boaz Harrosh   exofs: dir_inode ...
195
196
197
  /* namei.c           */
  extern const struct inode_operations exofs_dir_inode_operations;
  extern const struct inode_operations exofs_special_inode_operations;
8ff660ab8   Boaz Harrosh   exofs: Rename rai...
198
199
  /* exofs_init_comps will initialize an ore_components device array
   * pointing to a single ore_comp struct, and a round-robin view
9e9db4564   Boaz Harrosh   exofs: ios: Move ...
200
201
202
203
204
205
206
207
   * of the device table.
   * The first device of each inode is the [inode->ino % num_devices]
   * and the rest of the devices sequentially following where the
   * first device is after the last device.
   * It is assumed that the global device array at @sbi is twice
   * bigger and that the device table repeats twice.
   * See: exofs_read_lookup_dev_table()
   */
5bf696dad   Boaz Harrosh   exofs: Rename str...
208
  static inline void exofs_init_comps(struct ore_components *oc,
8ff660ab8   Boaz Harrosh   exofs: Rename rai...
209
  				    struct ore_comp *one_comp,
9e9db4564   Boaz Harrosh   exofs: ios: Move ...
210
211
212
213
214
215
216
  				    struct exofs_sb_info *sbi, osd_id oid)
  {
  	unsigned dev_mod = (unsigned)oid, first_dev;
  
  	one_comp->obj.partition = sbi->one_comp.obj.partition;
  	one_comp->obj.id = oid;
  	exofs_make_credential(one_comp->cred, &one_comp->obj);
3bd985685   Boaz Harrosh   ore: Support for ...
217
  	oc->first_dev = 0;
d866d875f   Boaz Harrosh   ore/exofs: Change...
218
219
  	oc->numdevs = sbi->layout.group_width * sbi->layout.mirrors_p1 *
  							sbi->layout.group_count;
5bf696dad   Boaz Harrosh   exofs: Rename str...
220
221
  	oc->single_comp = EC_SINGLE_COMP;
  	oc->comps = one_comp;
9e9db4564   Boaz Harrosh   exofs: ios: Move ...
222
223
  
  	/* Round robin device view of the table */
5bf696dad   Boaz Harrosh   exofs: Rename str...
224
  	first_dev = (dev_mod * sbi->layout.mirrors_p1) % sbi->oc.numdevs;
d866d875f   Boaz Harrosh   ore/exofs: Change...
225
  	oc->ods = &sbi->oc.ods[first_dev];
9e9db4564   Boaz Harrosh   exofs: ios: Move ...
226
  }
b14f8ab28   Boaz Harrosh   exofs: Kbuild, He...
227
  #endif