Unverified Commit 766797c2 authored by Konstantin Komarov's avatar Konstantin Komarov
Browse files

fs/ntfs3: Fix handling of InitializeFileRecordSegment



Make the logic of handling the InitializeFileRecordSegment operation
similar to that in windows.

Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
parent 8b26c8c3
Loading
Loading
Loading
Loading
+14 −16
Original line number Diff line number Diff line
@@ -3091,16 +3091,16 @@ static int do_action(struct ntfs_log *log, struct OPEN_ATTR_ENRTY *oe,
		inode = ilookup(sbi->sb, rno);
		if (inode) {
			mi = &ntfs_i(inode)->mi;
		} else if (op == InitializeFileRecordSegment) {
			mi = kzalloc(sizeof(struct mft_inode), GFP_NOFS);
			if (!mi)
				return -ENOMEM;
			err = mi_format_new(mi, sbi, rno, 0, false);
			if (err)
				goto out;
		} else {
			/* Read from disk. */
			err = mi_get(sbi, rno, &mi);
			if (err && op == InitializeFileRecordSegment) {
				mi = kzalloc(sizeof(struct mft_inode),
					     GFP_NOFS);
				if (!mi)
					return -ENOMEM;
				err = mi_format_new(mi, sbi, rno, 0, false);
			}
			if (err)
				return err;
		}
@@ -3109,7 +3109,6 @@ static int do_action(struct ntfs_log *log, struct OPEN_ATTR_ENRTY *oe,
		if (op == DeallocateFileRecordSegment)
			goto skip_load_parent;

		if (InitializeFileRecordSegment != op) {
		if (rec->rhdr.sign == NTFS_BAAD_SIGNATURE)
			goto dirty_vol;
		if (!check_lsn(&rec->rhdr, rlsn))
@@ -3117,7 +3116,6 @@ static int do_action(struct ntfs_log *log, struct OPEN_ATTR_ENRTY *oe,
		if (!check_file_record(rec, NULL, sbi))
			goto dirty_vol;
		attr = Add2Ptr(rec, roff);
		}

		if (is_rec_base(rec) || InitializeFileRecordSegment == op) {
			rno_base = rno;