Merge tag 'tty-3.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / tty / tty_io.c
index cbf5a50..97ebc8c 100644 (file)
@@ -988,6 +988,14 @@ void start_tty(struct tty_struct *tty)
 
 EXPORT_SYMBOL(start_tty);
 
+static void tty_update_time(struct timespec *time)
+{
+       unsigned long sec = get_seconds();
+       sec -= sec % 60;
+       if ((long)(sec - time->tv_sec) > 0)
+               time->tv_sec = sec;
+}
+
 /**
  *     tty_read        -       read method for tty device files
  *     @file: pointer to tty file
@@ -1007,10 +1015,11 @@ static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
                        loff_t *ppos)
 {
        int i;
+       struct inode *inode = file_inode(file);
        struct tty_struct *tty = file_tty(file);
        struct tty_ldisc *ld;
 
-       if (tty_paranoia_check(tty, file_inode(file), "tty_read"))
+       if (tty_paranoia_check(tty, inode, "tty_read"))
                return -EIO;
        if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
                return -EIO;
@@ -1024,6 +1033,9 @@ static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
                i = -EIO;
        tty_ldisc_deref(ld);
 
+       if (i > 0)
+               tty_update_time(&inode->i_atime);
+
        return i;
 }
 
@@ -1124,8 +1136,10 @@ static inline ssize_t do_tty_write(
                        break;
                cond_resched();
        }
-       if (written)
+       if (written) {
+               tty_update_time(&file_inode(file)->i_mtime);
                ret = written;
+       }
 out:
        tty_write_unlock(tty);
        return ret;