@@ -37,7 +37,7 @@ void test_pinning(void)
3737 struct stat statbuf = {};
3838 struct bpf_object * obj ;
3939 struct bpf_map * map ;
40- int err ;
40+ int err , map_fd ;
4141 DECLARE_LIBBPF_OPTS (bpf_object_open_opts , opts ,
4242 .pin_root_path = custpath ,
4343 );
@@ -213,6 +213,53 @@ void test_pinning(void)
213213 if (CHECK (err , "stat custpinpath" , "err %d errno %d\n" , err , errno ))
214214 goto out ;
215215
216+ /* remove the custom pin path to re-test it with reuse fd below */
217+ err = unlink (custpinpath );
218+ if (CHECK (err , "unlink custpinpath" , "err %d errno %d\n" , err , errno ))
219+ goto out ;
220+
221+ err = rmdir (custpath );
222+ if (CHECK (err , "rmdir custpindir" , "err %d errno %d\n" , err , errno ))
223+ goto out ;
224+
225+ bpf_object__close (obj );
226+
227+ /* test pinning at custom path with reuse fd */
228+ obj = bpf_object__open_file (file , NULL );
229+ err = libbpf_get_error (obj );
230+ if (CHECK (err , "default open" , "err %d errno %d\n" , err , errno )) {
231+ obj = NULL ;
232+ goto out ;
233+ }
234+
235+ map_fd = bpf_create_map (BPF_MAP_TYPE_ARRAY , sizeof (__u32 ),
236+ sizeof (__u64 ), 1 , 0 );
237+ if (CHECK (map_fd < 0 , "create pinmap manually" , "fd %d\n" , map_fd ))
238+ goto out ;
239+
240+ map = bpf_object__find_map_by_name (obj , "pinmap" );
241+ if (CHECK (!map , "find map" , "NULL map" ))
242+ goto close_map_fd ;
243+
244+ err = bpf_map__reuse_fd (map , map_fd );
245+ if (CHECK (err , "reuse pinmap fd" , "err %d errno %d\n" , err , errno ))
246+ goto close_map_fd ;
247+
248+ err = bpf_map__set_pin_path (map , custpinpath );
249+ if (CHECK (err , "set pin path" , "err %d errno %d\n" , err , errno ))
250+ goto close_map_fd ;
251+
252+ err = bpf_object__load (obj );
253+ if (CHECK (err , "custom load" , "err %d errno %d\n" , err , errno ))
254+ goto close_map_fd ;
255+
256+ /* check that pinmap was pinned at the custom path */
257+ err = stat (custpinpath , & statbuf );
258+ if (CHECK (err , "stat custpinpath" , "err %d errno %d\n" , err , errno ))
259+ goto close_map_fd ;
260+
261+ close_map_fd :
262+ close (map_fd );
216263out :
217264 unlink (pinpath );
218265 unlink (nopinpath );
0 commit comments