Lines Matching refs:ow
88 static int orangefs_writepages_work(struct orangefs_writepages *ow, in orangefs_writepages_work() argument
91 struct inode *inode = ow->pages[0]->mapping->host; in orangefs_writepages_work()
101 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
102 set_page_writeback(ow->pages[i]); in orangefs_writepages_work()
103 bvec_set_page(&ow->bv[i], ow->pages[i], in orangefs_writepages_work()
104 min(page_offset(ow->pages[i]) + PAGE_SIZE, in orangefs_writepages_work()
105 ow->off + ow->len) - in orangefs_writepages_work()
106 max(ow->off, page_offset(ow->pages[i])), in orangefs_writepages_work()
107 i == 0 ? ow->off - page_offset(ow->pages[i]) : 0); in orangefs_writepages_work()
109 iov_iter_bvec(&iter, ITER_SOURCE, ow->bv, ow->npages, ow->len); in orangefs_writepages_work()
111 WARN_ON(ow->off >= len); in orangefs_writepages_work()
112 if (ow->off + ow->len > len) in orangefs_writepages_work()
113 ow->len = len - ow->off; in orangefs_writepages_work()
115 off = ow->off; in orangefs_writepages_work()
116 wr.uid = ow->uid; in orangefs_writepages_work()
117 wr.gid = ow->gid; in orangefs_writepages_work()
118 ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, ow->len, in orangefs_writepages_work()
121 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
122 SetPageError(ow->pages[i]); in orangefs_writepages_work()
123 mapping_set_error(ow->pages[i]->mapping, ret); in orangefs_writepages_work()
124 if (PagePrivate(ow->pages[i])) { in orangefs_writepages_work()
126 page_private(ow->pages[i]); in orangefs_writepages_work()
127 ClearPagePrivate(ow->pages[i]); in orangefs_writepages_work()
128 put_page(ow->pages[i]); in orangefs_writepages_work()
131 end_page_writeback(ow->pages[i]); in orangefs_writepages_work()
132 unlock_page(ow->pages[i]); in orangefs_writepages_work()
136 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
137 if (PagePrivate(ow->pages[i])) { in orangefs_writepages_work()
139 page_private(ow->pages[i]); in orangefs_writepages_work()
140 ClearPagePrivate(ow->pages[i]); in orangefs_writepages_work()
141 put_page(ow->pages[i]); in orangefs_writepages_work()
144 end_page_writeback(ow->pages[i]); in orangefs_writepages_work()
145 unlock_page(ow->pages[i]); in orangefs_writepages_work()
154 struct orangefs_writepages *ow = data; in orangefs_writepages_callback() local
167 if (ow->npages == 0) { in orangefs_writepages_callback()
168 ow->off = wr->pos; in orangefs_writepages_callback()
169 ow->len = wr->len; in orangefs_writepages_callback()
170 ow->uid = wr->uid; in orangefs_writepages_callback()
171 ow->gid = wr->gid; in orangefs_writepages_callback()
172 ow->pages[ow->npages++] = &folio->page; in orangefs_writepages_callback()
176 if (!uid_eq(ow->uid, wr->uid) || !gid_eq(ow->gid, wr->gid)) { in orangefs_writepages_callback()
177 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
178 ow->npages = 0; in orangefs_writepages_callback()
182 if (ow->off + ow->len == wr->pos) { in orangefs_writepages_callback()
183 ow->len += wr->len; in orangefs_writepages_callback()
184 ow->pages[ow->npages++] = &folio->page; in orangefs_writepages_callback()
190 if (ow->npages) { in orangefs_writepages_callback()
191 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
192 ow->npages = 0; in orangefs_writepages_callback()
199 if (ow->npages == ow->maxpages) { in orangefs_writepages_callback()
200 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
201 ow->npages = 0; in orangefs_writepages_callback()
210 struct orangefs_writepages *ow; in orangefs_writepages() local
213 ow = kzalloc(sizeof(struct orangefs_writepages), GFP_KERNEL); in orangefs_writepages()
214 if (!ow) in orangefs_writepages()
216 ow->maxpages = orangefs_bufmap_size_query()/PAGE_SIZE; in orangefs_writepages()
217 ow->pages = kcalloc(ow->maxpages, sizeof(struct page *), GFP_KERNEL); in orangefs_writepages()
218 if (!ow->pages) { in orangefs_writepages()
219 kfree(ow); in orangefs_writepages()
222 ow->bv = kcalloc(ow->maxpages, sizeof(struct bio_vec), GFP_KERNEL); in orangefs_writepages()
223 if (!ow->bv) { in orangefs_writepages()
224 kfree(ow->pages); in orangefs_writepages()
225 kfree(ow); in orangefs_writepages()
229 ret = write_cache_pages(mapping, wbc, orangefs_writepages_callback, ow); in orangefs_writepages()
230 if (ow->npages) in orangefs_writepages()
231 ret = orangefs_writepages_work(ow, wbc); in orangefs_writepages()
233 kfree(ow->pages); in orangefs_writepages()
234 kfree(ow->bv); in orangefs_writepages()
235 kfree(ow); in orangefs_writepages()