@@ -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