aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeliang Tang <geliangtang@163.com>2015-11-06 23:00:21 -0500
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>2016-01-11 14:19:55 -0500
commitb01079be449b895913ce17a47933820af708d5dd (patch)
treee8e8b3a391e81469d64e813a3fc11ee5e3f6f39c
parentfbbf53f70225c82ba877de780486be5bc81b29e2 (diff)
rtc: fix module reference count in rtc-proc
rtc-proc.c is not built as a module. Thus, rather than dealing with THIS_MODULE's reference count, we should deal with rtc->owner's reference count. Signed-off-by: Geliang Tang <geliangtang@163.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
-rw-r--r--drivers/rtc/rtc-proc.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/rtc/rtc-proc.c b/drivers/rtc/rtc-proc.c
index ffa69e1c9245..31e7e23cc5be 100644
--- a/drivers/rtc/rtc-proc.c
+++ b/drivers/rtc/rtc-proc.c
@@ -112,19 +112,21 @@ static int rtc_proc_open(struct inode *inode, struct file *file)
112 int ret; 112 int ret;
113 struct rtc_device *rtc = PDE_DATA(inode); 113 struct rtc_device *rtc = PDE_DATA(inode);
114 114
115 if (!try_module_get(THIS_MODULE)) 115 if (!try_module_get(rtc->owner))
116 return -ENODEV; 116 return -ENODEV;
117 117
118 ret = single_open(file, rtc_proc_show, rtc); 118 ret = single_open(file, rtc_proc_show, rtc);
119 if (ret) 119 if (ret)
120 module_put(THIS_MODULE); 120 module_put(rtc->owner);
121 return ret; 121 return ret;
122} 122}
123 123
124static int rtc_proc_release(struct inode *inode, struct file *file) 124static int rtc_proc_release(struct inode *inode, struct file *file)
125{ 125{
126 int res = single_release(inode, file); 126 int res = single_release(inode, file);
127 module_put(THIS_MODULE); 127 struct rtc_device *rtc = PDE_DATA(inode);
128
129 module_put(rtc->owner);
128 return res; 130 return res;
129} 131}
130 132