Lines Matching refs:ow

90 static int orangefs_writepages_work(struct orangefs_writepages *ow,  in orangefs_writepages_work()  argument
93 struct inode *inode = ow->pages[0]->mapping->host; in orangefs_writepages_work()
103 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
104 set_page_writeback(ow->pages[i]); in orangefs_writepages_work()
105 ow->bv[i].bv_page = ow->pages[i]; in orangefs_writepages_work()
106 ow->bv[i].bv_len = min(page_offset(ow->pages[i]) + PAGE_SIZE, in orangefs_writepages_work()
107 ow->off + ow->len) - in orangefs_writepages_work()
108 max(ow->off, page_offset(ow->pages[i])); in orangefs_writepages_work()
110 ow->bv[i].bv_offset = ow->off - in orangefs_writepages_work()
111 page_offset(ow->pages[i]); in orangefs_writepages_work()
113 ow->bv[i].bv_offset = 0; in orangefs_writepages_work()
115 iov_iter_bvec(&iter, WRITE, ow->bv, ow->npages, ow->len); in orangefs_writepages_work()
117 WARN_ON(ow->off >= len); in orangefs_writepages_work()
118 if (ow->off + ow->len > len) in orangefs_writepages_work()
119 ow->len = len - ow->off; in orangefs_writepages_work()
121 off = ow->off; in orangefs_writepages_work()
122 wr.uid = ow->uid; in orangefs_writepages_work()
123 wr.gid = ow->gid; in orangefs_writepages_work()
124 ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, ow->len, in orangefs_writepages_work()
127 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
128 SetPageError(ow->pages[i]); in orangefs_writepages_work()
129 mapping_set_error(ow->pages[i]->mapping, ret); in orangefs_writepages_work()
130 if (PagePrivate(ow->pages[i])) { in orangefs_writepages_work()
132 page_private(ow->pages[i]); in orangefs_writepages_work()
133 ClearPagePrivate(ow->pages[i]); in orangefs_writepages_work()
134 put_page(ow->pages[i]); in orangefs_writepages_work()
137 end_page_writeback(ow->pages[i]); in orangefs_writepages_work()
138 unlock_page(ow->pages[i]); in orangefs_writepages_work()
142 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
143 if (PagePrivate(ow->pages[i])) { in orangefs_writepages_work()
145 page_private(ow->pages[i]); in orangefs_writepages_work()
146 ClearPagePrivate(ow->pages[i]); in orangefs_writepages_work()
147 put_page(ow->pages[i]); in orangefs_writepages_work()
150 end_page_writeback(ow->pages[i]); in orangefs_writepages_work()
151 unlock_page(ow->pages[i]); in orangefs_writepages_work()
160 struct orangefs_writepages *ow = data; in orangefs_writepages_callback() local
174 if (ow->npages == 0) { in orangefs_writepages_callback()
175 ow->off = wr->pos; in orangefs_writepages_callback()
176 ow->len = wr->len; in orangefs_writepages_callback()
177 ow->uid = wr->uid; in orangefs_writepages_callback()
178 ow->gid = wr->gid; in orangefs_writepages_callback()
179 ow->pages[ow->npages++] = page; in orangefs_writepages_callback()
183 if (!uid_eq(ow->uid, wr->uid) || !gid_eq(ow->gid, wr->gid)) { in orangefs_writepages_callback()
184 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
185 ow->npages = 0; in orangefs_writepages_callback()
189 if (ow->off + ow->len == wr->pos) { in orangefs_writepages_callback()
190 ow->len += wr->len; in orangefs_writepages_callback()
191 ow->pages[ow->npages++] = page; in orangefs_writepages_callback()
197 if (ow->npages) { in orangefs_writepages_callback()
198 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
199 ow->npages = 0; in orangefs_writepages_callback()
206 if (ow->npages == ow->maxpages) { in orangefs_writepages_callback()
207 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
208 ow->npages = 0; in orangefs_writepages_callback()
217 struct orangefs_writepages *ow; in orangefs_writepages() local
220 ow = kzalloc(sizeof(struct orangefs_writepages), GFP_KERNEL); in orangefs_writepages()
221 if (!ow) in orangefs_writepages()
223 ow->maxpages = orangefs_bufmap_size_query()/PAGE_SIZE; in orangefs_writepages()
224 ow->pages = kcalloc(ow->maxpages, sizeof(struct page *), GFP_KERNEL); in orangefs_writepages()
225 if (!ow->pages) { in orangefs_writepages()
226 kfree(ow); in orangefs_writepages()
229 ow->bv = kcalloc(ow->maxpages, sizeof(struct bio_vec), GFP_KERNEL); in orangefs_writepages()
230 if (!ow->bv) { in orangefs_writepages()
231 kfree(ow->pages); in orangefs_writepages()
232 kfree(ow); in orangefs_writepages()
236 ret = write_cache_pages(mapping, wbc, orangefs_writepages_callback, ow); in orangefs_writepages()
237 if (ow->npages) in orangefs_writepages()
238 ret = orangefs_writepages_work(ow, wbc); in orangefs_writepages()
240 kfree(ow->pages); in orangefs_writepages()
241 kfree(ow->bv); in orangefs_writepages()
242 kfree(ow); in orangefs_writepages()