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>
pull/1354/merge
Jori Koolstra 2025-11-04 15:30:03 +01:00 committed by Christian Brauner
parent 3a86608788
commit 21215ce7a9
No known key found for this signature in database
GPG Key ID: 91C61BC06578DCA2
2 changed files with 25 additions and 0 deletions

View File

@ -26,6 +26,22 @@ static int minix_write_inode(struct inode *inode,
struct writeback_control *wbc);
static int minix_statfs(struct dentry *dentry, struct kstatfs *buf);
void __minix_error_inode(struct inode *inode, const char *function,
unsigned int line, const char *fmt, ...)
{
struct va_format vaf;
va_list args;
va_start(args, fmt);
vaf.fmt = fmt;
vaf.va = &args;
printk(KERN_CRIT "minix-fs error (device %s): %s:%d: "
"inode #%lu: comm %s: %pV\n",
inode->i_sb->s_id, function, line, inode->i_ino,
current->comm, &vaf);
va_end(args);
}
static void minix_evict_inode(struct inode *inode)
{
truncate_inode_pages_final(&inode->i_data);

View File

@ -42,6 +42,9 @@ struct minix_sb_info {
unsigned short s_version;
};
void __minix_error_inode(struct inode *inode, const char *function,
unsigned int line, const char *fmt, ...);
struct inode *minix_iget(struct super_block *, unsigned long);
struct minix_inode *minix_V1_raw_inode(struct super_block *, ino_t, struct buffer_head **);
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)
#endif
#define minix_error_inode(inode, fmt, ...) \
__minix_error_inode((inode), __func__, __LINE__, \
(fmt), ##__VA_ARGS__)
#define EFSCORRUPTED EUCLEAN /* Filesystem is corrupted */
#endif /* FS_MINIX_H */