Re: [PATCH v2 3/3] staging: exfat: add millisecond support
On Sun, Sep 08, 2019 at 05:40:40PM +0100, Greg Kroah-Hartman wrote: > On Sun, Sep 08, 2019 at 04:10:15PM +, Valentin Vidic wrote: > > void fat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, > > u8 mode) > > { > > + u8 ms; > > u16 t, d; > > struct dos_dentry_t *ep = (struct dos_dentry_t *)p_entry; > > > > t = (tp->hour << 11) | (tp->min << 5) | (tp->sec >> 1); > > d = (tp->year << 9) | (tp->mon << 5) | tp->day; > > > > + ms = tp->millisec; > > + if (tp->sec & 1) { > > + ms += 1000; > > + } > > checkpatch didn't complain about this { } not being needed? > > Same in other parts of this patch, please fix up. No warnings from checkpatch here, will update the code. -- Valentin ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH v2 3/3] staging: exfat: add millisecond support
On Sun, Sep 08, 2019 at 04:10:15PM +, Valentin Vidic wrote: > Use create_time_ms modify_time_ms fields to store the millisecond > part of the file timestamp with the precision of 10 ms. > > Signed-off-by: Valentin Vidic > --- > drivers/staging/exfat/exfat_core.c | 30 ++ > 1 file changed, 30 insertions(+) > > diff --git a/drivers/staging/exfat/exfat_core.c > b/drivers/staging/exfat/exfat_core.c > index 8476eeedba83..e87119fa8c0a 100644 > --- a/drivers/staging/exfat/exfat_core.c > +++ b/drivers/staging/exfat/exfat_core.c > @@ -1139,6 +1139,7 @@ void exfat_set_entry_size(struct dentry_t *p_entry, u64 > size) > void fat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, > u8 mode) > { > + u8 ms = 0; > u16 t = 0x00, d = 0x21; > struct dos_dentry_t *ep = (struct dos_dentry_t *)p_entry; > > @@ -1146,6 +1147,7 @@ void fat_get_entry_time(struct dentry_t *p_entry, > struct timestamp_t *tp, > case TM_CREATE: > t = GET16_A(ep->create_time); > d = GET16_A(ep->create_date); > + ms = ep->create_time_ms * 10; > break; > case TM_MODIFY: > t = GET16_A(ep->modify_time); > @@ -1159,11 +1161,17 @@ void fat_get_entry_time(struct dentry_t *p_entry, > struct timestamp_t *tp, > tp->day = (d & 0x001F); > tp->mon = (d >> 5) & 0x000F; > tp->year = (d >> 9); > + > + if (ms >= 1000) { > + ms -= 1000; > + tp->sec++; > + } > } > > void exfat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, > u8 mode) > { > + u8 ms = 0; > u16 t = 0x00, d = 0x21; > struct file_dentry_t *ep = (struct file_dentry_t *)p_entry; > > @@ -1171,10 +1179,12 @@ void exfat_get_entry_time(struct dentry_t *p_entry, > struct timestamp_t *tp, > case TM_CREATE: > t = GET16_A(ep->create_time); > d = GET16_A(ep->create_date); > + ms = ep->create_time_ms * 10; > break; > case TM_MODIFY: > t = GET16_A(ep->modify_time); > d = GET16_A(ep->modify_date); > + ms = ep->modify_time_ms * 10; > break; > case TM_ACCESS: > t = GET16_A(ep->access_time); > @@ -1188,21 +1198,33 @@ void exfat_get_entry_time(struct dentry_t *p_entry, > struct timestamp_t *tp, > tp->day = (d & 0x001F); > tp->mon = (d >> 5) & 0x000F; > tp->year = (d >> 9); > + > + if (ms >= 1000) { > + ms -= 1000; > + tp->sec++; > + } > } > > void fat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, > u8 mode) > { > + u8 ms; > u16 t, d; > struct dos_dentry_t *ep = (struct dos_dentry_t *)p_entry; > > t = (tp->hour << 11) | (tp->min << 5) | (tp->sec >> 1); > d = (tp->year << 9) | (tp->mon << 5) | tp->day; > > + ms = tp->millisec; > + if (tp->sec & 1) { > + ms += 1000; > + } checkpatch didn't complain about this { } not being needed? Same in other parts of this patch, please fix up. thanks, greg k-h ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v2 3/3] staging: exfat: add millisecond support
Use create_time_ms modify_time_ms fields to store the millisecond part of the file timestamp with the precision of 10 ms. Signed-off-by: Valentin Vidic --- drivers/staging/exfat/exfat_core.c | 30 ++ 1 file changed, 30 insertions(+) diff --git a/drivers/staging/exfat/exfat_core.c b/drivers/staging/exfat/exfat_core.c index 8476eeedba83..e87119fa8c0a 100644 --- a/drivers/staging/exfat/exfat_core.c +++ b/drivers/staging/exfat/exfat_core.c @@ -1139,6 +1139,7 @@ void exfat_set_entry_size(struct dentry_t *p_entry, u64 size) void fat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, u8 mode) { + u8 ms = 0; u16 t = 0x00, d = 0x21; struct dos_dentry_t *ep = (struct dos_dentry_t *)p_entry; @@ -1146,6 +1147,7 @@ void fat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, case TM_CREATE: t = GET16_A(ep->create_time); d = GET16_A(ep->create_date); + ms = ep->create_time_ms * 10; break; case TM_MODIFY: t = GET16_A(ep->modify_time); @@ -1159,11 +1161,17 @@ void fat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, tp->day = (d & 0x001F); tp->mon = (d >> 5) & 0x000F; tp->year = (d >> 9); + + if (ms >= 1000) { + ms -= 1000; + tp->sec++; + } } void exfat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, u8 mode) { + u8 ms = 0; u16 t = 0x00, d = 0x21; struct file_dentry_t *ep = (struct file_dentry_t *)p_entry; @@ -1171,10 +1179,12 @@ void exfat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, case TM_CREATE: t = GET16_A(ep->create_time); d = GET16_A(ep->create_date); + ms = ep->create_time_ms * 10; break; case TM_MODIFY: t = GET16_A(ep->modify_time); d = GET16_A(ep->modify_date); + ms = ep->modify_time_ms * 10; break; case TM_ACCESS: t = GET16_A(ep->access_time); @@ -1188,21 +1198,33 @@ void exfat_get_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, tp->day = (d & 0x001F); tp->mon = (d >> 5) & 0x000F; tp->year = (d >> 9); + + if (ms >= 1000) { + ms -= 1000; + tp->sec++; + } } void fat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, u8 mode) { + u8 ms; u16 t, d; struct dos_dentry_t *ep = (struct dos_dentry_t *)p_entry; t = (tp->hour << 11) | (tp->min << 5) | (tp->sec >> 1); d = (tp->year << 9) | (tp->mon << 5) | tp->day; + ms = tp->millisec; + if (tp->sec & 1) { + ms += 1000; + } + switch (mode) { case TM_CREATE: SET16_A(ep->create_time, t); SET16_A(ep->create_date, d); + ep->create_time_ms = ms / 10; break; case TM_MODIFY: SET16_A(ep->modify_time, t); @@ -1214,20 +1236,28 @@ void fat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, void exfat_set_entry_time(struct dentry_t *p_entry, struct timestamp_t *tp, u8 mode) { + u8 ms; u16 t, d; struct file_dentry_t *ep = (struct file_dentry_t *)p_entry; t = (tp->hour << 11) | (tp->min << 5) | (tp->sec >> 1); d = (tp->year << 9) | (tp->mon << 5) | tp->day; + ms = tp->millisec; + if (tp->sec & 1) { + ms += 1000; + } + switch (mode) { case TM_CREATE: SET16_A(ep->create_time, t); SET16_A(ep->create_date, d); + ep->create_time_ms = ms / 10; break; case TM_MODIFY: SET16_A(ep->modify_time, t); SET16_A(ep->modify_date, d); + ep->modify_time_ms = ms / 10; break; case TM_ACCESS: SET16_A(ep->access_time, t); -- 2.20.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel