Function report |
Source Code:fs\dcache.c |
Create Date:2022-07-28 20:07:27 |
| Last Modify:2020-03-18 10:27:32 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:d_walk - walk the dentry tree*@parent: start of walk*@data: data passed to @enter() and @finish()*@enter: callback when first entering the dentry* The @enter() callbacks are called with d_lock held.
Proto:static void d_walk(struct dentry *parent, void *data, enum d_walk_ret (*enter)(void *, struct dentry *))
Type:void
Parameter:
| Type | Parameter | Name |
|---|---|---|
| struct dentry * | parent | |
| void * | data | |
| enum d_walk_ret (* | enter |
| 1274 | seq = 0 |
| 1276 | bool retry = true |
| 1278 | again : |
| 1280 | this_parent = parent |
| 1283 | ret = enter(data, this_parent) |
| 1285 | Case ret == D_WALK_CONTINUE |
| 1286 | Break |
| 1287 | Case ret == D_WALK_QUIT |
| 1288 | Case ret == D_WALK_SKIP |
| 1289 | Go to out_unlock |
| 1290 | Case ret == D_WALK_NORETRY |
| 1291 | retry = false |
| 1292 | Break |
| 1294 | repeat : |
| 1296 | resume : |
| 1297 | When next != our children cycle |
| 1302 | If Value for the false possibility is greater at compile time( protected by d_lock & DCACHE_DENTRY_CURSOR) Then Continue |
| 1305 | spin_lock_nested( & d_lock, DENTRY_D_LOCK_NESTED) |
| 1309 | Case ret == D_WALK_CONTINUE |
| 1310 | Break |
| 1311 | Case ret == D_WALK_QUIT |
| 1312 | spin_unlock( & d_lock) |
| 1313 | Go to out_unlock |
| 1314 | Case ret == D_WALK_NORETRY |
| 1315 | retry = false |
| 1316 | Break |
| 1317 | Case ret == D_WALK_SKIP |
| 1318 | spin_unlock( & d_lock) |
| 1319 | Continue |
| 1322 | If Not list_empty - tests whether a list is empty*@head: the list to test. Then |
| 1323 | spin_unlock( & d_lock) |
| 1324 | spin_release( & dep_map, _RET_IP_) |
| 1325 | this_parent = dentry |
| 1326 | spin_acquire( & dep_map, 0, 1, _RET_IP_) |
| 1327 | Go to repeat |
| 1329 | spin_unlock( & d_lock) |
| 1335 | ascend : |
| 1336 | If this_parent != parent Then |
| 1337 | child = this_parent |
| 1338 | this_parent = parent directory |
| 1340 | spin_unlock( & d_lock) |
| 1344 | If need_seqretry( & rename_lock, seq) Then Go to rename_retry |
| 1347 | Do |
| 1349 | If next == our children Then Go to ascend |
| 1352 | When Value for the false possibility is greater at compile time( protected by d_lock & Parent inode is watched by some fsnotify listener ) cycle |
| 1354 | Go to resume |
| 1356 | If need_seqretry( & rename_lock, seq) Then Go to rename_retry |
| 1360 | out_unlock : |
| 1361 | spin_unlock( & d_lock) |
| 1362 | done_seqretry( & rename_lock, seq) |
| 1363 | Return |
| 1365 | rename_retry : |
| 1366 | spin_unlock( & d_lock) |
| 1369 | If Not retry Then Return |
| 1371 | seq = 1 |
| 1372 | Go to again |
| Name | Describe |
|---|---|
| path_has_submounts | path_has_submounts - check for mounts over a dentry in the* current namespace.*@parent: path to check.* Return true if the parent or its subdirectories contain* a mount point in the current namespace. |
| shrink_dcache_parent | prune dcache |
| do_one_tree | |
| d_invalidate | invalidate a dentry |
| d_genocide |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |