diff options
| -rw-r--r-- | fs/udf/file.c | 3 | ||||
| -rw-r--r-- | fs/udf/ialloc.c | 6 | ||||
| -rw-r--r-- | fs/udf/inode.c | 88 | ||||
| -rw-r--r-- | fs/udf/namei.c | 6 | ||||
| -rw-r--r-- | fs/udf/super.c | 9 | ||||
| -rw-r--r-- | fs/udf/udf_i.h | 3 | ||||
| -rw-r--r-- | fs/udf/udfdecl.h | 4 | ||||
| -rw-r--r-- | fs/udf/udftime.c | 14 | ||||
| -rw-r--r-- | include/linux/udf_fs_i.h | 5 | ||||
| -rw-r--r-- | include/linux/udf_fs_sb.h | 2 |
10 files changed, 50 insertions, 90 deletions
diff --git a/fs/udf/file.c b/fs/udf/file.c index 5016ee1dc7e5..4c519798fc1b 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -145,10 +145,7 @@ static ssize_t udf_file_write(struct file * file, const char * buf, retval = generic_file_write(file, buf, count, ppos); if (retval > 0) - { - UDF_I_UCTIME(inode) = UDF_I_UMTIME(inode) = CURRENT_UTIME; mark_inode_dirty(inode); - } return retval; } diff --git a/fs/udf/ialloc.c b/fs/udf/ialloc.c index 35ffa13420d6..be11d8af3b7c 100644 --- a/fs/udf/ialloc.c +++ b/fs/udf/ialloc.c @@ -156,10 +156,8 @@ struct inode * udf_new_inode (struct inode *dir, int mode, int * err) UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_SHORT; else UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_LONG; - inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; - UDF_I_CRTIME(inode) = get_seconds(); - UDF_I_UMTIME(inode) = UDF_I_UCTIME(inode) = - UDF_I_UCRTIME(inode) = get_seconds(); + inode->i_mtime = inode->i_atime = inode->i_ctime = + UDF_I_CRTIME(inode) = CURRENT_TIME; insert_inode_hash(inode); mark_inode_dirty(inode); diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 9ce72a9c9136..d1047e8aa65c 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -573,7 +573,6 @@ static struct buffer_head * inode_getblk(struct inode * inode, long block, UDF_I_NEXT_ALLOC_BLOCK(inode) = block; UDF_I_NEXT_ALLOC_GOAL(inode) = newblocknum; inode->i_ctime = CURRENT_TIME; - UDF_I_UCTIME(inode) = CURRENT_UTIME; if (IS_SYNC(inode)) udf_sync_inode(inode); @@ -877,7 +876,6 @@ void udf_truncate(struct inode * inode) } inode->i_mtime = inode->i_ctime = CURRENT_TIME; - UDF_I_UMTIME(inode) = UDF_I_UCTIME(inode) = CURRENT_UTIME; if (IS_SYNC(inode)) udf_sync_inode (inode); else @@ -1023,10 +1021,6 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) UDF_I_STRAT4096(inode) = 1; UDF_I_ALLOCTYPE(inode) = le16_to_cpu(fe->icbTag.flags) & ICBTAG_FLAG_AD_MASK; - UDF_I_UMTIME(inode) = 0; - UDF_I_UCTIME(inode) = 0; - UDF_I_CRTIME(inode) = 0; - UDF_I_UCRTIME(inode) = 0; UDF_I_UNIQUE(inode) = 0; UDF_I_LENEATTR(inode) = 0; UDF_I_LENEXTENTS(inode) = 0; @@ -1084,40 +1078,33 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) lets_to_cpu(fe->accessTime)) ) { inode->i_atime.tv_sec = convtime; - inode->i_atime.tv_nsec = 0; + inode->i_atime.tv_nsec = convtime_usec * 1000; } else { - inode->i_atime.tv_sec = UDF_SB_RECORDTIME(inode->i_sb); - inode->i_atime.tv_nsec = 0; + inode->i_atime = UDF_SB_RECORDTIME(inode->i_sb); } if ( udf_stamp_to_time(&convtime, &convtime_usec, lets_to_cpu(fe->modificationTime)) ) { inode->i_mtime.tv_sec = convtime; - inode->i_mtime.tv_nsec = 0; - UDF_I_UMTIME(inode) = convtime_usec; + inode->i_mtime.tv_nsec = convtime_usec * 1000; } else { - inode->i_mtime.tv_sec = UDF_SB_RECORDTIME(inode->i_sb); - inode->i_mtime.tv_nsec = 0; - UDF_I_UMTIME(inode) = 0; + inode->i_mtime = UDF_SB_RECORDTIME(inode->i_sb); } if ( udf_stamp_to_time(&convtime, &convtime_usec, lets_to_cpu(fe->attrTime)) ) { inode->i_ctime.tv_sec = convtime; - inode->i_ctime.tv_nsec = 0; - UDF_I_UCTIME(inode) = convtime_usec; + inode->i_ctime.tv_nsec = convtime_usec * 1000; } else { - inode->i_ctime.tv_sec = UDF_SB_RECORDTIME(inode->i_sb); - inode->i_ctime.tv_nsec = 0; - UDF_I_UCTIME(inode) = 0; + inode->i_ctime = UDF_SB_RECORDTIME(inode->i_sb); } UDF_I_UNIQUE(inode) = le64_to_cpu(fe->uniqueID); @@ -1135,52 +1122,44 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) lets_to_cpu(efe->accessTime)) ) { inode->i_atime.tv_sec = convtime; - inode->i_atime.tv_nsec = 0; + inode->i_atime.tv_nsec = convtime_usec * 1000; } else { - inode->i_atime.tv_sec = UDF_SB_RECORDTIME(inode->i_sb); - inode->i_atime.tv_nsec = 0; + inode->i_atime = UDF_SB_RECORDTIME(inode->i_sb); } if ( udf_stamp_to_time(&convtime, &convtime_usec, lets_to_cpu(efe->modificationTime)) ) { inode->i_mtime.tv_sec = convtime; - inode->i_mtime.tv_nsec = 0; - UDF_I_UMTIME(inode) = convtime_usec; + inode->i_mtime.tv_nsec = convtime_usec * 1000; } else { - inode->i_mtime.tv_sec = UDF_SB_RECORDTIME(inode->i_sb); - inode->i_mtime.tv_nsec = 0; - UDF_I_UMTIME(inode) = 0; + inode->i_mtime = UDF_SB_RECORDTIME(inode->i_sb); } if ( udf_stamp_to_time(&convtime, &convtime_usec, lets_to_cpu(efe->createTime)) ) { - UDF_I_CRTIME(inode) = convtime; - UDF_I_UCRTIME(inode) = convtime_usec; + UDF_I_CRTIME(inode).tv_sec = convtime; + UDF_I_CRTIME(inode).tv_nsec = convtime_usec * 1000; } else { UDF_I_CRTIME(inode) = UDF_SB_RECORDTIME(inode->i_sb); - UDF_I_UCRTIME(inode) = 0; } if ( udf_stamp_to_time(&convtime, &convtime_usec, lets_to_cpu(efe->attrTime)) ) { inode->i_ctime.tv_sec = convtime; - inode->i_ctime.tv_nsec = 0; - UDF_I_UCTIME(inode) = convtime_usec; + inode->i_ctime.tv_nsec = convtime_usec * 1000; } else { - inode->i_ctime.tv_sec = UDF_SB_RECORDTIME(inode->i_sb); - inode->i_ctime.tv_nsec = 0; - UDF_I_UCTIME(inode) = 0; + inode->i_ctime = UDF_SB_RECORDTIME(inode->i_sb); } UDF_I_UNIQUE(inode) = le64_to_cpu(efe->uniqueID); @@ -1423,11 +1402,11 @@ udf_update_inode(struct inode *inode, int do_sync) (inode->i_blocks + (1 << (inode->i_sb->s_blocksize_bits - 9)) - 1) >> (inode->i_sb->s_blocksize_bits - 9)); - if (udf_time_to_stamp(&cpu_time, inode->i_atime.tv_sec, 0)) + if (udf_time_to_stamp(&cpu_time, inode->i_atime)) fe->accessTime = cpu_to_lets(cpu_time); - if (udf_time_to_stamp(&cpu_time, inode->i_mtime.tv_sec, UDF_I_UMTIME(inode))) + if (udf_time_to_stamp(&cpu_time, inode->i_mtime)) fe->modificationTime = cpu_to_lets(cpu_time); - if (udf_time_to_stamp(&cpu_time, inode->i_ctime.tv_sec, UDF_I_UCTIME(inode))) + if (udf_time_to_stamp(&cpu_time, inode->i_ctime)) fe->attrTime = cpu_to_lets(cpu_time); memset(&(fe->impIdent), 0, sizeof(regid)); strcpy(fe->impIdent.ident, UDF_ID_DEVELOPER); @@ -1447,33 +1426,32 @@ udf_update_inode(struct inode *inode, int do_sync) (inode->i_blocks + (1 << (inode->i_sb->s_blocksize_bits - 9)) - 1) >> (inode->i_sb->s_blocksize_bits - 9)); - if (UDF_I_CRTIME(inode) >= inode->i_atime.tv_sec) + if (UDF_I_CRTIME(inode).tv_sec > inode->i_atime.tv_sec || + (UDF_I_CRTIME(inode).tv_sec == inode->i_atime.tv_sec && + UDF_I_CRTIME(inode).tv_nsec > inode->i_atime.tv_nsec)) { - UDF_I_CRTIME(inode) = inode->i_atime.tv_sec; - UDF_I_UCRTIME(inode) = 0; + UDF_I_CRTIME(inode) = inode->i_atime; } - if (UDF_I_CRTIME(inode) > inode->i_mtime.tv_sec || - (UDF_I_CRTIME(inode) == inode->i_mtime.tv_sec && - UDF_I_UCRTIME(inode) > UDF_I_UMTIME(inode))) + if (UDF_I_CRTIME(inode).tv_sec > inode->i_mtime.tv_sec || + (UDF_I_CRTIME(inode).tv_sec == inode->i_mtime.tv_sec && + UDF_I_CRTIME(inode).tv_nsec > inode->i_mtime.tv_nsec)) { - UDF_I_CRTIME(inode) = inode->i_mtime.tv_sec; - UDF_I_UCRTIME(inode) = UDF_I_UMTIME(inode); + UDF_I_CRTIME(inode) = inode->i_mtime; } - if (UDF_I_CRTIME(inode) > inode->i_ctime.tv_sec || - (UDF_I_CRTIME(inode) == inode->i_ctime.tv_sec && - UDF_I_UCRTIME(inode) > UDF_I_UCTIME(inode))) + if (UDF_I_CRTIME(inode).tv_sec > inode->i_ctime.tv_sec || + (UDF_I_CRTIME(inode).tv_sec == inode->i_ctime.tv_sec && + UDF_I_CRTIME(inode).tv_nsec > inode->i_ctime.tv_nsec)) { - UDF_I_CRTIME(inode) = inode->i_ctime.tv_sec; - UDF_I_UCRTIME(inode) = UDF_I_UCTIME(inode); + UDF_I_CRTIME(inode) = inode->i_ctime; } - if (udf_time_to_stamp(&cpu_time, inode->i_atime.tv_sec, 0)) + if (udf_time_to_stamp(&cpu_time, inode->i_atime)) efe->accessTime = cpu_to_lets(cpu_time); - if (udf_time_to_stamp(&cpu_time, inode->i_mtime.tv_sec, UDF_I_UMTIME(inode))) + if (udf_time_to_stamp(&cpu_time, inode->i_mtime)) efe->modificationTime = cpu_to_lets(cpu_time); - if (udf_time_to_stamp(&cpu_time, UDF_I_CRTIME(inode), UDF_I_UCRTIME(inode))) + if (udf_time_to_stamp(&cpu_time, UDF_I_CRTIME(inode))) efe->createTime = cpu_to_lets(cpu_time); - if (udf_time_to_stamp(&cpu_time, inode->i_ctime.tv_sec, UDF_I_UCTIME(inode))) + if (udf_time_to_stamp(&cpu_time, inode->i_ctime)) efe->attrTime = cpu_to_lets(cpu_time); memset(&(efe->impIdent), 0, sizeof(regid)); diff --git a/fs/udf/namei.c b/fs/udf/namei.c index 84d4c1fc109c..138b1c8e3deb 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c @@ -882,7 +882,6 @@ static int udf_rmdir(struct inode * dir, struct dentry * dentry) mark_inode_dirty(inode); dir->i_nlink --; inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME; - UDF_I_UCTIME(inode) = UDF_I_UCTIME(dir) = UDF_I_UMTIME(dir) = CURRENT_UTIME; mark_inode_dirty(dir); end_rmdir: @@ -926,7 +925,6 @@ static int udf_unlink(struct inode * dir, struct dentry * dentry) if (retval) goto end_unlink; dir->i_ctime = dir->i_mtime = CURRENT_TIME; - UDF_I_UCTIME(dir) = UDF_I_UMTIME(dir) = CURRENT_UTIME; mark_inode_dirty(dir); inode->i_nlink--; mark_inode_dirty(inode); @@ -1157,7 +1155,6 @@ static int udf_link(struct dentry * old_dentry, struct inode * dir, udf_release_data(fibh.sbh); inode->i_nlink ++; inode->i_ctime = CURRENT_TIME; - UDF_I_UCTIME(inode) = CURRENT_UTIME; mark_inode_dirty(inode); atomic_inc(&inode->i_count); d_instantiate(dentry, inode); @@ -1251,7 +1248,6 @@ static int udf_rename (struct inode * old_dir, struct dentry * old_dentry, * rename. */ old_inode->i_ctime = CURRENT_TIME; - UDF_I_UCTIME(old_inode) = CURRENT_UTIME; mark_inode_dirty(old_inode); /* @@ -1270,11 +1266,9 @@ static int udf_rename (struct inode * old_dir, struct dentry * old_dentry, { new_inode->i_nlink--; new_inode->i_ctime = CURRENT_TIME; - UDF_I_UCTIME(new_inode) = CURRENT_UTIME; mark_inode_dirty(new_inode); } old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME; - UDF_I_UCTIME(old_dir) = UDF_I_UMTIME(old_dir) = CURRENT_UTIME; mark_inode_dirty(old_dir); if (dir_fi) diff --git a/fs/udf/super.c b/fs/udf/super.c index 5188e5f0fcf4..a602beb96b53 100644 --- a/fs/udf/super.c +++ b/fs/udf/super.c @@ -800,7 +800,8 @@ udf_load_pvoldesc(struct super_block *sb, struct buffer_head *bh) udf_debug("recording time %ld/%ld, %04u/%02u/%02u %02u:%02u (%x)\n", recording, recording_usec, ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.typeAndTimezone); - UDF_SB_RECORDTIME(sb) = recording; + UDF_SB_RECORDTIME(sb).tv_sec = recording; + UDF_SB_RECORDTIME(sb).tv_nsec = recording_usec * 1000; } if ( !udf_build_ustr(&instr, pvoldesc->volIdent, 32) ) @@ -1339,7 +1340,7 @@ static void udf_open_lvid(struct super_block *sb) UDF_SB_LVIDIU(sb)->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX; UDF_SB_LVIDIU(sb)->impIdent.identSuffix[1] = UDF_OS_ID_LINUX; - if (udf_time_to_stamp(&cpu_time, get_seconds(), CURRENT_UTIME)) + if (udf_time_to_stamp(&cpu_time, CURRENT_TIME)) UDF_SB_LVID(sb)->recordingDateAndTime = cpu_to_lets(cpu_time); UDF_SB_LVID(sb)->integrityType = LVID_INTEGRITY_TYPE_OPEN; @@ -1367,7 +1368,7 @@ static void udf_close_lvid(struct super_block *sb) UDF_SB_LVIDIU(sb)->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX; UDF_SB_LVIDIU(sb)->impIdent.identSuffix[1] = UDF_OS_ID_LINUX; - if (udf_time_to_stamp(&cpu_time, get_seconds(), CURRENT_UTIME)) + if (udf_time_to_stamp(&cpu_time, CURRENT_TIME)) UDF_SB_LVID(sb)->recordingDateAndTime = cpu_to_lets(cpu_time); if (UDF_MAX_WRITE_VERSION > le16_to_cpu(UDF_SB_LVIDIU(sb)->maxUDFWriteRev)) UDF_SB_LVIDIU(sb)->maxUDFWriteRev = cpu_to_le16(UDF_MAX_WRITE_VERSION); @@ -1536,7 +1537,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent) if (!silent) { timestamp ts; - udf_time_to_stamp(&ts, UDF_SB_RECORDTIME(sb), 0); + udf_time_to_stamp(&ts, UDF_SB_RECORDTIME(sb)); udf_info("UDF %s (%s) Mounting volume '%s', timestamp %04u/%02u/%02u %02u:%02u (%x)\n", UDFFS_VERSION, UDFFS_DATE, UDF_SB_VOLIDENT(sb), ts.year, ts.month, ts.day, ts.hour, ts.minute, diff --git a/fs/udf/udf_i.h b/fs/udf/udf_i.h index 5d87e85e6062..d7dbe6f3ba0c 100644 --- a/fs/udf/udf_i.h +++ b/fs/udf/udf_i.h @@ -18,10 +18,7 @@ static inline struct udf_inode_info *UDF_I(struct inode *inode) #define UDF_I_STRAT4096(X) ( UDF_I(X)->i_strat4096 ) #define UDF_I_NEXT_ALLOC_BLOCK(X) ( UDF_I(X)->i_next_alloc_block ) #define UDF_I_NEXT_ALLOC_GOAL(X) ( UDF_I(X)->i_next_alloc_goal ) -#define UDF_I_UMTIME(X) ( UDF_I(X)->i_umtime ) -#define UDF_I_UCTIME(X) ( UDF_I(X)->i_uctime ) #define UDF_I_CRTIME(X) ( UDF_I(X)->i_crtime ) -#define UDF_I_UCRTIME(X) ( UDF_I(X)->i_ucrtime ) #define UDF_I_SAD(X) ( UDF_I(X)->i_ext.i_sad ) #define UDF_I_LAD(X) ( UDF_I(X)->i_ext.i_lad ) #define UDF_I_DATA(X) ( UDF_I(X)->i_ext.i_data ) diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index a41c46ad9726..8f8db132fdfc 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -28,8 +28,6 @@ #define UDF_NAME_LEN 255 #define UDF_PATH_LEN 1023 -#define CURRENT_UTIME (xtime.tv_nsec / 1000) - #define udf_file_entry_alloc_offset(inode)\ (UDF_I_USE(inode) ?\ sizeof(struct unallocSpaceEntry) :\ @@ -185,6 +183,6 @@ extern uint16_t udf_crc(uint8_t *, uint32_t, uint16_t); /* udftime.c */ extern time_t *udf_stamp_to_time(time_t *, long *, timestamp); -extern timestamp *udf_time_to_stamp(timestamp *, time_t, long); +extern timestamp *udf_time_to_stamp(timestamp *, struct timespec); #endif /* __UDF_DECL_H */ diff --git a/fs/udf/udftime.c b/fs/udf/udftime.c index decaede92657..3722d7d38e4b 100644 --- a/fs/udf/udftime.c +++ b/fs/udf/udftime.c @@ -121,7 +121,7 @@ udf_stamp_to_time(time_t *dest, long *dest_usec, timestamp src) timestamp * -udf_time_to_stamp(timestamp *dest, time_t tv_sec, long tv_usec) +udf_time_to_stamp(timestamp *dest, struct timespec ts) { long int days, rem, y; const unsigned short int *ip; @@ -134,9 +134,9 @@ udf_time_to_stamp(timestamp *dest, time_t tv_sec, long tv_usec) dest->typeAndTimezone = 0x1000 | (offset & 0x0FFF); - tv_sec += offset * 60; - days = tv_sec / SECS_PER_DAY; - rem = tv_sec % SECS_PER_DAY; + ts.tv_sec += offset * 60; + days = ts.tv_sec / SECS_PER_DAY; + rem = ts.tv_sec % SECS_PER_DAY; dest->hour = rem / SECS_PER_HOUR; rem %= SECS_PER_HOUR; dest->minute = rem / 60; @@ -164,9 +164,9 @@ udf_time_to_stamp(timestamp *dest, time_t tv_sec, long tv_usec) dest->month = y + 1; dest->day = days + 1; - dest->centiseconds = tv_usec / 10000; - dest->hundredsOfMicroseconds = (tv_usec - dest->centiseconds * 10000) / 100; - dest->microseconds = (tv_usec - dest->centiseconds * 10000 - + dest->centiseconds = ts.tv_nsec / 10000000; + dest->hundredsOfMicroseconds = (ts.tv_nsec / 1000 - dest->centiseconds * 10000) / 100; + dest->microseconds = (ts.tv_nsec / 1000 - dest->centiseconds * 10000 - dest->hundredsOfMicroseconds * 100); return dest; } diff --git a/include/linux/udf_fs_i.h b/include/linux/udf_fs_i.h index f297d528aded..186a5a47b50b 100644 --- a/include/linux/udf_fs_i.h +++ b/include/linux/udf_fs_i.h @@ -43,10 +43,7 @@ typedef struct struct udf_inode_info { - long i_umtime; - long i_uctime; - long i_crtime; - long i_ucrtime; + struct timespec i_crtime; /* Physical address of inode */ lb_addr i_location; __u64 i_unique; diff --git a/include/linux/udf_fs_sb.h b/include/linux/udf_fs_sb.h index e898136bf947..b73cebba5551 100644 --- a/include/linux/udf_fs_sb.h +++ b/include/linux/udf_fs_sb.h @@ -97,7 +97,7 @@ struct udf_sb_info uid_t s_uid; /* Root Info */ - time_t s_recordtime; + struct timespec s_recordtime; /* Fileset Info */ __u16 s_serialnum; |
