Lines Matching refs:ow

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