1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
From 997e41f41926711ef96e0e0f6cc43321ebbd6e65 Mon Sep 17 00:00:00 2001
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date: Mon, 12 Jun 2023 17:34:02 +0200
Subject: [PATCH] misc: convert to guards
---
drivers/char/misc.c | 44 +++++++++++++++-----------------------------
1 file changed, 15 insertions(+), 29 deletions(-)
--- a/drivers/char/misc.c
+++ b/drivers/char/misc.c
@@ -137,10 +137,9 @@ static int misc_open(struct inode *inode
{
int minor = iminor(inode);
struct miscdevice *c = NULL, *iter;
- int err = -ENODEV;
const struct file_operations *new_fops = NULL;
- mutex_lock(&misc_mtx);
+ guard(mutex)(&misc_mtx);
list_for_each_entry(iter, &misc_list, list) {
if (iter->minor != minor)
@@ -163,7 +162,7 @@ static int misc_open(struct inode *inode
break;
}
if (!new_fops)
- goto fail;
+ return -ENODEV;
}
/*
@@ -173,13 +172,11 @@ static int misc_open(struct inode *inode
*/
file->private_data = c;
- err = 0;
replace_fops(file, new_fops);
if (file->f_op->open)
- err = file->f_op->open(inode, file);
-fail:
- mutex_unlock(&misc_mtx);
- return err;
+ return file->f_op->open(inode, file);
+
+ return 0;
}
static char *misc_devnode(const struct device *dev, umode_t *mode)
@@ -225,37 +222,30 @@ static const struct file_operations misc
int misc_register(struct miscdevice *misc)
{
dev_t dev;
- int err = 0;
bool is_dynamic = (misc->minor == MISC_DYNAMIC_MINOR);
INIT_LIST_HEAD(&misc->list);
- mutex_lock(&misc_mtx);
+ guard(mutex)(&misc_mtx);
if (is_dynamic) {
int i = misc_minor_alloc(misc->minor);
+ if (i < 0)
+ return -EBUSY;
- if (i < 0) {
- err = -EBUSY;
- goto out;
- }
misc->minor = i;
} else {
struct miscdevice *c;
int i;
list_for_each_entry(c, &misc_list, list) {
- if (c->minor == misc->minor) {
- err = -EBUSY;
- goto out;
- }
+ if (c->minor == misc->minor)
+ return -EBUSY;
}
i = misc_minor_alloc(misc->minor);
- if (i < 0) {
- err = -EBUSY;
- goto out;
- }
+ if (i < 0)
+ return -EBUSY;
}
dev = MKDEV(MISC_MAJOR, misc->minor);
@@ -268,8 +258,7 @@ int misc_register(struct miscdevice *mis
if (is_dynamic) {
misc->minor = MISC_DYNAMIC_MINOR;
}
- err = PTR_ERR(misc->this_device);
- goto out;
+ return PTR_ERR(misc->this_device);
}
/*
@@ -277,9 +266,7 @@ int misc_register(struct miscdevice *mis
* earlier defaults
*/
list_add(&misc->list, &misc_list);
- out:
- mutex_unlock(&misc_mtx);
- return err;
+ return 0;
}
EXPORT_SYMBOL(misc_register);
@@ -296,11 +283,10 @@ void misc_deregister(struct miscdevice *
if (WARN_ON(list_empty(&misc->list)))
return;
- mutex_lock(&misc_mtx);
+ guard(mutex)(&misc_mtx);
list_del(&misc->list);
device_destroy(&misc_class, MKDEV(MISC_MAJOR, misc->minor));
misc_minor_free(misc->minor);
- mutex_unlock(&misc_mtx);
}
EXPORT_SYMBOL(misc_deregister);
|