From: adilger Date: Thu, 10 Jul 2003 18:57:23 +0000 (+0000) Subject: Landing utime et. al. fixes: X-Git-Tag: v1_7_110~2^11~102 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=d8bf19443d7e8060bee21980dbda79a799f758cb;p=fs%2Flustre-release.git Landing utime et. al. fixes: - bug 1014, 36 - utime fixes - bug 1365 - crash on ops with no objects (truncate, utime) - bug 318 - readahead prep work - OST gets client file handle on reads --- diff --git a/lustre/llite/iod.c b/lustre/llite/iod.c index 420e5e9..4fd3ae4 100644 --- a/lustre/llite/iod.c +++ b/lustre/llite/iod.c @@ -153,10 +153,11 @@ static void ll_get_dirty_pages(struct inode *inode, 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", @@ -168,11 +169,14 @@ static void ll_writeback(struct inode *inode, struct ll_writeback_pages *llwp) 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); } /* @@ -278,6 +282,7 @@ int ll_check_dirty(struct super_block *sb) unsigned long old_flags; /* hack? */ int making_progress; struct inode *inode; + struct obdo oa; int rc = 0; ENTRY; @@ -328,10 +333,16 @@ int ll_check_dirty(struct super_block *sb) 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; } @@ -382,7 +393,7 @@ cleanup: } #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; @@ -401,7 +412,7 @@ int ll_batch_writepage(struct inode *inode, struct page *page) 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);