EXIT;
}
-static void ll_writeback(struct inode *inode, struct ll_writeback_pages *llwp)
+static void ll_writeback(struct inode *inode, struct obdo *oa,
+ struct ll_writeback_pages *llwp)
{
- int rc, i;
struct ptlrpc_request_set *set;
+ int rc, i;
ENTRY;
CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p),bytes=%u\n",
CERROR ("Can't create request set\n");
rc = -ENOMEM;
} else {
- rc = obd_brw_async(OBD_BRW_WRITE, ll_i2obdconn(inode),
+ rc = obd_brw_async(OBD_BRW_WRITE, ll_i2obdconn(inode), oa,
ll_i2info(inode)->lli_smd, llwp->npgs,
llwp->pga, set, NULL);
if (rc == 0)
- rc = ptlrpc_set_wait (set);
+ rc = ptlrpc_set_wait(set);
+ if (rc == 0)
+ obdo_refresh_inode(inode, oa,
+ oa->o_valid & ~OBD_MD_FLSIZE);
ptlrpc_set_destroy (set);
}
/*
unsigned long old_flags; /* hack? */
int making_progress;
struct inode *inode;
+ struct obdo oa;
int rc = 0;
ENTRY;
llwp.npgs = 0;
ll_get_dirty_pages(inode, &llwp);
if (llwp.npgs) {
+ oa.o_id =
+ ll_i2info(inode)->lli_smd->lsm_object_id;
+ oa.o_valid = OBD_MD_FLID;
+ obdo_from_inode(&oa, inode,
+ OBD_MD_FLTYPE | OBD_MD_FLATIME|
+ OBD_MD_FLMTIME| OBD_MD_FLCTIME);
lprocfs_counter_add(ll_i2sbi(inode)->ll_stats,
LPROC_LL_WB_PRESSURE,
llwp.npgs);
- ll_writeback(inode, &llwp);
+ ll_writeback(inode, &oa, &llwp);
rc += llwp.npgs;
making_progress = 1;
}
}
#endif /* linux 2.5 */
-int ll_batch_writepage(struct inode *inode, struct page *page)
+int ll_batch_writepage(struct inode *inode, struct obdo *oa, struct page *page)
{
unsigned long old_flags; /* hack? */
struct ll_writeback_pages llwp;
if (llwp.npgs) {
lprocfs_counter_add(ll_i2sbi(inode)->ll_stats,
LPROC_LL_WB_WRITEPAGE, llwp.npgs);
- ll_writeback(inode, &llwp);
+ ll_writeback(inode, oa, &llwp);
}
kfree(llwp.pga);