|
@@ -1189,6 +1189,9 @@ static int ext4_write_begin(struct file *file, struct address_space *mapping,
|
|
|
pgoff_t index;
|
|
|
unsigned from, to;
|
|
|
|
|
|
+ if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
|
|
+ return -EIO;
|
|
|
+
|
|
|
trace_ext4_write_begin(inode, pos, len, flags);
|
|
|
/*
|
|
|
* Reserve one block more for addition to orphan list in case
|
|
@@ -2047,6 +2050,12 @@ static int ext4_writepage(struct page *page,
|
|
|
struct ext4_io_submit io_submit;
|
|
|
bool keep_towrite = false;
|
|
|
|
|
|
+ if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) {
|
|
|
+ ext4_invalidatepage(page, 0, PAGE_SIZE);
|
|
|
+ unlock_page(page);
|
|
|
+ return -EIO;
|
|
|
+ }
|
|
|
+
|
|
|
trace_ext4_writepage(page);
|
|
|
size = i_size_read(inode);
|
|
|
if (page->index == size >> PAGE_SHIFT)
|
|
@@ -2422,7 +2431,8 @@ static int mpage_map_and_submit_extent(handle_t *handle,
|
|
|
if (err < 0) {
|
|
|
struct super_block *sb = inode->i_sb;
|
|
|
|
|
|
- if (EXT4_SB(sb)->s_mount_flags & EXT4_MF_FS_ABORTED)
|
|
|
+ if (ext4_forced_shutdown(EXT4_SB(sb)) ||
|
|
|
+ EXT4_SB(sb)->s_mount_flags & EXT4_MF_FS_ABORTED)
|
|
|
goto invalidate_dirty_pages;
|
|
|
/*
|
|
|
* Let the uper layers retry transient errors.
|
|
@@ -2644,6 +2654,9 @@ static int ext4_writepages(struct address_space *mapping,
|
|
|
struct blk_plug plug;
|
|
|
bool give_up_on_write = false;
|
|
|
|
|
|
+ if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
|
|
+ return -EIO;
|
|
|
+
|
|
|
percpu_down_read(&sbi->s_journal_flag_rwsem);
|
|
|
trace_ext4_writepages(inode, wbc);
|
|
|
|
|
@@ -2680,7 +2693,8 @@ static int ext4_writepages(struct address_space *mapping,
|
|
|
* *never* be called, so if that ever happens, we would want
|
|
|
* the stack trace.
|
|
|
*/
|
|
|
- if (unlikely(sbi->s_mount_flags & EXT4_MF_FS_ABORTED)) {
|
|
|
+ if (unlikely(ext4_forced_shutdown(EXT4_SB(mapping->host->i_sb)) ||
|
|
|
+ sbi->s_mount_flags & EXT4_MF_FS_ABORTED)) {
|
|
|
ret = -EROFS;
|
|
|
goto out_writepages;
|
|
|
}
|
|
@@ -2905,6 +2919,9 @@ static int ext4_da_write_begin(struct file *file, struct address_space *mapping,
|
|
|
struct inode *inode = mapping->host;
|
|
|
handle_t *handle;
|
|
|
|
|
|
+ if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
|
|
+ return -EIO;
|
|
|
+
|
|
|
index = pos >> PAGE_SHIFT;
|
|
|
|
|
|
if (ext4_nonda_switch(inode->i_sb) ||
|
|
@@ -5212,6 +5229,9 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
|
|
|
int orphan = 0;
|
|
|
const unsigned int ia_valid = attr->ia_valid;
|
|
|
|
|
|
+ if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
|
|
+ return -EIO;
|
|
|
+
|
|
|
error = setattr_prepare(dentry, attr);
|
|
|
if (error)
|
|
|
return error;
|
|
@@ -5498,6 +5518,9 @@ int ext4_mark_iloc_dirty(handle_t *handle,
|
|
|
{
|
|
|
int err = 0;
|
|
|
|
|
|
+ if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
|
|
+ return -EIO;
|
|
|
+
|
|
|
if (IS_I_VERSION(inode))
|
|
|
inode_inc_iversion(inode);
|
|
|
|
|
@@ -5521,6 +5544,9 @@ ext4_reserve_inode_write(handle_t *handle, struct inode *inode,
|
|
|
{
|
|
|
int err;
|
|
|
|
|
|
+ if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
|
|
+ return -EIO;
|
|
|
+
|
|
|
err = ext4_get_inode_loc(inode, iloc);
|
|
|
if (!err) {
|
|
|
BUFFER_TRACE(iloc->bh, "get_write_access");
|