|
@@ -941,6 +941,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
|
|
@@ -960,10 +968,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;
|
|
@@ -977,6 +986,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;
|
|
|
}
|
|
|
|
|
@@ -1077,8 +1089,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;
|