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 |