From: Marcin Slusarz <marcin.slusarz@gmail.com>
To: Jan Kara <jack@suse.cz>
Cc: LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3/6] udf: convert udf_stamp_to_time to return struct timespec
Date: Tue, 5 Feb 2008 20:12:05 +0100 [thread overview]
Message-ID: <20080205191136.GA6234@joi> (raw)
In-Reply-To: <20080205154831.GH25464@duck.suse.cz>
On Tue, Feb 05, 2008 at 04:48:31PM +0100, Jan Kara wrote:
>
> Uh, oh. I guess you somehow mangled the ordering of patches. In this
> patch you revert what you've done in the previous patch. Otherwise I agree
> with the idea of the change...
No, the ordering is ok. Creation of udf_fill_inode_time was an intermediate
state in this cleanup. Every step is obvious and easy. When I tried to create
just one patch it didn't look so obvious, so I decided to send it in 4 parts.
>
> On Sun 03-02-08 19:36:08, marcin.slusarz@gmail.com wrote:
> > Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
> > Cc: Jan Kara <jack@suse.cz>
> > ---
> > fs/udf/inode.c | 49 ++++++++++++++++++++++++++-----------------------
> > fs/udf/super.c | 9 ++-------
> > fs/udf/udfdecl.h | 4 ++--
> > fs/udf/udftime.c | 17 +++++++----------
> > 4 files changed, 37 insertions(+), 42 deletions(-)
> >
> > diff --git a/fs/udf/inode.c b/fs/udf/inode.c
> > index 2578677..252efe0 100644
> > --- a/fs/udf/inode.c
> > +++ b/fs/udf/inode.c
> > @@ -1151,20 +1151,6 @@ static void __udf_read_inode(struct inode *inode)
> > brelse(bh);
> > }
> >
> > -static void udf_fill_inode_time(struct timespec *tspec,
> > - const timestamp *tstamp,
> > - struct udf_sb_info *sbi)
> > -{
> > - time_t convtime;
> > - long convtime_usec;
> > - if (udf_stamp_to_time(&convtime, &convtime_usec,
> > - lets_to_cpu(*tstamp))) {
> > - tspec->tv_sec = convtime;
> > - tspec->tv_nsec = convtime_usec * 1000;
> > - } else
> > - *tspec = sbi->s_record_time;
> > -}
> > -
>
> > static void udf_fill_inode(struct inode *inode, struct buffer_head *bh)
> > {
> > struct fileEntry *fe;
> > @@ -1256,10 +1242,17 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh)
> > inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) <<
> > (inode->i_sb->s_blocksize_bits - 9);
> >
> > - udf_fill_inode_time(&inode->i_atime, &fe->accessTime, sbi);
> > - udf_fill_inode_time(&inode->i_mtime, &fe->modificationTime,
> > - sbi);
> > - udf_fill_inode_time(&inode->i_ctime, &fe->attrTime, sbi);
> > + if (!udf_stamp_to_time(&inode->i_atime,
> > + lets_to_cpu(fe->accessTime)))
> > + inode->i_atime = sbi->s_record_time;
> > +
> > + if (!udf_stamp_to_time(&inode->i_mtime,
> > + lets_to_cpu(fe->modificationTime)))
> > + inode->i_mtime = sbi->s_record_time;
> > +
> > + if (!udf_stamp_to_time(&inode->i_ctime,
> > + lets_to_cpu(fe->attrTime)))
> > + inode->i_ctime = sbi->s_record_time;
> >
> > iinfo->i_unique = le64_to_cpu(fe->uniqueID);
> > iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr);
> > @@ -1269,11 +1262,21 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh)
> > inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) <<
> > (inode->i_sb->s_blocksize_bits - 9);
> >
> > - udf_fill_inode_time(&inode->i_atime, &efe->accessTime, sbi);
> > - udf_fill_inode_time(&inode->i_mtime, &efe->modificationTime,
> > - sbi);
> > - udf_fill_inode_time(&iinfo->i_crtime, &efe->createTime, sbi);
> > - udf_fill_inode_time(&inode->i_ctime, &efe->attrTime, sbi);
> > + if (!udf_stamp_to_time(&inode->i_atime,
> > + lets_to_cpu(efe->accessTime)))
> > + inode->i_atime = sbi->s_record_time;
> > +
> > + if (!udf_stamp_to_time(&inode->i_mtime,
> > + lets_to_cpu(efe->modificationTime)))
> > + inode->i_mtime = sbi->s_record_time;
> > +
> > + if (!udf_stamp_to_time(&iinfo->i_crtime,
> > + lets_to_cpu(efe->createTime)))
> > + iinfo->i_crtime = sbi->s_record_time;
> > +
> > + if (!udf_stamp_to_time(&inode->i_ctime,
> > + lets_to_cpu(efe->attrTime)))
> > + inode->i_ctime = sbi->s_record_time;
> >
> > iinfo->i_unique = le64_to_cpu(efe->uniqueID);
> > iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr);
> > diff --git a/fs/udf/super.c b/fs/udf/super.c
> > index 0dcee12..9f565a9 100644
> > --- a/fs/udf/super.c
> > +++ b/fs/udf/super.c
> > @@ -909,24 +909,19 @@ static int udf_find_fileset(struct super_block *sb,
> > static void udf_load_pvoldesc(struct super_block *sb, struct buffer_head *bh)
> > {
> > struct primaryVolDesc *pvoldesc;
> > - time_t recording;
> > - long recording_usec;
> > struct ustr instr;
> > struct ustr outstr;
> >
> > pvoldesc = (struct primaryVolDesc *)bh->b_data;
> >
> > - if (udf_stamp_to_time(&recording, &recording_usec,
> > + if (udf_stamp_to_time(&UDF_SB(sb)->s_record_time,
> > lets_to_cpu(pvoldesc->recordingDateAndTime))) {
> > kernel_timestamp ts;
> > ts = lets_to_cpu(pvoldesc->recordingDateAndTime);
> > - udf_debug("recording time %ld/%ld, %04u/%02u/%02u"
> > + udf_debug("recording time %04u/%02u/%02u"
> > " %02u:%02u (%x)\n",
> > - recording, recording_usec,
> > ts.year, ts.month, ts.day, ts.hour,
> > ts.minute, ts.typeAndTimezone);
> > - UDF_SB(sb)->s_record_time.tv_sec = recording;
> > - UDF_SB(sb)->s_record_time.tv_nsec = recording_usec * 1000;
> > }
> >
> > if (!udf_build_ustr(&instr, pvoldesc->volIdent, 32))
> > diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h
> > index 375be1b..508be85 100644
> > --- a/fs/udf/udfdecl.h
> > +++ b/fs/udf/udfdecl.h
> > @@ -204,7 +204,7 @@ extern short_ad *udf_get_fileshortad(uint8_t *, int, uint32_t *, int);
> > extern uint16_t udf_crc(const uint8_t *, uint32_t, uint16_t);
> >
> > /* udftime.c */
> > -extern time_t *udf_stamp_to_time(time_t *, long *, kernel_timestamp);
> > -extern kernel_timestamp *udf_time_to_stamp(kernel_timestamp *, struct timespec);
> > +extern struct timespec *udf_stamp_to_time(struct timespec *dest, kernel_timestamp src);
> > +extern kernel_timestamp *udf_time_to_stamp(kernel_timestamp *dest, struct timespec src);
> >
> > #endif /* __UDF_DECL_H */
> > diff --git a/fs/udf/udftime.c b/fs/udf/udftime.c
> > index ce59573..12fae6c 100644
> > --- a/fs/udf/udftime.c
> > +++ b/fs/udf/udftime.c
> > @@ -85,7 +85,7 @@ extern struct timezone sys_tz;
> > #define SECS_PER_HOUR (60 * 60)
> > #define SECS_PER_DAY (SECS_PER_HOUR * 24)
> >
> > -time_t *udf_stamp_to_time(time_t *dest, long *dest_usec, kernel_timestamp src)
> > +struct timespec *udf_stamp_to_time(struct timespec *dest, kernel_timestamp src)
> > {
> > int yday;
> > uint8_t type = src.typeAndTimezone >> 12;
> > @@ -97,23 +97,20 @@ time_t *udf_stamp_to_time(time_t *dest, long *dest_usec, kernel_timestamp src)
> > offset = (offset >> 4);
> > if (offset == -2047) /* unspecified offset */
> > offset = 0;
> > - } else {
> > + } else
> > offset = 0;
> > - }
> >
> > if ((src.year < EPOCH_YEAR) ||
> > (src.year >= EPOCH_YEAR + MAX_YEAR_SECONDS)) {
> > - *dest = -1;
> > - *dest_usec = -1;
> > return NULL;
> > }
> > - *dest = year_seconds[src.year - EPOCH_YEAR];
> > - *dest -= offset * 60;
> > + dest->tv_sec = year_seconds[src.year - EPOCH_YEAR];
> > + dest->tv_sec -= offset * 60;
> >
> > yday = ((__mon_yday[__isleap(src.year)][src.month - 1]) + src.day - 1);
> > - *dest += (((yday * 24) + src.hour) * 60 + src.minute) * 60 + src.second;
> > - *dest_usec = src.centiseconds * 10000 +
> > - src.hundredsOfMicroseconds * 100 + src.microseconds;
> > + dest->tv_sec += (((yday * 24) + src.hour) * 60 + src.minute) * 60 + src.second;
> > + dest->tv_nsec = 1000 * (src.centiseconds * 10000 +
> > + src.hundredsOfMicroseconds * 100 + src.microseconds);
> > return dest;
> > }
> >
> > --
> > 1.5.3.7
>
> Honza
> --
> Jan Kara <jack@suse.cz>
> SUSE Labs, CR
next prev parent reply other threads:[~2008-02-05 19:12 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-03 18:36 [PATCH 0/6] udf: next round of cleanups marcin.slusarz
2008-02-03 18:36 ` [PATCH 1/6] udf: udf_get_block, inode_bmap - remove unneeded checks marcin.slusarz
2008-02-05 15:30 ` Jan Kara
2008-02-03 18:36 ` [PATCH 2/6] udf: create function for conversion from timestamp to timespec marcin.slusarz
2008-02-05 15:32 ` Jan Kara
2008-02-03 18:36 ` [PATCH 3/6] udf: convert udf_stamp_to_time to return struct timespec marcin.slusarz
2008-02-05 15:48 ` Jan Kara
2008-02-05 19:12 ` Marcin Slusarz [this message]
2008-02-06 13:25 ` Jan Kara
2008-02-03 18:36 ` [PATCH 4/6] udf: convert udf_stamp_to_time and udf_time_to_stamp to use timestamps marcin.slusarz
2008-02-05 15:59 ` Jan Kara
2008-02-05 19:21 ` Marcin Slusarz
2008-02-06 11:10 ` Jan Kara
2008-02-10 10:25 ` Marcin Slusarz
2008-02-03 18:36 ` [PATCH 5/6] udf: remove unneeded kernel_timestamp type marcin.slusarz
2008-02-05 16:01 ` Jan Kara
2008-02-10 10:29 ` Marcin Slusarz
2008-02-03 18:42 ` [PATCH 6/6] udf: super.c reorganization Marcin Slusarz
2008-02-05 16:22 ` Jan Kara
2008-02-05 19:34 ` Marcin Slusarz
2008-02-06 11:09 ` Jan Kara
2008-02-10 10:33 ` Marcin Slusarz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080205191136.GA6234@joi \
--to=marcin.slusarz@gmail.com \
--cc=jack@suse.cz \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.