@@ -37,7 +37,7 @@ void test_pinning(void)
37
37
struct stat statbuf = {};
38
38
struct bpf_object * obj ;
39
39
struct bpf_map * map ;
40
- int err ;
40
+ int err , map_fd ;
41
41
DECLARE_LIBBPF_OPTS (bpf_object_open_opts , opts ,
42
42
.pin_root_path = custpath ,
43
43
);
@@ -213,6 +213,53 @@ void test_pinning(void)
213
213
if (CHECK (err , "stat custpinpath" , "err %d errno %d\n" , err , errno ))
214
214
goto out ;
215
215
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 );
216
263
out :
217
264
unlink (pinpath );
218
265
unlink (nopinpath );
0 commit comments