* Allocate a file number */
| 316 | * Allocate a file number |
| 317 | */ |
| 318 | static void |
| 319 | mqfs_fileno_alloc(struct mqfs_info *mi, struct mqfs_node *mn) |
| 320 | { |
| 321 | /* make sure our parent has a file number */ |
| 322 | if (mn->mn_parent && !mn->mn_parent->mn_fileno) |
| 323 | mqfs_fileno_alloc(mi, mn->mn_parent); |
| 324 | |
| 325 | switch (mn->mn_type) { |
| 326 | case mqfstype_root: |
| 327 | case mqfstype_dir: |
| 328 | case mqfstype_file: |
| 329 | case mqfstype_symlink: |
| 330 | mn->mn_fileno = alloc_unr(mi->mi_unrhdr); |
| 331 | break; |
| 332 | case mqfstype_this: |
| 333 | KASSERT(mn->mn_parent != NULL, |
| 334 | ("mqfstype_this node has no parent")); |
| 335 | mn->mn_fileno = mn->mn_parent->mn_fileno; |
| 336 | break; |
| 337 | case mqfstype_parent: |
| 338 | KASSERT(mn->mn_parent != NULL, |
| 339 | ("mqfstype_parent node has no parent")); |
| 340 | if (mn->mn_parent == mi->mi_root) { |
| 341 | mn->mn_fileno = mn->mn_parent->mn_fileno; |
| 342 | break; |
| 343 | } |
| 344 | KASSERT(mn->mn_parent->mn_parent != NULL, |
| 345 | ("mqfstype_parent node has no grandparent")); |
| 346 | mn->mn_fileno = mn->mn_parent->mn_parent->mn_fileno; |
| 347 | break; |
| 348 | default: |
| 349 | KASSERT(0, |
| 350 | ("mqfs_fileno_alloc() called for unknown type node: %d", |
| 351 | mn->mn_type)); |
| 352 | break; |
| 353 | } |
| 354 | } |
| 355 | |
| 356 | /* |
| 357 | * Release a file number |
no test coverage detected