summaryrefslogtreecommitdiffstats
path: root/fs/isofs/inode.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-07 02:25:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-07 02:25:20 +0000
commit8372e24aca862ae1fdd54a442fba92dc9b4b6161 (patch)
tree5fb60c5cd3d6bb6496650d1605a3c51d09be2bf1 /fs/isofs/inode.c
parentAdding debian version 6.1.85-1. (diff)
downloadlinux-8372e24aca862ae1fdd54a442fba92dc9b4b6161.tar.xz
linux-8372e24aca862ae1fdd54a442fba92dc9b4b6161.zip
Merging upstream version 6.1.90.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'fs/isofs/inode.c')
-rw-r--r--fs/isofs/inode.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
index df9d70588..8a6c7fdc1 100644
--- a/fs/isofs/inode.c
+++ b/fs/isofs/inode.c
@@ -908,8 +908,22 @@ root_found:
* we then decide whether to use the Joliet descriptor.
*/
inode = isofs_iget(s, sbi->s_firstdatazone, 0);
- if (IS_ERR(inode))
- goto out_no_root;
+
+ /*
+ * Fix for broken CDs with a corrupt root inode but a correct Joliet
+ * root directory.
+ */
+ if (IS_ERR(inode)) {
+ if (joliet_level && sbi->s_firstdatazone != first_data_zone) {
+ printk(KERN_NOTICE
+ "ISOFS: root inode is unusable. "
+ "Disabling Rock Ridge and switching to Joliet.");
+ sbi->s_rock = 0;
+ inode = NULL;
+ } else {
+ goto out_no_root;
+ }
+ }
/*
* Fix for broken CDs with Rock Ridge and empty ISO root directory but