- struct list_head *wr;
- struct pg_req *req;
-
- wr = &si.s_wr_head;
- while ( (wr = wr->next) != &si.s_wr_head ) {
- req = list_entry(wr, struct pg_req, rq_list);
-
- if (!check_time ||
- req->rq_jiffies <= (jiffies - pup_rpm.age_buffer)) {
- /* write request out to disk */
- obdfs_write_page(req->inode, req->page);
+ struct list_head *tmp = page_list;
+ obd_count num_io = 0;
+ struct obdo *oa = NULL;
+ struct obdo *obdos[MAX_IOVEC];
+ struct page *pages[MAX_IOVEC];
+ char *bufs[MAX_IOVEC];
+ obd_size counts[MAX_IOVEC];
+ obd_off offsets[MAX_IOVEC];
+ obd_flag flags[MAX_IOVEC];
+ int err = 0;
+ int i;
+ struct inode *inode = NULL;
+
+ ENTRY;
+
+ if ( list_empty(page_list)) {
+ CDEBUG(D_INODE, "list empty\n");
+ EXIT;
+ return 0;
+ }
+
+
+ /* add all of the outstanding pages to a write vector, and write it */
+ while ( (tmp = tmp->next) != page_list ) {
+ struct obdfs_pgrq *pgrq;
+ struct page *page;
+
+ if ( flush_inode )
+ pgrq = list_entry(tmp, struct obdfs_pgrq, rq_ilist);
+ else
+ pgrq = list_entry(tmp, struct obdfs_pgrq, rq_slist);
+ page = pgrq->rq_page;
+ inode = pgrq->rq_inode;
+
+ if (check_time &&
+ pgrq->rq_jiffies > (jiffies - pupd_prm.age_buffer))
+ continue;
+
+ oa = obdo_fromid(IID(inode), inode->i_ino, OBD_MD_FLNOTOBD);
+ if ( IS_ERR(oa) ) {
+ EXIT;
+ return PTR_ERR(oa);