diff options
author | Chen Gang <gang.chen@asianux.com> | 2013-05-21 05:20:50 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-06-30 21:46:56 -0400 |
commit | 7029705a9d0544186c29ae09708b3e5adb512835 (patch) | |
tree | 5156e8edaa013c77b3fd007ab83ddff873d9d622 | |
parent | cce606feb425093c8371089d392e336d186e125b (diff) |
powerpc/nvram64: Need return the related error code on failure occurs
When error occurs, need return the related error code to let upper
caller know about it.
ppc_md.nvram_size() can return the error code (e.g. core99_nvram_size()
in 'arch/powerpc/platforms/powermac/nvram.c').
Also set ret value when only need it, so can save structions for normal
cases.
Signed-off-by: Chen Gang <gang.chen@asianux.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/kernel/nvram_64.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c index 48fbc2b97e95..8213ee1eb05a 100644 --- a/arch/powerpc/kernel/nvram_64.c +++ b/arch/powerpc/kernel/nvram_64.c | |||
@@ -84,22 +84,30 @@ static ssize_t dev_nvram_read(struct file *file, char __user *buf, | |||
84 | char *tmp = NULL; | 84 | char *tmp = NULL; |
85 | ssize_t size; | 85 | ssize_t size; |
86 | 86 | ||
87 | ret = -ENODEV; | 87 | if (!ppc_md.nvram_size) { |
88 | if (!ppc_md.nvram_size) | 88 | ret = -ENODEV; |
89 | goto out; | 89 | goto out; |
90 | } | ||
90 | 91 | ||
91 | ret = 0; | ||
92 | size = ppc_md.nvram_size(); | 92 | size = ppc_md.nvram_size(); |
93 | if (*ppos >= size || size < 0) | 93 | if (size < 0) { |
94 | ret = size; | ||
95 | goto out; | ||
96 | } | ||
97 | |||
98 | if (*ppos >= size) { | ||
99 | ret = 0; | ||
94 | goto out; | 100 | goto out; |
101 | } | ||
95 | 102 | ||
96 | count = min_t(size_t, count, size - *ppos); | 103 | count = min_t(size_t, count, size - *ppos); |
97 | count = min(count, PAGE_SIZE); | 104 | count = min(count, PAGE_SIZE); |
98 | 105 | ||
99 | ret = -ENOMEM; | ||
100 | tmp = kmalloc(count, GFP_KERNEL); | 106 | tmp = kmalloc(count, GFP_KERNEL); |
101 | if (!tmp) | 107 | if (!tmp) { |
108 | ret = -ENOMEM; | ||
102 | goto out; | 109 | goto out; |
110 | } | ||
103 | 111 | ||
104 | ret = ppc_md.nvram_read(tmp, count, ppos); | 112 | ret = ppc_md.nvram_read(tmp, count, ppos); |
105 | if (ret <= 0) | 113 | if (ret <= 0) |