Whamcloud - gitweb
Landing utime et. al. fixes:
authoradilger <adilger>
Thu, 10 Jul 2003 18:57:23 +0000 (18:57 +0000)
committeradilger <adilger>
Thu, 10 Jul 2003 18:57:23 +0000 (18:57 +0000)
- 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

lustre/llite/iod.c

index 420e5e9..4fd3ae4 100644 (file)
@@ -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);