On 07/16/2018 05:55 PM, Huang, Ying wrote: > +/* > + * For non-HDD swap devices, the fine grained cluster lock is used to > + * protect si->swap_map. But cluster and cluster locks isn't > + * available for HDD, so coarse grained si->lock will be used instead > + * for that. > + */ > static inline struct swap_cluster_info *lock_cluster_or_swap_info( > struct swap_info_struct *si, > unsigned long offset) This nomenclature is not consistent with the rest of the file. We call a "non-HDD" device an "ssd" absolutely everywhere else in the file. Why are you calling it a non-HDD here? (fwiw, HDD _barely_ hits my acronym cache anyway). How about this? /* * Determine the locking method in use for this device. Return * swap_cluster_info if SSD-style cluster-based locking is in place. */ static inline struct swap_cluster_info *lock_cluster_or_swap_info( struct swap_info_struct *si, unsigned long offset) { struct swap_cluster_info *ci; /* Try to use fine-grained SSD-style locking if available: */ ci = lock_cluster(si, offset); /* Otherwise, fall back to traditional, coarse locking: */ if (!ci) spin_lock(&si->lock); return ci; } Which reminds me? Why do we even bother having two locking models?