diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index 969b458100fe..548f0e6aed54 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -273,6 +273,12 @@ static loff_t ovl_llseek(struct file *file, loff_t offset, int whence) ovl_inode_lock(inode); realfile->f_pos = file->f_pos; + /* Prevent WARNING in file_seek_cur_needs_f_lock() */ + if (whence == SEEK_CUR && offset) { + offset += file->f_pos; + whence = SEEK_SET; + } + old_cred = ovl_override_creds(inode->i_sb); ret = vfs_llseek(realfile, offset, whence); ovl_revert_creds(old_cred);