summaryrefslogtreecommitdiffstats
path: root/fs/udf/udfdecl.h
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2014-10-09 06:52:16 -0400
committerJan Kara <jack@suse.cz>2014-10-09 07:06:14 -0400
commit6174c2eb8ecef271159bdcde460ce8af54d8f72f (patch)
treefc00824fdd8231ac9ee32714fc86493149af29d1 /fs/udf/udfdecl.h
parentc53f755d339b5546600c316333140d5fe958941d (diff)
udf: Fix loading of special inodes
Some UDF media have special inodes (like VAT or metadata partition inodes) whose link_count is 0. Thus commit 4071b9136223 (udf: Properly detect stale inodes) broke loading these inodes because udf_iget() started returning -ESTALE for them. Since we still need to properly detect stale inodes queried by NFS, create two variants of udf_iget() - one which is used for looking up special inodes (which ignores link_count == 0) and one which is used for other cases which return ESTALE when link_count == 0. Fixes: 4071b913622316970d0e1919f7d82b4403fec5f2 CC: stable@vger.kernel.org Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/udf/udfdecl.h')
-rw-r--r--fs/udf/udfdecl.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h
index 742557be9936..1cc3c993ebd0 100644
--- a/fs/udf/udfdecl.h
+++ b/fs/udf/udfdecl.h
@@ -138,7 +138,18 @@ extern int udf_write_fi(struct inode *inode, struct fileIdentDesc *,
138/* file.c */ 138/* file.c */
139extern long udf_ioctl(struct file *, unsigned int, unsigned long); 139extern long udf_ioctl(struct file *, unsigned int, unsigned long);
140/* inode.c */ 140/* inode.c */
141extern struct inode *udf_iget(struct super_block *, struct kernel_lb_addr *); 141extern struct inode *__udf_iget(struct super_block *, struct kernel_lb_addr *,
142 bool hidden_inode);
143static inline struct inode *udf_iget_special(struct super_block *sb,
144 struct kernel_lb_addr *ino)
145{
146 return __udf_iget(sb, ino, true);
147}
148static inline struct inode *udf_iget(struct super_block *sb,
149 struct kernel_lb_addr *ino)
150{
151 return __udf_iget(sb, ino, false);
152}
142extern int udf_expand_file_adinicb(struct inode *); 153extern int udf_expand_file_adinicb(struct inode *);
143extern struct buffer_head *udf_expand_dir_adinicb(struct inode *, int *, int *); 154extern struct buffer_head *udf_expand_dir_adinicb(struct inode *, int *, int *);
144extern struct buffer_head *udf_bread(struct inode *, int, int, int *); 155extern struct buffer_head *udf_bread(struct inode *, int, int, int *);