ALSA: pcm: Fix missing check of the new non-cached buffer type
[linux-2.6-block.git] / fs / jffs2 / fs.c
CommitLineData
1da177e4
LT
1/*
2 * JFFS2 -- Journalling Flash File System, Version 2.
3 *
c00c310e 4 * Copyright © 2001-2007 Red Hat, Inc.
6088c058 5 * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org>
1da177e4
LT
6 *
7 * Created by David Woodhouse <dwmw2@infradead.org>
8 *
9 * For licensing information, see the file 'LICENCE' in this directory.
10 *
1da177e4
LT
11 */
12
5a528957
JP
13#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
14
16f7e0fe 15#include <linux/capability.h>
1da177e4
LT
16#include <linux/kernel.h>
17#include <linux/sched.h>
5b825c3a 18#include <linux/cred.h>
1da177e4 19#include <linux/fs.h>
ec10a24f 20#include <linux/fs_context.h>
1da177e4
LT
21#include <linux/list.h>
22#include <linux/mtd/mtd.h>
23#include <linux/pagemap.h>
24#include <linux/slab.h>
25#include <linux/vmalloc.h>
26#include <linux/vfs.h>
27#include <linux/crc32.h>
28#include "nodelist.h"
29
30static int jffs2_flash_setup(struct jffs2_sb_info *c);
31
9ed437c5 32int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
1da177e4
LT
33{
34 struct jffs2_full_dnode *old_metadata, *new_metadata;
35 struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
36 struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
37 struct jffs2_raw_inode *ri;
aef9ab47 38 union jffs2_device_node dev;
1da177e4
LT
39 unsigned char *mdata = NULL;
40 int mdatalen = 0;
41 unsigned int ivalid;
9fe4854c 42 uint32_t alloclen;
1da177e4 43 int ret;
dd919660 44 int alloc_type = ALLOC_NORMAL;
9ed437c5 45
9c261b33 46 jffs2_dbg(1, "%s(): ino #%lu\n", __func__, inode->i_ino);
1da177e4
LT
47
48 /* Special cases - we don't want more than one data node
49 for these types on the medium at any time. So setattr
50 must read the original data associated with the node
51 (i.e. the device numbers or the target name) and write
52 it out again with the appropriate data attached */
53 if (S_ISBLK(inode->i_mode) || S_ISCHR(inode->i_mode)) {
54 /* For these, we don't actually need to read the old node */
aef9ab47 55 mdatalen = jffs2_encode_dev(&dev, inode->i_rdev);
1da177e4 56 mdata = (char *)&dev;
9c261b33
JP
57 jffs2_dbg(1, "%s(): Writing %d bytes of kdev_t\n",
58 __func__, mdatalen);
1da177e4 59 } else if (S_ISLNK(inode->i_mode)) {
ced22070 60 mutex_lock(&f->sem);
1da177e4
LT
61 mdatalen = f->metadata->size;
62 mdata = kmalloc(f->metadata->size, GFP_USER);
422138dd 63 if (!mdata) {
ced22070 64 mutex_unlock(&f->sem);
1da177e4 65 return -ENOMEM;
422138dd 66 }
1da177e4
LT
67 ret = jffs2_read_dnode(c, f, f->metadata, mdata, 0, mdatalen);
68 if (ret) {
ced22070 69 mutex_unlock(&f->sem);
1da177e4
LT
70 kfree(mdata);
71 return ret;
72 }
ced22070 73 mutex_unlock(&f->sem);
9c261b33
JP
74 jffs2_dbg(1, "%s(): Writing %d bytes of symlink target\n",
75 __func__, mdatalen);
1da177e4
LT
76 }
77
78 ri = jffs2_alloc_raw_inode();
79 if (!ri) {
80 if (S_ISLNK(inode->i_mode))
81 kfree(mdata);
82 return -ENOMEM;
83 }
182ec4ee 84
9fe4854c
DW
85 ret = jffs2_reserve_space(c, sizeof(*ri) + mdatalen, &alloclen,
86 ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE);
1da177e4
LT
87 if (ret) {
88 jffs2_free_raw_inode(ri);
61effb51 89 if (S_ISLNK(inode->i_mode))
1da177e4
LT
90 kfree(mdata);
91 return ret;
92 }
ced22070 93 mutex_lock(&f->sem);
1da177e4 94 ivalid = iattr->ia_valid;
182ec4ee 95
1da177e4
LT
96 ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
97 ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
98 ri->totlen = cpu_to_je32(sizeof(*ri) + mdatalen);
99 ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
100
101 ri->ino = cpu_to_je32(inode->i_ino);
102 ri->version = cpu_to_je32(++f->highest_version);
103
0cfe53d3
EB
104 ri->uid = cpu_to_je16((ivalid & ATTR_UID)?
105 from_kuid(&init_user_ns, iattr->ia_uid):i_uid_read(inode));
106 ri->gid = cpu_to_je16((ivalid & ATTR_GID)?
107 from_kgid(&init_user_ns, iattr->ia_gid):i_gid_read(inode));
1da177e4
LT
108
109 if (ivalid & ATTR_MODE)
857013b8 110 ri->mode = cpu_to_jemode(iattr->ia_mode);
1da177e4
LT
111 else
112 ri->mode = cpu_to_jemode(inode->i_mode);
113
114
115 ri->isize = cpu_to_je32((ivalid & ATTR_SIZE)?iattr->ia_size:inode->i_size);
116 ri->atime = cpu_to_je32(I_SEC((ivalid & ATTR_ATIME)?iattr->ia_atime:inode->i_atime));
117 ri->mtime = cpu_to_je32(I_SEC((ivalid & ATTR_MTIME)?iattr->ia_mtime:inode->i_mtime));
118 ri->ctime = cpu_to_je32(I_SEC((ivalid & ATTR_CTIME)?iattr->ia_ctime:inode->i_ctime));
119
120 ri->offset = cpu_to_je32(0);
121 ri->csize = ri->dsize = cpu_to_je32(mdatalen);
122 ri->compr = JFFS2_COMPR_NONE;
123 if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) {
124 /* It's an extension. Make it a hole node */
125 ri->compr = JFFS2_COMPR_ZERO;
126 ri->dsize = cpu_to_je32(iattr->ia_size - inode->i_size);
127 ri->offset = cpu_to_je32(inode->i_size);
dd919660
DW
128 } else if (ivalid & ATTR_SIZE && !iattr->ia_size) {
129 /* For truncate-to-zero, treat it as deletion because
130 it'll always be obsoleting all previous nodes */
131 alloc_type = ALLOC_DELETION;
1da177e4
LT
132 }
133 ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
134 if (mdatalen)
135 ri->data_crc = cpu_to_je32(crc32(0, mdata, mdatalen));
136 else
137 ri->data_crc = cpu_to_je32(0);
138
dd919660 139 new_metadata = jffs2_write_dnode(c, f, ri, mdata, mdatalen, alloc_type);
1da177e4
LT
140 if (S_ISLNK(inode->i_mode))
141 kfree(mdata);
182ec4ee 142
1da177e4
LT
143 if (IS_ERR(new_metadata)) {
144 jffs2_complete_reservation(c);
145 jffs2_free_raw_inode(ri);
ced22070 146 mutex_unlock(&f->sem);
1da177e4
LT
147 return PTR_ERR(new_metadata);
148 }
149 /* It worked. Update the inode */
c4592b9c
AB
150 inode->i_atime = ITIME(je32_to_cpu(ri->atime));
151 inode->i_ctime = ITIME(je32_to_cpu(ri->ctime));
152 inode->i_mtime = ITIME(je32_to_cpu(ri->mtime));
1da177e4 153 inode->i_mode = jemode_to_cpu(ri->mode);
0cfe53d3
EB
154 i_uid_write(inode, je16_to_cpu(ri->uid));
155 i_gid_write(inode, je16_to_cpu(ri->gid));
1da177e4
LT
156
157
158 old_metadata = f->metadata;
159
160 if (ivalid & ATTR_SIZE && inode->i_size > iattr->ia_size)
f302cd02 161 jffs2_truncate_fragtree (c, &f->fragtree, iattr->ia_size);
1da177e4
LT
162
163 if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) {
164 jffs2_add_full_dnode_to_inode(c, f, new_metadata);
165 inode->i_size = iattr->ia_size;
b28ba9fa 166 inode->i_blocks = (inode->i_size + 511) >> 9;
1da177e4
LT
167 f->metadata = NULL;
168 } else {
169 f->metadata = new_metadata;
170 }
171 if (old_metadata) {
172 jffs2_mark_node_obsolete(c, old_metadata->raw);
173 jffs2_free_full_dnode(old_metadata);
174 }
175 jffs2_free_raw_inode(ri);
176
ced22070 177 mutex_unlock(&f->sem);
1da177e4
LT
178 jffs2_complete_reservation(c);
179
2c27c65e 180 /* We have to do the truncate_setsize() without f->sem held, since
182ec4ee 181 some pages may be locked and waiting for it in readpage().
1da177e4
LT
182 We are protected from a simultaneous write() extending i_size
183 back past iattr->ia_size, because do_truncate() holds the
184 generic inode semaphore. */
b28ba9fa 185 if (ivalid & ATTR_SIZE && inode->i_size > iattr->ia_size) {
2c27c65e 186 truncate_setsize(inode, iattr->ia_size);
b28ba9fa 187 inode->i_blocks = (inode->i_size + 511) >> 9;
ec10a24f 188 }
1da177e4
LT
189
190 return 0;
191}
192
193int jffs2_setattr(struct dentry *dentry, struct iattr *iattr)
194{
2b0143b5 195 struct inode *inode = d_inode(dentry);
aa98d7cf
KK
196 int rc;
197
31051c85 198 rc = setattr_prepare(dentry, iattr);
9ed437c5
DW
199 if (rc)
200 return rc;
201
f2963d45 202 rc = jffs2_do_setattr(inode, iattr);
aa98d7cf 203 if (!rc && (iattr->ia_valid & ATTR_MODE))
f2963d45 204 rc = posix_acl_chmod(inode, inode->i_mode);
9ed437c5 205
aa98d7cf 206 return rc;
1da177e4
LT
207}
208
726c3342 209int jffs2_statfs(struct dentry *dentry, struct kstatfs *buf)
1da177e4 210{
726c3342 211 struct jffs2_sb_info *c = JFFS2_SB_INFO(dentry->d_sb);
1da177e4
LT
212 unsigned long avail;
213
214 buf->f_type = JFFS2_SUPER_MAGIC;
215 buf->f_bsize = 1 << PAGE_SHIFT;
216 buf->f_blocks = c->flash_size >> PAGE_SHIFT;
217 buf->f_files = 0;
218 buf->f_ffree = 0;
219 buf->f_namelen = JFFS2_MAX_NAME_LEN;
75caf6b5
DW
220 buf->f_fsid.val[0] = JFFS2_SUPER_MAGIC;
221 buf->f_fsid.val[1] = c->mtd->index;
1da177e4
LT
222
223 spin_lock(&c->erase_completion_lock);
1da177e4
LT
224 avail = c->dirty_size + c->free_size;
225 if (avail > c->sector_size * c->resv_blocks_write)
226 avail -= c->sector_size * c->resv_blocks_write;
227 else
228 avail = 0;
e0c8e42f 229 spin_unlock(&c->erase_completion_lock);
1da177e4
LT
230
231 buf->f_bavail = buf->f_bfree = avail >> PAGE_SHIFT;
232
1da177e4
LT
233 return 0;
234}
235
236
b57922d9 237void jffs2_evict_inode (struct inode *inode)
1da177e4 238{
182ec4ee 239 /* We can forget about this inode for now - drop all
1da177e4
LT
240 * the nodelists associated with it, etc.
241 */
242 struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
243 struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
182ec4ee 244
9c261b33
JP
245 jffs2_dbg(1, "%s(): ino #%lu mode %o\n",
246 __func__, inode->i_ino, inode->i_mode);
91b0abe3 247 truncate_inode_pages_final(&inode->i_data);
dbd5768f 248 clear_inode(inode);
1da177e4
LT
249 jffs2_do_clear_inode(c, f);
250}
251
5451f79f 252struct inode *jffs2_iget(struct super_block *sb, unsigned long ino)
1da177e4
LT
253{
254 struct jffs2_inode_info *f;
255 struct jffs2_sb_info *c;
256 struct jffs2_raw_inode latest_node;
aef9ab47 257 union jffs2_device_node jdev;
5451f79f 258 struct inode *inode;
aef9ab47 259 dev_t rdev = 0;
1da177e4
LT
260 int ret;
261
9c261b33 262 jffs2_dbg(1, "%s(): ino == %lu\n", __func__, ino);
5451f79f
DH
263
264 inode = iget_locked(sb, ino);
265 if (!inode)
266 return ERR_PTR(-ENOMEM);
267 if (!(inode->i_state & I_NEW))
268 return inode;
1da177e4
LT
269
270 f = JFFS2_INODE_INFO(inode);
271 c = JFFS2_SB_INFO(inode->i_sb);
272
273 jffs2_init_inode_info(f);
ced22070 274 mutex_lock(&f->sem);
182ec4ee 275
1da177e4 276 ret = jffs2_do_read_inode(c, f, inode->i_ino, &latest_node);
7aaea760
BN
277 if (ret)
278 goto error;
1da177e4 279
1da177e4 280 inode->i_mode = jemode_to_cpu(latest_node.mode);
0cfe53d3
EB
281 i_uid_write(inode, je16_to_cpu(latest_node.uid));
282 i_gid_write(inode, je16_to_cpu(latest_node.gid));
1da177e4 283 inode->i_size = je32_to_cpu(latest_node.isize);
c4592b9c
AB
284 inode->i_atime = ITIME(je32_to_cpu(latest_node.atime));
285 inode->i_mtime = ITIME(je32_to_cpu(latest_node.mtime));
286 inode->i_ctime = ITIME(je32_to_cpu(latest_node.ctime));
1da177e4 287
bfe86848 288 set_nlink(inode, f->inocache->pino_nlink);
1da177e4 289
1da177e4 290 inode->i_blocks = (inode->i_size + 511) >> 9;
182ec4ee 291
1da177e4 292 switch (inode->i_mode & S_IFMT) {
1da177e4
LT
293
294 case S_IFLNK:
295 inode->i_op = &jffs2_symlink_inode_operations;
a8db149f 296 inode->i_link = f->target;
1da177e4 297 break;
182ec4ee 298
1da177e4
LT
299 case S_IFDIR:
300 {
301 struct jffs2_full_dirent *fd;
bfe86848 302 set_nlink(inode, 2); /* parent and '.' */
1da177e4
LT
303
304 for (fd=f->dents; fd; fd = fd->next) {
305 if (fd->type == DT_DIR && fd->ino)
d8c76e6f 306 inc_nlink(inode);
1da177e4 307 }
1da177e4
LT
308 /* Root dir gets i_nlink 3 for some reason */
309 if (inode->i_ino == 1)
d8c76e6f 310 inc_nlink(inode);
1da177e4
LT
311
312 inode->i_op = &jffs2_dir_inode_operations;
313 inode->i_fop = &jffs2_dir_operations;
314 break;
315 }
316 case S_IFREG:
317 inode->i_op = &jffs2_file_inode_operations;
318 inode->i_fop = &jffs2_file_operations;
319 inode->i_mapping->a_ops = &jffs2_file_address_operations;
320 inode->i_mapping->nrpages = 0;
321 break;
322
323 case S_IFBLK:
324 case S_IFCHR:
325 /* Read the device numbers from the media */
91f80266
AM
326 if (f->metadata->size != sizeof(jdev.old_id) &&
327 f->metadata->size != sizeof(jdev.new_id)) {
da320f05
JP
328 pr_notice("Device node has strange size %d\n",
329 f->metadata->size);
5451f79f 330 goto error_io;
aef9ab47 331 }
9c261b33 332 jffs2_dbg(1, "Reading device numbers from flash\n");
5451f79f
DH
333 ret = jffs2_read_dnode(c, f, f->metadata, (char *)&jdev, 0, f->metadata->size);
334 if (ret < 0) {
1da177e4 335 /* Eep */
da320f05
JP
336 pr_notice("Read device numbers for inode %lu failed\n",
337 (unsigned long)inode->i_ino);
5451f79f 338 goto error;
182ec4ee 339 }
91f80266
AM
340 if (f->metadata->size == sizeof(jdev.old_id))
341 rdev = old_decode_dev(je16_to_cpu(jdev.old_id));
aef9ab47 342 else
91f80266 343 rdev = new_decode_dev(je32_to_cpu(jdev.new_id));
0a4c9265 344 /* fall through */
1da177e4
LT
345
346 case S_IFSOCK:
347 case S_IFIFO:
348 inode->i_op = &jffs2_file_inode_operations;
aef9ab47 349 init_special_inode(inode, inode->i_mode, rdev);
1da177e4
LT
350 break;
351
352 default:
da320f05
JP
353 pr_warn("%s(): Bogus i_mode %o for ino %lu\n",
354 __func__, inode->i_mode, (unsigned long)inode->i_ino);
1da177e4
LT
355 }
356
ced22070 357 mutex_unlock(&f->sem);
1da177e4 358
9c261b33 359 jffs2_dbg(1, "jffs2_read_inode() returning\n");
5451f79f
DH
360 unlock_new_inode(inode);
361 return inode;
362
363error_io:
364 ret = -EIO;
365error:
ced22070 366 mutex_unlock(&f->sem);
5451f79f
DH
367 iget_failed(inode);
368 return ERR_PTR(ret);
1da177e4
LT
369}
370
aa385729 371void jffs2_dirty_inode(struct inode *inode, int flags)
1da177e4
LT
372{
373 struct iattr iattr;
374
375 if (!(inode->i_state & I_DIRTY_DATASYNC)) {
9c261b33
JP
376 jffs2_dbg(2, "%s(): not calling setattr() for ino #%lu\n",
377 __func__, inode->i_ino);
1da177e4
LT
378 return;
379 }
380
9c261b33
JP
381 jffs2_dbg(1, "%s(): calling setattr() for ino #%lu\n",
382 __func__, inode->i_ino);
1da177e4
LT
383
384 iattr.ia_valid = ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_MTIME|ATTR_CTIME;
385 iattr.ia_mode = inode->i_mode;
386 iattr.ia_uid = inode->i_uid;
387 iattr.ia_gid = inode->i_gid;
388 iattr.ia_atime = inode->i_atime;
389 iattr.ia_mtime = inode->i_mtime;
390 iattr.ia_ctime = inode->i_ctime;
391
392 jffs2_do_setattr(inode, &iattr);
393}
394
ec10a24f 395int jffs2_do_remount_fs(struct super_block *sb, struct fs_context *fc)
1da177e4
LT
396{
397 struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
398
bc98a42c 399 if (c->flags & JFFS2_SB_FLAG_RO && !sb_rdonly(sb))
1da177e4
LT
400 return -EROFS;
401
402 /* We stop if it was running, then restart if it needs to.
403 This also catches the case where it was stopped and this
404 is just a remount to restart it.
405 Flush the writebuffer, if neccecary, else we loose it */
bc98a42c 406 if (!sb_rdonly(sb)) {
1da177e4 407 jffs2_stop_garbage_collect_thread(c);
ced22070 408 mutex_lock(&c->alloc_sem);
1da177e4 409 jffs2_flush_wbuf_pad(c);
ced22070 410 mutex_unlock(&c->alloc_sem);
182ec4ee 411 }
1da177e4 412
ec10a24f 413 if (!(fc->sb_flags & SB_RDONLY))
1da177e4 414 jffs2_start_garbage_collect_thread(c);
182ec4ee 415
ec10a24f 416 fc->sb_flags |= SB_NOATIME;
1da177e4
LT
417 return 0;
418}
419
1da177e4
LT
420/* jffs2_new_inode: allocate a new inode and inocache, add it to the hash,
421 fill in the raw_inode while you're at it. */
d3fb6120 422struct inode *jffs2_new_inode (struct inode *dir_i, umode_t mode, struct jffs2_raw_inode *ri)
1da177e4
LT
423{
424 struct inode *inode;
425 struct super_block *sb = dir_i->i_sb;
426 struct jffs2_sb_info *c;
427 struct jffs2_inode_info *f;
428 int ret;
429
9c261b33
JP
430 jffs2_dbg(1, "%s(): dir_i %ld, mode 0x%x\n",
431 __func__, dir_i->i_ino, mode);
1da177e4
LT
432
433 c = JFFS2_SB_INFO(sb);
182ec4ee 434
1da177e4 435 inode = new_inode(sb);
182ec4ee 436
1da177e4
LT
437 if (!inode)
438 return ERR_PTR(-ENOMEM);
439
440 f = JFFS2_INODE_INFO(inode);
441 jffs2_init_inode_info(f);
ced22070 442 mutex_lock(&f->sem);
1da177e4
LT
443
444 memset(ri, 0, sizeof(*ri));
445 /* Set OS-specific defaults for new inodes */
0cfe53d3 446 ri->uid = cpu_to_je16(from_kuid(&init_user_ns, current_fsuid()));
1da177e4
LT
447
448 if (dir_i->i_mode & S_ISGID) {
0cfe53d3 449 ri->gid = cpu_to_je16(i_gid_read(dir_i));
1da177e4
LT
450 if (S_ISDIR(mode))
451 mode |= S_ISGID;
452 } else {
0cfe53d3 453 ri->gid = cpu_to_je16(from_kgid(&init_user_ns, current_fsgid()));
1da177e4 454 }
9ed437c5
DW
455
456 /* POSIX ACLs have to be processed now, at least partly.
457 The umask is only applied if there's no default ACL */
cfc8dc6f
KK
458 ret = jffs2_init_acl_pre(dir_i, inode, &mode);
459 if (ret) {
01887a3a
WG
460 mutex_unlock(&f->sem);
461 make_bad_inode(inode);
462 iput(inode);
463 return ERR_PTR(ret);
9ed437c5 464 }
1da177e4
LT
465 ret = jffs2_do_new_inode (c, f, mode, ri);
466 if (ret) {
01887a3a 467 mutex_unlock(&f->sem);
1da177e4
LT
468 make_bad_inode(inode);
469 iput(inode);
470 return ERR_PTR(ret);
471 }
bfe86848 472 set_nlink(inode, 1);
1da177e4
LT
473 inode->i_ino = je32_to_cpu(ri->ino);
474 inode->i_mode = jemode_to_cpu(ri->mode);
0cfe53d3
EB
475 i_gid_write(inode, je16_to_cpu(ri->gid));
476 i_uid_write(inode, je16_to_cpu(ri->uid));
02027d42 477 inode->i_atime = inode->i_ctime = inode->i_mtime = current_time(inode);
1da177e4
LT
478 ri->atime = ri->mtime = ri->ctime = cpu_to_je32(I_SEC(inode->i_mtime));
479
1da177e4
LT
480 inode->i_blocks = 0;
481 inode->i_size = 0;
482
e72e6497 483 if (insert_inode_locked(inode) < 0) {
01887a3a 484 mutex_unlock(&f->sem);
e72e6497 485 make_bad_inode(inode);
e72e6497
DW
486 iput(inode);
487 return ERR_PTR(-EINVAL);
488 }
1da177e4
LT
489
490 return inode;
491}
492
65e5a0e1
DD
493static int calculate_inocache_hashsize(uint32_t flash_size)
494{
495 /*
496 * Pick a inocache hash size based on the size of the medium.
497 * Count how many megabytes we're dealing with, apply a hashsize twice
498 * that size, but rounding down to the usual big powers of 2. And keep
499 * to sensible bounds.
500 */
501
502 int size_mb = flash_size / 1024 / 1024;
503 int hashsize = (size_mb * 2) & ~0x3f;
504
505 if (hashsize < INOCACHE_HASHSIZE_MIN)
506 return INOCACHE_HASHSIZE_MIN;
507 if (hashsize > INOCACHE_HASHSIZE_MAX)
508 return INOCACHE_HASHSIZE_MAX;
509
510 return hashsize;
511}
1da177e4 512
ec10a24f 513int jffs2_do_fill_super(struct super_block *sb, struct fs_context *fc)
1da177e4
LT
514{
515 struct jffs2_sb_info *c;
516 struct inode *root_i;
517 int ret;
518 size_t blocks;
519
520 c = JFFS2_SB_INFO(sb);
521
e104f1e9
HS
522 /* Do not support the MLC nand */
523 if (c->mtd->type == MTD_MLCNANDFLASH)
524 return -EINVAL;
525
2f82ce1e 526#ifndef CONFIG_JFFS2_FS_WRITEBUFFER
1da177e4 527 if (c->mtd->type == MTD_NANDFLASH) {
ec10a24f 528 errorf(fc, "Cannot operate on NAND flash unless jffs2 NAND support is compiled in");
1da177e4
LT
529 return -EINVAL;
530 }
8f15fd55 531 if (c->mtd->type == MTD_DATAFLASH) {
ec10a24f 532 errorf(fc, "Cannot operate on DataFlash unless jffs2 DataFlash support is compiled in");
8f15fd55
AV
533 return -EINVAL;
534 }
535#endif
1da177e4
LT
536
537 c->flash_size = c->mtd->size;
182ec4ee 538 c->sector_size = c->mtd->erasesize;
1da177e4 539 blocks = c->flash_size / c->sector_size;
1da177e4
LT
540
541 /*
542 * Size alignment check
543 */
544 if ((c->sector_size * blocks) != c->flash_size) {
182ec4ee 545 c->flash_size = c->sector_size * blocks;
ec10a24f
DH
546 infof(fc, "Flash size not aligned to erasesize, reducing to %dKiB",
547 c->flash_size / 1024);
1da177e4
LT
548 }
549
1da177e4 550 if (c->flash_size < 5*c->sector_size) {
ec10a24f 551 errorf(fc, "Too few erase blocks (%d)",
da320f05 552 c->flash_size / c->sector_size);
1da177e4
LT
553 return -EINVAL;
554 }
555
556 c->cleanmarker_size = sizeof(struct jffs2_unknown_node);
1da177e4
LT
557
558 /* NAND (or other bizarre) flash... do setup accordingly */
559 ret = jffs2_flash_setup(c);
560 if (ret)
561 return ret;
562
65e5a0e1
DD
563 c->inocache_hashsize = calculate_inocache_hashsize(c->flash_size);
564 c->inocache_list = kcalloc(c->inocache_hashsize, sizeof(struct jffs2_inode_cache *), GFP_KERNEL);
1da177e4
LT
565 if (!c->inocache_list) {
566 ret = -ENOMEM;
567 goto out_wbuf;
568 }
1da177e4 569
aa98d7cf
KK
570 jffs2_init_xattr_subsystem(c);
571
1da177e4
LT
572 if ((ret = jffs2_do_mount_fs(c)))
573 goto out_inohash;
574
9c261b33 575 jffs2_dbg(1, "%s(): Getting root inode\n", __func__);
5451f79f
DH
576 root_i = jffs2_iget(sb, 1);
577 if (IS_ERR(root_i)) {
9c261b33 578 jffs2_dbg(1, "get root inode failed\n");
5451f79f
DH
579 ret = PTR_ERR(root_i);
580 goto out_root;
1da177e4
LT
581 }
582
5451f79f
DH
583 ret = -ENOMEM;
584
623ff773 585 jffs2_dbg(1, "%s(): d_make_root()\n", __func__);
48fde701 586 sb->s_root = d_make_root(root_i);
1da177e4 587 if (!sb->s_root)
48fde701 588 goto out_root;
1da177e4 589
1da177e4 590 sb->s_maxbytes = 0xFFFFFFFF;
09cbfeaf
KS
591 sb->s_blocksize = PAGE_SIZE;
592 sb->s_blocksize_bits = PAGE_SHIFT;
1da177e4 593 sb->s_magic = JFFS2_SUPER_MAGIC;
22b13969
DD
594 sb->s_time_min = 0;
595 sb->s_time_max = U32_MAX;
596
bc98a42c 597 if (!sb_rdonly(sb))
1da177e4
LT
598 jffs2_start_garbage_collect_thread(c);
599 return 0;
600
5451f79f 601out_root:
1da177e4
LT
602 jffs2_free_ino_caches(c);
603 jffs2_free_raw_node_refs(c);
1d5cfdb0 604 kvfree(c->blocks);
1da177e4 605 out_inohash:
aa98d7cf 606 jffs2_clear_xattr_subsystem(c);
1da177e4
LT
607 kfree(c->inocache_list);
608 out_wbuf:
609 jffs2_flash_cleanup(c);
610
611 return ret;
612}
613
614void jffs2_gc_release_inode(struct jffs2_sb_info *c,
615 struct jffs2_inode_info *f)
616{
617 iput(OFNI_EDONI_2SFFJ(f));
618}
619
620struct jffs2_inode_info *jffs2_gc_fetch_inode(struct jffs2_sb_info *c,
1b690b48 621 int inum, int unlinked)
1da177e4
LT
622{
623 struct inode *inode;
624 struct jffs2_inode_cache *ic;
1b690b48
DW
625
626 if (unlinked) {
1da177e4 627 /* The inode has zero nlink but its nodes weren't yet marked
182ec4ee 628 obsolete. This has to be because we're still waiting for
1da177e4
LT
629 the final (close() and) iput() to happen.
630
182ec4ee 631 There's a possibility that the final iput() could have
1da177e4
LT
632 happened while we were contemplating. In order to ensure
633 that we don't cause a new read_inode() (which would fail)
634 for the inode in question, we use ilookup() in this case
635 instead of iget().
636
182ec4ee 637 The nlink can't _become_ zero at this point because we're
1da177e4
LT
638 holding the alloc_sem, and jffs2_do_unlink() would also
639 need that while decrementing nlink on any inode.
640 */
641 inode = ilookup(OFNI_BS_2SFFJ(c), inum);
642 if (!inode) {
9c261b33
JP
643 jffs2_dbg(1, "ilookup() failed for ino #%u; inode is probably deleted.\n",
644 inum);
1da177e4
LT
645
646 spin_lock(&c->inocache_lock);
647 ic = jffs2_get_ino_cache(c, inum);
648 if (!ic) {
9c261b33
JP
649 jffs2_dbg(1, "Inode cache for ino #%u is gone\n",
650 inum);
1da177e4
LT
651 spin_unlock(&c->inocache_lock);
652 return NULL;
653 }
654 if (ic->state != INO_STATE_CHECKEDABSENT) {
655 /* Wait for progress. Don't just loop */
9c261b33
JP
656 jffs2_dbg(1, "Waiting for ino #%u in state %d\n",
657 ic->ino, ic->state);
1da177e4
LT
658 sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock);
659 } else {
660 spin_unlock(&c->inocache_lock);
661 }
662
663 return NULL;
664 }
665 } else {
666 /* Inode has links to it still; they're not going away because
667 jffs2_do_unlink() would need the alloc_sem and we have it.
668 Just iget() it, and if read_inode() is necessary that's OK.
669 */
5451f79f
DH
670 inode = jffs2_iget(OFNI_BS_2SFFJ(c), inum);
671 if (IS_ERR(inode))
672 return ERR_CAST(inode);
1da177e4
LT
673 }
674 if (is_bad_inode(inode)) {
da320f05
JP
675 pr_notice("Eep. read_inode() failed for ino #%u. unlinked %d\n",
676 inum, unlinked);
1da177e4
LT
677 /* NB. This will happen again. We need to do something appropriate here. */
678 iput(inode);
679 return ERR_PTR(-EIO);
680 }
681
682 return JFFS2_INODE_INFO(inode);
683}
684
1da177e4
LT
685static int jffs2_flash_setup(struct jffs2_sb_info *c) {
686 int ret = 0;
182ec4ee 687
1da177e4
LT
688 if (jffs2_cleanmarker_oob(c)) {
689 /* NAND flash... do setup accordingly */
690 ret = jffs2_nand_flash_setup(c);
691 if (ret)
692 return ret;
693 }
694
8f15fd55
AV
695 /* and Dataflash */
696 if (jffs2_dataflash(c)) {
697 ret = jffs2_dataflash_setup(c);
698 if (ret)
699 return ret;
700 }
59da721a
NP
701
702 /* and Intel "Sibley" flash */
703 if (jffs2_nor_wbuf_flash(c)) {
704 ret = jffs2_nor_wbuf_flash_setup(c);
705 if (ret)
706 return ret;
707 }
708
0029da3b
AB
709 /* and an UBI volume */
710 if (jffs2_ubivol(c)) {
711 ret = jffs2_ubivol_setup(c);
712 if (ret)
713 return ret;
714 }
715
1da177e4
LT
716 return ret;
717}
718
719void jffs2_flash_cleanup(struct jffs2_sb_info *c) {
720
721 if (jffs2_cleanmarker_oob(c)) {
722 jffs2_nand_flash_cleanup(c);
723 }
724
8f15fd55
AV
725 /* and DataFlash */
726 if (jffs2_dataflash(c)) {
727 jffs2_dataflash_cleanup(c);
728 }
59da721a
NP
729
730 /* and Intel "Sibley" flash */
731 if (jffs2_nor_wbuf_flash(c)) {
732 jffs2_nor_wbuf_flash_cleanup(c);
733 }
0029da3b
AB
734
735 /* and an UBI volume */
736 if (jffs2_ubivol(c)) {
737 jffs2_ubivol_cleanup(c);
738 }
1da177e4 739}