From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Turner Subject: Re: [PATCH] e2fsck: Correct ext4 dates generated by old kernels Date: Thu, 26 Nov 2015 00:27:41 -0500 Message-ID: <1448515661.4511.2.camel@novalis.org> References: <1448400852-90545-1-git-send-email-adilger@dilger.ca> <1448431295.7696.9.camel@novalis.org> <20151125094632.GA2632@thunk.org> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: Andreas Dilger , linux-ext4@vger.kernel.org To: Theodore Ts'o Return-path: Received: from sub3.mail.dreamhost.com ([69.163.253.7]:59898 "EHLO homiemail-a19.g.dreamhost.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750984AbbKZF1n (ORCPT ); Thu, 26 Nov 2015 00:27:43 -0500 In-Reply-To: <20151125094632.GA2632@thunk.org> Sender: linux-ext4-owner@vger.kernel.org List-ID: On Wed, 2015-11-25 at 04:46 -0500, Theodore Ts'o wrote: > On Wed, Nov 25, 2015 at 01:01:35AM -0500, David Turner wrote: > > On Tue, 2015-11-24 at 14:34 -0700, Andreas Dilger wrote: > > > +static int check_inode_extra_negative_epoch(__u32 xtime, __u32 > > > extra) { > > > + return (xtime & (1 << 31)) != 0 && > > > > On a re-read, I think the bitshift is technically undefined > > behavior > > because 1 is signed and 2**31 is not representable as a signed (32 > > -bit) > > int. Changing it to 1U should fix it. > > Instead of doing all of the bitshifts, I was thinking about doing > something much simpler: > > ... > if (inode->ctime_hi == 3 && fix_problem(....) > inode->ctime_hi = 0; > if (inode->mtime_hi == 3 && fix_problem(....) > inode->mtime_hi = 0; > > Hmm? That should work just as well, and is easier to read and > understand what's going on, and matches with the test we are using in > the kernel. I think we also need to check that the {a,c,m}time has the high bit set.