Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a778f217 authored by Anton Altaparmakov's avatar Anton Altaparmakov
Browse files

NTFS: Fix a bug in fs/ntfs/inode.c::ntfs_read_locked_index_inode() where we


      forgot to update a temporary variable so loading index inodes which
      have an index allocation attribute failed.

Signed-off-by: default avatarAnton Altaparmakov <aia21@cantab.net>
parent 2c2c8c1c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -38,6 +38,9 @@ ToDo/Notes:
	  allowed by NTFS, i.e. 255 Unicode characters, not including the
	  terminating NULL (which is not stored on disk).
	- Improve comments on file attribute flags in fs/ntfs/layout.h.
	- Fix a bug in fs/ntfs/inode.c::ntfs_read_locked_index_inode() where we
	  forgot to update a temporary variable so loading index inodes which
	  have an index allocation attribute failed.

2.1.26 - Minor bug fixes and updates.

+11 −15
Original line number Diff line number Diff line
@@ -19,15 +19,19 @@
 * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include <linux/pagemap.h>
#include <linux/buffer_head.h>
#include <linux/smp_lock.h>
#include <linux/quotaops.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/mount.h>
#include <linux/mutex.h>
#include <linux/pagemap.h>
#include <linux/quotaops.h>
#include <linux/slab.h>
#include <linux/smp_lock.h>

#include "aops.h"
#include "attrib.h"
#include "bitmap.h"
#include "dir.h"
#include "debug.h"
#include "inode.h"
@@ -1428,7 +1432,6 @@ err_out:
			"Run chkdsk.", err, vi->i_ino, ni->type, ni->name_len,
			base_vi->i_ino);
	make_bad_inode(vi);
	make_bad_inode(base_vi);
	if (err != -ENOMEM)
		NVolSetErrors(vol);
	return err;
@@ -1613,6 +1616,7 @@ static int ntfs_read_locked_index_inode(struct inode *base_vi, struct inode *vi)
					"$INDEX_ALLOCATION attribute.");
		goto unm_err_out;
	}
	a = ctx->attr;
	if (!a->non_resident) {
		ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
				"resident.");
@@ -2845,11 +2849,8 @@ done:
old_bad_out:
	old_size = -1;
bad_out:
	if (err != -ENOMEM && err != -EOPNOTSUPP) {
		make_bad_inode(vi);
		make_bad_inode(VFS_I(base_ni));
	if (err != -ENOMEM && err != -EOPNOTSUPP)
		NVolSetErrors(vol);
	}
	if (err != -EOPNOTSUPP)
		NInoSetTruncateFailed(ni);
	else if (old_size >= 0)
@@ -2864,11 +2865,8 @@ out:
	ntfs_debug("Failed.  Returning error code %i.", err);
	return err;
conv_err_out:
	if (err != -ENOMEM && err != -EOPNOTSUPP) {
		make_bad_inode(vi);
		make_bad_inode(VFS_I(base_ni));
	if (err != -ENOMEM && err != -EOPNOTSUPP)
		NVolSetErrors(vol);
	}
	if (err != -EOPNOTSUPP)
		NInoSetTruncateFailed(ni);
	else
@@ -3116,9 +3114,7 @@ err_out:
				"retries later.");
		mark_inode_dirty(vi);
	} else {
		ntfs_error(vi->i_sb, "Failed (error code %i):  Marking inode "
				"as bad.  You should run chkdsk.", -err);
		make_bad_inode(vi);
		ntfs_error(vi->i_sb, "Failed (error %i):  Run chkdsk.", -err);
		NVolSetErrors(ni->vol);
	}
	return err;
+1 −4
Original line number Diff line number Diff line
@@ -651,10 +651,7 @@ err_out:
 * fs/ntfs/aops.c::mark_ntfs_record_dirty().
 *
 * On success, clean the mft record and return 0.  On error, leave the mft
 * record dirty and return -errno.  The caller should call make_bad_inode() on
 * the base inode to ensure no more access happens to this inode.  We do not do
 * it here as the caller may want to finish writing other extent mft records
 * first to minimize on-disk metadata inconsistencies.
 * record dirty and return -errno.
 *
 * NOTE:  We always perform synchronous i/o and ignore the @sync parameter.
 * However, if the mft record has a counterpart in the mft mirror and @sync is