| .. | .. |
|---|
| 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; |
|---|