diff options
author | Kai Bankett <chaosman@ontika.net> | 2012-02-16 23:59:20 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-03-20 21:29:38 -0400 |
commit | 5d026c7242201e7c9d0e12fcb2bcaffead9d59fd (patch) | |
tree | 3a3663fd35e3077574e30cf705a614ede69925eb /fs/qnx6/namei.c | |
parent | 516cdb68e5b44ca1bef31619f5da8d5e9e298f88 (diff) |
fs: initial qnx6fs addition
Adds support for qnx6fs readonly support to the linux kernel.
* Mount option
The option mmi_fs can be used to mount Harman Becker/Audi MMI 3G
HDD qnx6fs filesystems.
* Documentation
A high level filesystem stucture description can be found in the
Documentation/filesystems directory. (qnx6.txt)
* Additional features
- Active (stable) superblock selection
- Superblock checksum check (enforced)
- Supports mount of qnx6 filesystems with to host different endianess
- Automatic endianess detection
- Longfilename support (with non-enfocing crc check)
- All blocksizes (512, 1024, 2048 and 4096 supported)
Signed-off-by: Kai Bankett <chaosman@ontika.net>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/qnx6/namei.c')
-rw-r--r-- | fs/qnx6/namei.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/fs/qnx6/namei.c b/fs/qnx6/namei.c new file mode 100644 index 000000000000..8a97289e04ad --- /dev/null +++ b/fs/qnx6/namei.c | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * QNX6 file system, Linux implementation. | ||
3 | * | ||
4 | * Version : 1.0.0 | ||
5 | * | ||
6 | * History : | ||
7 | * | ||
8 | * 01-02-2012 by Kai Bankett (chaosman@ontika.net) : first release. | ||
9 | * 16-02-2012 pagemap extension by Al Viro | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #include "qnx6.h" | ||
14 | |||
15 | struct dentry *qnx6_lookup(struct inode *dir, struct dentry *dentry, | ||
16 | struct nameidata *nd) | ||
17 | { | ||
18 | unsigned ino; | ||
19 | struct page *page; | ||
20 | struct inode *foundinode = NULL; | ||
21 | const char *name = dentry->d_name.name; | ||
22 | int len = dentry->d_name.len; | ||
23 | |||
24 | if (len > QNX6_LONG_NAME_MAX) | ||
25 | return ERR_PTR(-ENAMETOOLONG); | ||
26 | |||
27 | ino = qnx6_find_entry(len, dir, name, &page); | ||
28 | if (ino) { | ||
29 | foundinode = qnx6_iget(dir->i_sb, ino); | ||
30 | qnx6_put_page(page); | ||
31 | if (IS_ERR(foundinode)) { | ||
32 | QNX6DEBUG((KERN_ERR "qnx6: lookup->iget -> " | ||
33 | " error %ld\n", PTR_ERR(foundinode))); | ||
34 | return ERR_CAST(foundinode); | ||
35 | } | ||
36 | } else { | ||
37 | QNX6DEBUG((KERN_INFO "qnx6_lookup: not found %s\n", name)); | ||
38 | return NULL; | ||
39 | } | ||
40 | d_add(dentry, foundinode); | ||
41 | return NULL; | ||
42 | } | ||