|
@@ -443,6 +443,8 @@ static int ntfs_remount(struct super_block *sb, int *flags, char *opt)
|
|
|
ntfs_volume *vol = NTFS_SB(sb);
|
|
|
|
|
|
ntfs_debug("Entering with remount options string: %s", opt);
|
|
|
+
|
|
|
+ lock_kernel();
|
|
|
#ifndef NTFS_RW
|
|
|
/* For read-only compiled driver, enforce read-only flag. */
|
|
|
*flags |= MS_RDONLY;
|
|
@@ -466,15 +468,18 @@ static int ntfs_remount(struct super_block *sb, int *flags, char *opt)
|
|
|
if (NVolErrors(vol)) {
|
|
|
ntfs_error(sb, "Volume has errors and is read-only%s",
|
|
|
es);
|
|
|
+ unlock_kernel();
|
|
|
return -EROFS;
|
|
|
}
|
|
|
if (vol->vol_flags & VOLUME_IS_DIRTY) {
|
|
|
ntfs_error(sb, "Volume is dirty and read-only%s", es);
|
|
|
+ unlock_kernel();
|
|
|
return -EROFS;
|
|
|
}
|
|
|
if (vol->vol_flags & VOLUME_MODIFIED_BY_CHKDSK) {
|
|
|
ntfs_error(sb, "Volume has been modified by chkdsk "
|
|
|
"and is read-only%s", es);
|
|
|
+ unlock_kernel();
|
|
|
return -EROFS;
|
|
|
}
|
|
|
if (vol->vol_flags & VOLUME_MUST_MOUNT_RO_MASK) {
|
|
@@ -482,11 +487,13 @@ static int ntfs_remount(struct super_block *sb, int *flags, char *opt)
|
|
|
"(0x%x) and is read-only%s",
|
|
|
(unsigned)le16_to_cpu(vol->vol_flags),
|
|
|
es);
|
|
|
+ unlock_kernel();
|
|
|
return -EROFS;
|
|
|
}
|
|
|
if (ntfs_set_volume_flags(vol, VOLUME_IS_DIRTY)) {
|
|
|
ntfs_error(sb, "Failed to set dirty bit in volume "
|
|
|
"information flags%s", es);
|
|
|
+ unlock_kernel();
|
|
|
return -EROFS;
|
|
|
}
|
|
|
#if 0
|
|
@@ -506,18 +513,21 @@ static int ntfs_remount(struct super_block *sb, int *flags, char *opt)
|
|
|
ntfs_error(sb, "Failed to empty journal $LogFile%s",
|
|
|
es);
|
|
|
NVolSetErrors(vol);
|
|
|
+ unlock_kernel();
|
|
|
return -EROFS;
|
|
|
}
|
|
|
if (!ntfs_mark_quotas_out_of_date(vol)) {
|
|
|
ntfs_error(sb, "Failed to mark quotas out of date%s",
|
|
|
es);
|
|
|
NVolSetErrors(vol);
|
|
|
+ unlock_kernel();
|
|
|
return -EROFS;
|
|
|
}
|
|
|
if (!ntfs_stamp_usnjrnl(vol)) {
|
|
|
ntfs_error(sb, "Failed to stamp transation log "
|
|
|
"($UsnJrnl)%s", es);
|
|
|
NVolSetErrors(vol);
|
|
|
+ unlock_kernel();
|
|
|
return -EROFS;
|
|
|
}
|
|
|
} else if (!(sb->s_flags & MS_RDONLY) && (*flags & MS_RDONLY)) {
|
|
@@ -533,8 +543,11 @@ static int ntfs_remount(struct super_block *sb, int *flags, char *opt)
|
|
|
|
|
|
// TODO: Deal with *flags.
|
|
|
|
|
|
- if (!parse_options(vol, opt))
|
|
|
+ if (!parse_options(vol, opt)) {
|
|
|
+ unlock_kernel();
|
|
|
return -EINVAL;
|
|
|
+ }
|
|
|
+ unlock_kernel();
|
|
|
ntfs_debug("Done.");
|
|
|
return 0;
|
|
|
}
|