Lines Matching refs:ow
89 static int orangefs_writepages_work(struct orangefs_writepages *ow, in orangefs_writepages_work() argument
92 struct inode *inode = ow->pages[0]->mapping->host; in orangefs_writepages_work()
102 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
103 set_page_writeback(ow->pages[i]); in orangefs_writepages_work()
104 ow->bv[i].bv_page = ow->pages[i]; in orangefs_writepages_work()
105 ow->bv[i].bv_len = min(page_offset(ow->pages[i]) + PAGE_SIZE, in orangefs_writepages_work()
106 ow->off + ow->len) - in orangefs_writepages_work()
107 max(ow->off, page_offset(ow->pages[i])); in orangefs_writepages_work()
109 ow->bv[i].bv_offset = ow->off - in orangefs_writepages_work()
110 page_offset(ow->pages[i]); in orangefs_writepages_work()
112 ow->bv[i].bv_offset = 0; in orangefs_writepages_work()
114 iov_iter_bvec(&iter, WRITE, ow->bv, ow->npages, ow->len); in orangefs_writepages_work()
116 WARN_ON(ow->off >= len); in orangefs_writepages_work()
117 if (ow->off + ow->len > len) in orangefs_writepages_work()
118 ow->len = len - ow->off; in orangefs_writepages_work()
120 off = ow->off; in orangefs_writepages_work()
121 wr.uid = ow->uid; in orangefs_writepages_work()
122 wr.gid = ow->gid; in orangefs_writepages_work()
123 ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, ow->len, in orangefs_writepages_work()
126 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
127 SetPageError(ow->pages[i]); in orangefs_writepages_work()
128 mapping_set_error(ow->pages[i]->mapping, ret); in orangefs_writepages_work()
129 if (PagePrivate(ow->pages[i])) { in orangefs_writepages_work()
131 page_private(ow->pages[i]); in orangefs_writepages_work()
132 ClearPagePrivate(ow->pages[i]); in orangefs_writepages_work()
133 put_page(ow->pages[i]); in orangefs_writepages_work()
136 end_page_writeback(ow->pages[i]); in orangefs_writepages_work()
137 unlock_page(ow->pages[i]); in orangefs_writepages_work()
141 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
142 if (PagePrivate(ow->pages[i])) { in orangefs_writepages_work()
144 page_private(ow->pages[i]); in orangefs_writepages_work()
145 ClearPagePrivate(ow->pages[i]); in orangefs_writepages_work()
146 put_page(ow->pages[i]); in orangefs_writepages_work()
149 end_page_writeback(ow->pages[i]); in orangefs_writepages_work()
150 unlock_page(ow->pages[i]); in orangefs_writepages_work()
159 struct orangefs_writepages *ow = data; in orangefs_writepages_callback() local
173 if (ow->npages == 0) { in orangefs_writepages_callback()
174 ow->off = wr->pos; in orangefs_writepages_callback()
175 ow->len = wr->len; in orangefs_writepages_callback()
176 ow->uid = wr->uid; in orangefs_writepages_callback()
177 ow->gid = wr->gid; in orangefs_writepages_callback()
178 ow->pages[ow->npages++] = page; in orangefs_writepages_callback()
182 if (!uid_eq(ow->uid, wr->uid) || !gid_eq(ow->gid, wr->gid)) { in orangefs_writepages_callback()
183 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
184 ow->npages = 0; in orangefs_writepages_callback()
188 if (ow->off + ow->len == wr->pos) { in orangefs_writepages_callback()
189 ow->len += wr->len; in orangefs_writepages_callback()
190 ow->pages[ow->npages++] = page; in orangefs_writepages_callback()
196 if (ow->npages) { in orangefs_writepages_callback()
197 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
198 ow->npages = 0; in orangefs_writepages_callback()
205 if (ow->npages == ow->maxpages) { in orangefs_writepages_callback()
206 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
207 ow->npages = 0; in orangefs_writepages_callback()
216 struct orangefs_writepages *ow; in orangefs_writepages() local
219 ow = kzalloc(sizeof(struct orangefs_writepages), GFP_KERNEL); in orangefs_writepages()
220 if (!ow) in orangefs_writepages()
222 ow->maxpages = orangefs_bufmap_size_query()/PAGE_SIZE; in orangefs_writepages()
223 ow->pages = kcalloc(ow->maxpages, sizeof(struct page *), GFP_KERNEL); in orangefs_writepages()
224 if (!ow->pages) { in orangefs_writepages()
225 kfree(ow); in orangefs_writepages()
228 ow->bv = kcalloc(ow->maxpages, sizeof(struct bio_vec), GFP_KERNEL); in orangefs_writepages()
229 if (!ow->bv) { in orangefs_writepages()
230 kfree(ow->pages); in orangefs_writepages()
231 kfree(ow); in orangefs_writepages()
235 ret = write_cache_pages(mapping, wbc, orangefs_writepages_callback, ow); in orangefs_writepages()
236 if (ow->npages) in orangefs_writepages()
237 ret = orangefs_writepages_work(ow, wbc); in orangefs_writepages()
239 kfree(ow->pages); in orangefs_writepages()
240 kfree(ow->bv); in orangefs_writepages()
241 kfree(ow); in orangefs_writepages()