@@ -6,6 +6,7 @@ use crate::ops;
66use crate :: util:: HumanBytes ;
77use crate :: util:: edit_distance;
88use crate :: util:: errors:: CargoResult ;
9+ use crate :: util:: flock:: is_on_nfs_mount;
910use crate :: util:: interning:: InternedString ;
1011use crate :: util:: { GlobalContext , Progress , ProgressStyle } ;
1112use anyhow:: bail;
@@ -117,13 +118,17 @@ fn clean_specs(
117118 let target_data = RustcTargetData :: new ( ws, & requested_kinds) ?;
118119 let ( pkg_set, resolve) = ops:: resolve_ws ( ws, dry_run) ?;
119120 let prof_dir_name = profiles. get_dir_name ( ) ;
120- let host_layout = Layout :: new ( ws, None , & prof_dir_name, & LockingMode :: Coarse ) ?;
121+ let locking_mode = match is_on_nfs_mount ( ws. build_dir ( ) . as_path_unlocked ( ) ) {
122+ true => LockingMode :: None ,
123+ false => LockingMode :: Coarse ,
124+ } ;
125+ let host_layout = Layout :: new ( ws, None , & prof_dir_name, & locking_mode) ?;
121126 // Convert requested kinds to a Vec of layouts.
122127 let target_layouts: Vec < ( CompileKind , Layout ) > = requested_kinds
123128 . into_iter ( )
124129 . filter_map ( |kind| match kind {
125130 CompileKind :: Target ( target) => {
126- match Layout :: new ( ws, Some ( target) , & prof_dir_name, & LockingMode :: Coarse ) {
131+ match Layout :: new ( ws, Some ( target) , & prof_dir_name, & locking_mode ) {
127132 Ok ( layout) => Some ( Ok ( ( kind, layout) ) ) ,
128133 Err ( e) => Some ( Err ( e) ) ,
129134 }
0 commit comments