Lines Matching refs:ow

94 static int orangefs_writepages_work(struct orangefs_writepages *ow,  in orangefs_writepages_work()  argument
97 struct inode *inode = ow->pages[0]->mapping->host; in orangefs_writepages_work()
107 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
108 set_page_writeback(ow->pages[i]); in orangefs_writepages_work()
109 ow->bv[i].bv_page = ow->pages[i]; in orangefs_writepages_work()
110 ow->bv[i].bv_len = min(page_offset(ow->pages[i]) + PAGE_SIZE, in orangefs_writepages_work()
111 ow->off + ow->len) - in orangefs_writepages_work()
112 max(ow->off, page_offset(ow->pages[i])); in orangefs_writepages_work()
114 ow->bv[i].bv_offset = ow->off - in orangefs_writepages_work()
115 page_offset(ow->pages[i]); in orangefs_writepages_work()
117 ow->bv[i].bv_offset = 0; in orangefs_writepages_work()
119 iov_iter_bvec(&iter, WRITE, ow->bv, ow->npages, ow->len); in orangefs_writepages_work()
121 WARN_ON(ow->off >= len); in orangefs_writepages_work()
122 if (ow->off + ow->len > len) in orangefs_writepages_work()
123 ow->len = len - ow->off; in orangefs_writepages_work()
125 off = ow->off; in orangefs_writepages_work()
126 wr.uid = ow->uid; in orangefs_writepages_work()
127 wr.gid = ow->gid; in orangefs_writepages_work()
128 ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, ow->len, in orangefs_writepages_work()
131 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
132 SetPageError(ow->pages[i]); in orangefs_writepages_work()
133 mapping_set_error(ow->pages[i]->mapping, ret); in orangefs_writepages_work()
134 if (PagePrivate(ow->pages[i])) { in orangefs_writepages_work()
136 page_private(ow->pages[i]); in orangefs_writepages_work()
137 ClearPagePrivate(ow->pages[i]); in orangefs_writepages_work()
138 put_page(ow->pages[i]); in orangefs_writepages_work()
141 end_page_writeback(ow->pages[i]); in orangefs_writepages_work()
142 unlock_page(ow->pages[i]); in orangefs_writepages_work()
146 for (i = 0; i < ow->npages; i++) { in orangefs_writepages_work()
147 if (PagePrivate(ow->pages[i])) { in orangefs_writepages_work()
149 page_private(ow->pages[i]); in orangefs_writepages_work()
150 ClearPagePrivate(ow->pages[i]); in orangefs_writepages_work()
151 put_page(ow->pages[i]); in orangefs_writepages_work()
154 end_page_writeback(ow->pages[i]); in orangefs_writepages_work()
155 unlock_page(ow->pages[i]); in orangefs_writepages_work()
164 struct orangefs_writepages *ow = data; in orangefs_writepages_callback() local
178 if (ow->npages == 0) { in orangefs_writepages_callback()
179 ow->off = wr->pos; in orangefs_writepages_callback()
180 ow->len = wr->len; in orangefs_writepages_callback()
181 ow->uid = wr->uid; in orangefs_writepages_callback()
182 ow->gid = wr->gid; in orangefs_writepages_callback()
183 ow->pages[ow->npages++] = page; in orangefs_writepages_callback()
187 if (!uid_eq(ow->uid, wr->uid) || !gid_eq(ow->gid, wr->gid)) { in orangefs_writepages_callback()
188 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
189 ow->npages = 0; in orangefs_writepages_callback()
193 if (ow->off + ow->len == wr->pos) { in orangefs_writepages_callback()
194 ow->len += wr->len; in orangefs_writepages_callback()
195 ow->pages[ow->npages++] = page; in orangefs_writepages_callback()
201 if (ow->npages) { in orangefs_writepages_callback()
202 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
203 ow->npages = 0; in orangefs_writepages_callback()
210 if (ow->npages == ow->maxpages) { in orangefs_writepages_callback()
211 orangefs_writepages_work(ow, wbc); in orangefs_writepages_callback()
212 ow->npages = 0; in orangefs_writepages_callback()
221 struct orangefs_writepages *ow; in orangefs_writepages() local
224 ow = kzalloc(sizeof(struct orangefs_writepages), GFP_KERNEL); in orangefs_writepages()
225 if (!ow) in orangefs_writepages()
227 ow->maxpages = orangefs_bufmap_size_query()/PAGE_SIZE; in orangefs_writepages()
228 ow->pages = kcalloc(ow->maxpages, sizeof(struct page *), GFP_KERNEL); in orangefs_writepages()
229 if (!ow->pages) { in orangefs_writepages()
230 kfree(ow); in orangefs_writepages()
233 ow->bv = kcalloc(ow->maxpages, sizeof(struct bio_vec), GFP_KERNEL); in orangefs_writepages()
234 if (!ow->bv) { in orangefs_writepages()
235 kfree(ow->pages); in orangefs_writepages()
236 kfree(ow); in orangefs_writepages()
240 ret = write_cache_pages(mapping, wbc, orangefs_writepages_callback, ow); in orangefs_writepages()
241 if (ow->npages) in orangefs_writepages()
242 ret = orangefs_writepages_work(ow, wbc); in orangefs_writepages()
244 kfree(ow->pages); in orangefs_writepages()
245 kfree(ow->bv); in orangefs_writepages()
246 kfree(ow); in orangefs_writepages()