.. | .. |
---|
162 | 162 | struct rds_info_lengths lens; |
---|
163 | 163 | unsigned long nr_pages = 0; |
---|
164 | 164 | unsigned long start; |
---|
165 | | - unsigned long i; |
---|
166 | 165 | rds_info_func func; |
---|
167 | 166 | struct page **pages = NULL; |
---|
168 | 167 | int ret; |
---|
.. | .. |
---|
193 | 192 | ret = -ENOMEM; |
---|
194 | 193 | goto out; |
---|
195 | 194 | } |
---|
196 | | - ret = get_user_pages_fast(start, nr_pages, 1, pages); |
---|
| 195 | + ret = pin_user_pages_fast(start, nr_pages, FOLL_WRITE, pages); |
---|
197 | 196 | if (ret != nr_pages) { |
---|
198 | 197 | if (ret > 0) |
---|
199 | 198 | nr_pages = ret; |
---|
.. | .. |
---|
235 | 234 | ret = -EFAULT; |
---|
236 | 235 | |
---|
237 | 236 | out: |
---|
238 | | - for (i = 0; pages && i < nr_pages; i++) |
---|
239 | | - put_page(pages[i]); |
---|
| 237 | + if (pages) |
---|
| 238 | + unpin_user_pages(pages, nr_pages); |
---|
240 | 239 | kfree(pages); |
---|
241 | 240 | |
---|
242 | 241 | return ret; |
---|