[Top] [All Lists]

XFS: bad clientid on recovery on MIPS (VIPT cache)

To: "xfs@xxxxxxxxxxx" <xfs@xxxxxxxxxxx>
Subject: XFS: bad clientid on recovery on MIPS (VIPT cache)
From: Ajeet Yadav <ajeet.yadav.77@xxxxxxxxx>
Date: Thu, 21 Oct 2010 17:41:43 +0530
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=mnG8HqBQjZsQ/Dgh8fS3BKKuu1AEr2aJcNaz30uPmhc=; b=IKnwEmynIks8G0oHnt7xKOUUPAn92qFnXJ/T3jZDY7O3HpbAEd59Mrqr3kPJt354N7 KwBJ7lP3oGlKM+WczGbcWa1ofbLezgnnNITu5mSLFKyw0dZZ5/9Kg93vq1awhegZVrlO rfktOxMhpu/O+oubk3UQuTrMH7whuIpfDum3E=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=uLfdbSFGTCiv9aIqUN6rWMZqA1qNKgcH7CjD3dH2kkfu7enmKCYbihVZ9h9KG41Jos /T8BWG+ccF4B09ON6I0BRDOtVWimyZeh5ITN3SXyPCUdJXSboBpG5eaOSjB7HguE8hwG YLv/5w2Ja0ItYMbxat66tAeK1OF+mR5hKBHdY=
Dear member,
If I remove USB flash storage from PC/ARM/MIPS target (i.e without umount) while copying file to XFS partition and connect it to MIPS target I always get
XFS: xlog_recover_process_data: bad clientid
XFS: log mount/recovery failed: error 5
XFS: log mount failed
This problem does not occur, if I connect the same USB flash to PC/ARM target.
I have tested this on 2.6.30 - 2.6.34 (It everywhere when concerend with MIPS)
I had two workaround to avoid this problem on MIPS, but I wish to know the exact reason of this problme on MIPS.
I am really tired and giving up, so finally thought of taking your help, your guidence can help me.
1. __flush_cache_all() at the begining of each iteration of while loop in function xlog_recover_process_data(). 
     while ((dp < lp) && num_logops) {
+       __flush_cache_all() ;
         ASSERT(dp + sizeof(xlog_op_header_t) <= lp);
         ohead = (xlog_op_header_t *)dp;
         dp += sizeof(xlog_op_header_t);
         if (ohead->oh_clientid != XFS_TRANSACTION &&
             ohead->oh_clientid != XFS_LOG) {
             "XFS: xlog_recover_process_data: bad clientid")
2. Provide new buffer in each call to xlog_bread in function xlog_do_recovery_pass().
          if (error)
              goto bread_err2;
          /* blocks in data section */
          bblks = (int)BTOBB(be32_to_cpu(rhead->h_len));
+        xlog_put_bp(dbp);
+        dbp = xlog_get_bp(log, BTOBB(h_size));
          error = xlog_bread(log, blk_no + hblks, bblks, dbp,
          if (error)
              goto bread_err2; 
WIth Regards
Ajeet Yadav
<Prev in Thread] Current Thread [Next in Thread>