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

Commit b72e632c authored by Jan Kara's avatar Jan Kara
Browse files

udf: Do not mark possibly inconsistent filesystems as closed



If logical volume integrity descriptor contains non-closed integrity
type when mounting the volume, there are high chances that the volume is
not consistent (device was detached before the filesystem was
unmounted). Don't touch integrity type of such volume so that fsck can
recognize it and check such filesystem.

Reported-by: default avatarPali Rohár <pali.rohar@gmail.com>
Reviewed-by: default avatarPali Rohár <pali.rohar@gmail.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent 7b1f6417
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -1988,7 +1988,10 @@ static void udf_open_lvid(struct super_block *sb)
	lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
	ktime_get_real_ts(&ts);
	udf_time_to_disk_stamp(&lvid->recordingDateAndTime, ts);
	if (le32_to_cpu(lvid->integrityType) == LVID_INTEGRITY_TYPE_CLOSE)
		lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_OPEN);
	else
		UDF_SET_FLAG(sb, UDF_FLAG_INCONSISTENT);

	lvid->descTag.descCRC = cpu_to_le16(
		crc_itu_t(0, (char *)lvid + sizeof(struct tag),
@@ -2028,6 +2031,7 @@ static void udf_close_lvid(struct super_block *sb)
		lvidiu->minUDFReadRev = cpu_to_le16(sbi->s_udfrev);
	if (sbi->s_udfrev > le16_to_cpu(lvidiu->minUDFWriteRev))
		lvidiu->minUDFWriteRev = cpu_to_le16(sbi->s_udfrev);
	if (!UDF_QUERY_FLAG(sb, UDF_FLAG_INCONSISTENT))
		lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_CLOSE);

	lvid->descTag.descCRC = cpu_to_le16(
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#define UDF_FLAG_SESSION_SET	15
#define UDF_FLAG_LASTBLOCK_SET	16
#define UDF_FLAG_BLOCKSIZE_SET	17
#define UDF_FLAG_INCONSISTENT	18

#define UDF_PART_FLAG_UNALLOC_BITMAP	0x0001
#define UDF_PART_FLAG_UNALLOC_TABLE	0x0002