Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/mount.cc')
-rw-r--r--winsup/cygwin/mount.cc14
1 files changed, 14 insertions, 0 deletions
diff --git a/winsup/cygwin/mount.cc b/winsup/cygwin/mount.cc
index 13ace6250..9545d22e0 100644
--- a/winsup/cygwin/mount.cc
+++ b/winsup/cygwin/mount.cc
@@ -523,8 +523,22 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol)
caseinsensitive ((!(flags () & FILE_CASE_SENSITIVE_SEARCH) || is_samba ())
&& !is_nfs ());
+ /* Check for being an SSD */
+ if (!is_remote_drive () && !is_cdrom ())
+ {
+ /* Theoretically FileFsVolumeFlagsInformation would be sufficient,
+ but apparently it's not exposed into userspace. */
+ FILE_FS_SECTOR_SIZE_INFORMATION ffssi;
+
+ status = NtQueryVolumeInformationFile (vol, &io, &ffssi, sizeof ffssi,
+ FileFsSectorSizeInformation);
+ if (NT_SUCCESS (status))
+ is_ssd (!!(ffssi.Flags & SSINFO_FLAGS_NO_SEEK_PENALTY));
+ }
+
if (!in_vol)
NtClose (vol);
+
fsi_cache.add (hash, this);
return true;
}