Skip to content

Commit 008fa74

Browse files
mirsalgregkh
authored andcommitted
drivers: android: binder: Move the node release code to a separate function
The binder_deferred_release() function has many levels of indentation which makes it difficult to read. This patch moves the code which deals with disposing of a binder node to a separate binder_node_release() function, thus removing one level of indentation and allowing the code to fit in 80 columns. Signed-off-by: Mirsal Ennaime <mirsal@mirsal.fr> Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent ef994fd commit 008fa74

File tree

1 file changed

+46
-30
lines changed

1 file changed

+46
-30
lines changed

drivers/staging/android/binder.c

Lines changed: 46 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2878,6 +2878,51 @@ static int binder_release(struct inode *nodp, struct file *filp)
28782878
return 0;
28792879
}
28802880

2881+
static int binder_node_release(struct binder_node *node, int refs)
2882+
{
2883+
struct binder_ref *ref;
2884+
int death = 0;
2885+
2886+
list_del_init(&node->work.entry);
2887+
binder_release_work(&node->async_todo);
2888+
2889+
if (hlist_empty(&node->refs)) {
2890+
kfree(node);
2891+
binder_stats_deleted(BINDER_STAT_NODE);
2892+
2893+
return refs;
2894+
}
2895+
2896+
node->proc = NULL;
2897+
node->local_strong_refs = 0;
2898+
node->local_weak_refs = 0;
2899+
hlist_add_head(&node->dead_node, &binder_dead_nodes);
2900+
2901+
hlist_for_each_entry(ref, &node->refs, node_entry) {
2902+
refs++;
2903+
2904+
if (!ref->death)
2905+
goto out;
2906+
2907+
death++;
2908+
2909+
if (list_empty(&ref->death->work.entry)) {
2910+
ref->death->work.type = BINDER_WORK_DEAD_BINDER;
2911+
list_add_tail(&ref->death->work.entry,
2912+
&ref->proc->todo);
2913+
wake_up_interruptible(&ref->proc->wait);
2914+
} else
2915+
BUG();
2916+
}
2917+
2918+
out:
2919+
binder_debug(BINDER_DEBUG_DEAD_BINDER,
2920+
"node %d now dead, refs %d, death %d\n",
2921+
node->debug_id, refs, death);
2922+
2923+
return refs;
2924+
}
2925+
28812926
static void binder_deferred_release(struct binder_proc *proc)
28822927
{
28832928
struct binder_transaction *t;
@@ -2909,36 +2954,7 @@ static void binder_deferred_release(struct binder_proc *proc)
29092954

29102955
nodes++;
29112956
rb_erase(&node->rb_node, &proc->nodes);
2912-
list_del_init(&node->work.entry);
2913-
binder_release_work(&node->async_todo);
2914-
if (hlist_empty(&node->refs)) {
2915-
kfree(node);
2916-
binder_stats_deleted(BINDER_STAT_NODE);
2917-
} else {
2918-
struct binder_ref *ref;
2919-
int death = 0;
2920-
2921-
node->proc = NULL;
2922-
node->local_strong_refs = 0;
2923-
node->local_weak_refs = 0;
2924-
hlist_add_head(&node->dead_node, &binder_dead_nodes);
2925-
2926-
hlist_for_each_entry(ref, &node->refs, node_entry) {
2927-
incoming_refs++;
2928-
if (ref->death) {
2929-
death++;
2930-
if (list_empty(&ref->death->work.entry)) {
2931-
ref->death->work.type = BINDER_WORK_DEAD_BINDER;
2932-
list_add_tail(&ref->death->work.entry, &ref->proc->todo);
2933-
wake_up_interruptible(&ref->proc->wait);
2934-
} else
2935-
BUG();
2936-
}
2937-
}
2938-
binder_debug(BINDER_DEBUG_DEAD_BINDER,
2939-
"node %d now dead, refs %d, death %d\n",
2940-
node->debug_id, incoming_refs, death);
2941-
}
2957+
incoming_refs = binder_node_release(node, incoming_refs);
29422958
}
29432959
outgoing_refs = 0;
29442960
while ((n = rb_first(&proc->refs_by_desc))) {

0 commit comments

Comments
 (0)