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