Skip to content

Commit 21215ce

Browse files
LATENTBOUNCEbrauner
authored andcommitted
Add error handling to minix filesystem for inode corruption detection
We would like to provide early and specific warnings of filesystem corruption without running into generic WARN_ONs and BUG_ONs. Towards this goal, ext4, e.g., has a EFSCORRUPTED errno and a standardized inode corruption message format. This patch adds this errno and message format to the minix filesystem. Signed-off-by: Jori Koolstra <jkoolstra@xs4all.nl> Link: https://patch.msgid.link/20251104143005.3283980-2-jkoolstra@xs4all.nl Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent 3a86608 commit 21215ce

2 files changed

Lines changed: 25 additions & 0 deletions

File tree

fs/minix/inode.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,22 @@ static int minix_write_inode(struct inode *inode,
2626
struct writeback_control *wbc);
2727
static int minix_statfs(struct dentry *dentry, struct kstatfs *buf);
2828

29+
void __minix_error_inode(struct inode *inode, const char *function,
30+
unsigned int line, const char *fmt, ...)
31+
{
32+
struct va_format vaf;
33+
va_list args;
34+
35+
va_start(args, fmt);
36+
vaf.fmt = fmt;
37+
vaf.va = &args;
38+
printk(KERN_CRIT "minix-fs error (device %s): %s:%d: "
39+
"inode #%lu: comm %s: %pV\n",
40+
inode->i_sb->s_id, function, line, inode->i_ino,
41+
current->comm, &vaf);
42+
va_end(args);
43+
}
44+
2945
static void minix_evict_inode(struct inode *inode)
3046
{
3147
truncate_inode_pages_final(&inode->i_data);

fs/minix/minix.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ struct minix_sb_info {
4242
unsigned short s_version;
4343
};
4444

45+
void __minix_error_inode(struct inode *inode, const char *function,
46+
unsigned int line, const char *fmt, ...);
47+
4548
struct inode *minix_iget(struct super_block *, unsigned long);
4649
struct minix_inode *minix_V1_raw_inode(struct super_block *, ino_t, struct buffer_head **);
4750
struct minix2_inode *minix_V2_raw_inode(struct super_block *, ino_t, struct buffer_head **);
@@ -168,4 +171,10 @@ static inline int minix_test_bit(int nr, const void *vaddr)
168171

169172
#endif
170173

174+
#define minix_error_inode(inode, fmt, ...) \
175+
__minix_error_inode((inode), __func__, __LINE__, \
176+
(fmt), ##__VA_ARGS__)
177+
178+
#define EFSCORRUPTED EUCLEAN /* Filesystem is corrupted */
179+
171180
#endif /* FS_MINIX_H */

0 commit comments

Comments
 (0)