On Fri, Dec 20, 2019 at 7:28 AM Namjae Jeon <namjae.jeon@xxxxxxxxxxx> wrote: > +static int exfat_fill_super(struct super_block *sb, struct fs_context *fc) > +{ > + struct exfat_sb_info *sbi = sb->s_fs_info; > + struct exfat_mount_options *opts = &sbi->options; > + struct inode *root_inode; > + int err; > + > + if (opts->allow_utime == (unsigned short)-1) > + opts->allow_utime = ~opts->fs_dmask & 0022; > + > + if (opts->utf8 && strcmp(opts->iocharset, exfat_iocharset_with_utf8)) { > + exfat_msg(sb, KERN_WARNING, > + "utf8 enabled, \"iocharset=%s\" is recommended", > + exfat_iocharset_with_utf8); > + } > + > + if (opts->discard) { > + struct request_queue *q = bdev_get_queue(sb->s_bdev); > + > + if (!blk_queue_discard(q)) > + exfat_msg(sb, KERN_WARNING, > + "mounting with \"discard\" option, but the device does not support discard"); > + opts->discard = 0; > + } > + > + sb->s_flags |= SB_NODIRATIME; > + sb->s_magic = EXFAT_SUPER_MAGIC; > + sb->s_op = &exfat_sops; I don't see you set up s_time_gran, s_time_min and s_time_max anywhere. Please fill those to get the correct behavior. That also lets you drop the manual truncation of the values. Arnd