mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
ntfs: ignore interrupted inode reads as corruption
Do not mark the volume in error or report an inode as corrupt when
reading it was interrupted by a signal. -EINTR and -ERESTARTSYS indicate
a transient read failure rather than on-disk NTFS corruption.
Fixes: 115380f9a2 ("ntfs: update mft operations")
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
This commit is contained in:
parent
1923eeffa6
commit
8c5dc7587f
|
|
@ -1241,7 +1241,8 @@ static int ntfs_read_locked_inode(struct inode *vi)
|
|||
if (m)
|
||||
unmap_mft_record(ni);
|
||||
err_out:
|
||||
if (err != -EOPNOTSUPP && err != -ENOMEM && vol_err == true) {
|
||||
if (err != -EOPNOTSUPP && err != -ENOMEM &&
|
||||
err != -EINTR && err != -ERESTARTSYS && vol_err == true) {
|
||||
ntfs_error(vol->sb,
|
||||
"Failed with error code %i. Marking corrupt inode 0x%llx as bad. Run chkdsk.",
|
||||
err, ni->mft_no);
|
||||
|
|
@ -1467,12 +1468,13 @@ static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi)
|
|||
ntfs_attr_put_search_ctx(ctx);
|
||||
unmap_mft_record(base_ni);
|
||||
err_out:
|
||||
if (err != -ENOENT)
|
||||
if (err != -ENOENT && err != -EINTR && err != -ERESTARTSYS)
|
||||
ntfs_error(vol->sb,
|
||||
"Failed with error code %i while reading attribute inode (mft_no 0x%llx, type 0x%x, name_len %i). Marking corrupt inode and base inode 0x%llx as bad. Run chkdsk.",
|
||||
err, ni->mft_no, ni->type, ni->name_len,
|
||||
base_ni->mft_no);
|
||||
if (err != -ENOENT && err != -ENOMEM)
|
||||
if (err != -ENOENT && err != -ENOMEM &&
|
||||
err != -EINTR && err != -ERESTARTSYS)
|
||||
NVolSetErrors(vol);
|
||||
return err;
|
||||
}
|
||||
|
|
@ -1676,8 +1678,9 @@ static int ntfs_read_locked_index_inode(struct inode *base_vi, struct inode *vi)
|
|||
/* Get the index bitmap attribute inode. */
|
||||
bvi = ntfs_attr_iget(base_vi, AT_BITMAP, ni->name, ni->name_len);
|
||||
if (IS_ERR(bvi)) {
|
||||
ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
|
||||
err = PTR_ERR(bvi);
|
||||
if (err != -EINTR && err != -ERESTARTSYS)
|
||||
ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
|
||||
goto unm_err_out;
|
||||
}
|
||||
bni = NTFS_I(bvi);
|
||||
|
|
@ -1721,10 +1724,12 @@ static int ntfs_read_locked_index_inode(struct inode *base_vi, struct inode *vi)
|
|||
if (m)
|
||||
unmap_mft_record(base_ni);
|
||||
err_out:
|
||||
ntfs_error(vi->i_sb,
|
||||
"Failed with error code %i while reading index inode (mft_no 0x%llx, name_len %i.",
|
||||
err, ni->mft_no, ni->name_len);
|
||||
if (err != -EOPNOTSUPP && err != -ENOMEM)
|
||||
if (err != -EINTR && err != -ERESTARTSYS)
|
||||
ntfs_error(vi->i_sb,
|
||||
"Failed with error code %i while reading index inode (mft_no 0x%llx, name_len %i.",
|
||||
err, ni->mft_no, ni->name_len);
|
||||
if (err != -EOPNOTSUPP && err != -ENOMEM &&
|
||||
err != -EINTR && err != -ERESTARTSYS)
|
||||
NVolSetErrors(vol);
|
||||
return err;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -213,7 +213,8 @@ struct mft_record *map_mft_record(struct ntfs_inode *ni)
|
|||
return m;
|
||||
|
||||
atomic_dec(&ni->count);
|
||||
ntfs_error(ni->vol->sb, "Failed with error code %lu.", -PTR_ERR(m));
|
||||
if (PTR_ERR(m) != -EINTR && PTR_ERR(m) != -ERESTARTSYS)
|
||||
ntfs_error(ni->vol->sb, "Failed with error code %lu.", -PTR_ERR(m));
|
||||
return m;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user