nilfs2-replace-warn_ons-for-invalid-dat-metadata-block-requests.patch removed from -mm tree
The quilt patch titled
Subject: nilfs2: replace WARN_ONs for invalid DAT metadata block requests
has been removed from the -mm tree. Its filename was
nilfs2-replace-warn_ons-for-invalid-dat-metadata-block-requests.patch
This patch was dropped because it was merged into the mm-nonmm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Ryusuke Konishi <[email protected]>
Subject: nilfs2: replace WARN_ONs for invalid DAT metadata block requests
Date: Fri, 27 Jan 2023 01:41:14 +0900
If DAT metadata file block access fails due to corruption of the DAT file or abnormal virtual block numbers held by b-trees or inodes, a kernel warning is generated.
This replaces the WARN_ONs by error output, so that a kernel, booted with panic_on_warn, does not panic. This patch also replaces the detected return code -ENOENT with another internal code -EINVAL to notify the bmap layer of metadata corruption. When the bmap layer sees -EINVAL, it handles the abnormal situation with nilfs_bmap_convert_error() and finally returns code -EIO as it should.
---
fs/nilfs2/dat.c renamed from fs/nilfs2/dat.c~nilfs2-replace-warn_ons-for-invalid-dat-metadata-block-requests +17 -10
@@ -40,8 +40,21 @@ static inline struct nilfs_dat_info *NILstatic int nilfs_dat_prepare_entry (struct inode *dat,struct nilfs_palloc_req *req,int create) { -return nilfs_palloc_get_entry_block (dat, req->pr_entry_nr, - create, &req->pr_entry_bh); +int ret; + + ret =nilfs_palloc_get_entry_block (dat, req->pr_entry_nr, + create, &req->pr_entry_bh); +if (unlikely (ret == -ENOENT )) { +nilfs_err (dat->i_sb, +"DAT doesn't have a block to manage vblocknr = %llu" , + (unsigned long long )req->pr_entry_nr); +/* +* Return internal code -EINVAL to notify bmap layer of +* metadata corruption. +*/ + ret = -EINVAL ; + } +return ret; } static void nilfs_dat_commit_entry(struct inode *dat,
@@ -123,11 +136,7 @@ static void nilfs_dat_commit_free(structint nilfs_dat_prepare_start (struct inode *dat,struct nilfs_palloc_req *req) { -int ret; - - ret =nilfs_dat_prepare_entry (dat, req,0 ); -WARN_ON (ret == -ENOENT ); -return ret; +return nilfs_dat_prepare_entry (dat, req,0 ); } void nilfs_dat_commit_start(struct inode *dat, struct nilfs_palloc_req *req,
@@ -154,10 +163,8 @@ int nilfs_dat_prepare_end(struct inode *int ret; ret =nilfs_dat_prepare_entry (dat, req,0 ); -if (ret <0 ) { -WARN_ON (ret == -ENOENT ); +if (ret <0 )return ret; - } kaddr =kmap_atomic (req->pr_entry_bh->b_page); entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
_
Patches currently in -mm which might be from [email protected] are