函数源码

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source File:lib\assoc_array.c Create Date:2022-07-27 07:51:29
首页 Copyright©Brick

1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
/**
 * assoc_array_clear - Script deletion of all objects from an associative array
 * @array: The array to clear.
 * @ops: The operations to use.
 *
 * Precalculate and preallocate a script for the deletion of all the objects
 * from an associative array.  This results in an edit script that can either
 * be applied or cancelled.
 *
 * The function returns a pointer to an edit script if there are objects to be
 * deleted, NULL if there are no objects in the array or -ENOMEM.
 *
 * The caller should lock against other modifications and must continue to hold
 * the lock until assoc_array_apply_edit() has been called.
 *
 * Accesses to the tree may take place concurrently with this function,
 * provided they hold the RCU read lock.
 */
struct assoc_array_edit *assoc_array_clear(struct assoc_array *array,
                       const struct assoc_array_ops *ops)
{
    struct assoc_array_edit *edit;
 
    pr_devel("-->%s()\n", __func__);
 
    if (!array->root)
        return NULL;
 
    edit = kzalloc(sizeof(struct assoc_array_edit), GFP_KERNEL);
    if (!edit)
        return ERR_PTR(-ENOMEM);
    edit->array = array;
    edit->ops = ops;
    edit->set[1].ptr = &array->root;
    edit->set[1].to = NULL;
    edit->excised_subtree = array->root;
    edit->ops_for_excised_subtree = ops;
    pr_devel("all gone\n");
    return edit;
}