blob: 2e4a86763c07cd12b945518690768c4a0388de5f [file] [log] [blame]
David Woodhousec00c3102007-04-25 14:16:47 +01001/*
2 * JFFS2 -- Journalling Flash File System, Version 2.
3 *
4 * Copyright © 2001-2007 Red Hat, Inc.
David Woodhouse6088c052010-08-08 14:15:22 +01005 * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org>
David Woodhousec00c3102007-04-25 14:16:47 +01006 *
7 * Created by David Woodhouse <dwmw2@infradead.org>
8 *
9 * For licensing information, see the file 'LICENCE' in this directory.
10 *
11 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070012
13#ifndef _JFFS2_FS_I
14#define _JFFS2_FS_I
15
Linus Torvalds1da177e2005-04-16 15:20:36 -070016#include <linux/rbtree.h>
KaiGai Koheiaa98d7c2006-05-13 15:09:47 +090017#include <linux/posix_acl.h>
David Woodhousecf9d1e42008-04-22 23:53:26 +010018#include <linux/mutex.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070019
20struct jffs2_inode_info {
Jes Sorensen1b1dcc12006-01-09 15:59:24 -080021 /* We need an internal mutex similar to inode->i_mutex.
Linus Torvalds1da177e2005-04-16 15:20:36 -070022 Unfortunately, we can't used the existing one, because
23 either the GC would deadlock, or we'd have to release it
24 before letting GC proceed. Or we'd have to put ugliness
Jes Sorensen1b1dcc12006-01-09 15:59:24 -080025 into the GC code so it didn't attempt to obtain the i_mutex
Linus Torvalds1da177e2005-04-16 15:20:36 -070026 for the inode(s) which are already locked */
David Woodhouseced22072008-04-22 15:13:40 +010027 struct mutex sem;
Linus Torvalds1da177e2005-04-16 15:20:36 -070028
29 /* The highest (datanode) version number used for this ino */
30 uint32_t highest_version;
31
32 /* List of data fragments which make up the file */
33 struct rb_root fragtree;
34
35 /* There may be one datanode which isn't referenced by any of the
36 above fragments, if it contains a metadata update but no actual
37 data - or if this is a directory inode */
Thomas Gleixner182ec4e2005-11-07 11:16:07 +000038 /* This also holds the _only_ dnode for symlinks/device nodes,
Linus Torvalds1da177e2005-04-16 15:20:36 -070039 etc. */
40 struct jffs2_full_dnode *metadata;
41
42 /* Directory entries */
43 struct jffs2_full_dirent *dents;
44
Artem B. Bityutskiy2b79adc2005-07-17 12:13:51 +010045 /* The target path if this is the inode of a symlink */
46 unsigned char *target;
47
Linus Torvalds1da177e2005-04-16 15:20:36 -070048 /* Some stuff we just have to keep in-core at all times, for each inode. */
49 struct jffs2_inode_cache *inocache;
50
51 uint16_t flags;
52 uint8_t usercompr;
Linus Torvalds1da177e2005-04-16 15:20:36 -070053 struct inode vfs_inode;
Linus Torvalds1da177e2005-04-16 15:20:36 -070054};
55
56#endif /* _JFFS2_FS_I */