[Devel] [PATCH vz8] vdso, vclock_gettime: fix linking with old linkers
On some old linkers vdso fails to build because of dynamic reloction of 've_start_time' symbol: VDSO2C arch/x86/entry/vdso/vdso-image-64.c Error: vdso image contains dynamic relocations I was able to figure out why new linkers doesn't generate relocation while old ones does, but I did find out that visibility("hidden") attribute on 've_start_time' cures the problem. https://jira.sw.ru/browse/PSBM-121668 Signed-off-by: Andrey Ryabinin --- arch/x86/entry/vdso/vclock_gettime.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/entry/vdso/vclock_gettime.c b/arch/x86/entry/vdso/vclock_gettime.c index 224dbe80da66..b2f1f19319d8 100644 --- a/arch/x86/entry/vdso/vclock_gettime.c +++ b/arch/x86/entry/vdso/vclock_gettime.c @@ -24,7 +24,7 @@ #define gtod (&VVAR(vsyscall_gtod_data)) -u64 ve_start_time; +u64 ve_start_time __attribute__((visibility("hidden"))); extern int __vdso_clock_gettime(clockid_t clock, struct timespec *ts); extern int __vdso_gettimeofday(struct timeval *tv, struct timezone *tz); -- 2.26.2 ___ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel
[Devel] [PATCH RH7 v2 1/2] ploop: Add statistics of fastmap requests, which fails because of cache
Normally, mapping_needs_writeback() should not be true. But in case of some problem, or userspace touch root.hds without direct mode, cache may populate. Count such the failed fastmaps. Signed-off-by: Kirill Tkhai --- drivers/block/ploop/io_kaio.c|2 ++ fs/ext4/file.c |5 - include/linux/ploop/ploop_stat.h |1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/block/ploop/io_kaio.c b/drivers/block/ploop/io_kaio.c index 4c4a0c6a908c..be74b2ec344f 100644 --- a/drivers/block/ploop/io_kaio.c +++ b/drivers/block/ploop/io_kaio.c @@ -1236,6 +1236,8 @@ kaio_fastmap(struct ploop_io *io, struct bio *orig_bio, orig_bio->bi_rw & REQ_WRITE); if (ret < 0) { io->plo->st.fast_neg_noem++; + if (ret == -EBUSY) + io->plo->st.write_back_pending++; return 1; } diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 8f5fb6d99d5e..67a385e9f716 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -132,6 +132,7 @@ static int ext4_fastmap(struct inode *inode, sector_t lblk_sec, bool unaligned_aio, found, locked = false; struct ext4_map_blocks map; loff_t pos = lblk_sec << 9; + int err; if (!S_ISREG(inode->i_mode)) return -ENOENT; @@ -152,6 +153,7 @@ static int ext4_fastmap(struct inode *inode, sector_t lblk_sec, locked = true; } + err = -EBUSY; if (unlikely(mapping_needs_writeback(mapping))) goto err_maybe_unlock; @@ -163,6 +165,7 @@ static int ext4_fastmap(struct inode *inode, sector_t lblk_sec, locked = false; } + err = -ENOENT; if (unlikely(ext4_test_inode_state(inode, EXT4_STATE_DIOREAD_LOCK))) { goto err_dio_end; @@ -181,7 +184,7 @@ static int ext4_fastmap(struct inode *inode, sector_t lblk_sec, err_maybe_unlock: if (locked) mutex_unlock(&inode->i_mutex); - return -ENOENT; + return err; } static ssize_t ext4_write_checks(struct kiocb *iocb, struct iov_iter *iter, loff_t *pos) diff --git a/include/linux/ploop/ploop_stat.h b/include/linux/ploop/ploop_stat.h index bed910acb39c..92543a9afe88 100644 --- a/include/linux/ploop/ploop_stat.h +++ b/include/linux/ploop/ploop_stat.h @@ -34,6 +34,7 @@ __DO(merge_neg_cluster) __DO(merge_neg_disable) __DO(fast_neg_nomap) __DO(fast_neg_noem) +__DO(write_back_pending) __DO(fast_neg_shortem) __DO(fast_neg_backing) __DO(bio_lockouts) ___ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel
[Devel] [PATCH RH7 v2 2/2] ploop: Invalidate pagecache on service operations
This allows fastmap to work, otherwise it fails on mapping_needs_writeback() check. Signed-off-by: Kirill Tkhai --- drivers/block/ploop/io_kaio.c | 22 ++ 1 file changed, 22 insertions(+) diff --git a/drivers/block/ploop/io_kaio.c b/drivers/block/ploop/io_kaio.c index be74b2ec344f..112fd92acb40 100644 --- a/drivers/block/ploop/io_kaio.c +++ b/drivers/block/ploop/io_kaio.c @@ -937,6 +937,15 @@ static int kaio_alloc_sync(struct ploop_io * io, loff_t pos, loff_t len) return err; } +static int kaio_invalidate_cache(struct ploop_io *io) +{ + struct inode *inode = io->files.inode; + + if (!inode->i_op->fastmap) + return 0; + + return invalidate_inode_pages2(io->files.mapping); +} static int kaio_open(struct ploop_io * io) { @@ -952,6 +961,7 @@ static int kaio_open(struct ploop_io * io) io->files.bdev = io->files.inode->i_sb->s_bdev; mutex_lock(&io->files.inode->i_mutex); + kaio_invalidate_cache(io); err = ploop_kaio_open(file, delta->flags & PLOOP_FMT_RDONLY); mutex_unlock(&io->files.inode->i_mutex); @@ -1004,6 +1014,10 @@ static int kaio_prepare_snapshot(struct ploop_io * io, struct ploop_snapdata *sd return err; } + mutex_lock(&io->files.inode->i_mutex); + kaio_invalidate_cache(io); + mutex_unlock(&io->files.inode->i_mutex); + sd->file = file; return 0; } @@ -1024,6 +1038,10 @@ static int kaio_complete_snapshot(struct ploop_io * io, struct ploop_snapdata *s ploop_kaio_downgrade(io->files.mapping); + mutex_lock(&io->files.inode->i_mutex); + kaio_invalidate_cache(io); + mutex_unlock(&io->files.inode->i_mutex); + if (io->fsync_thread) { kthread_stop(io->fsync_thread); io->fsync_thread = NULL; @@ -1057,6 +1075,10 @@ static int kaio_prepare_merge(struct ploop_io * io, struct ploop_snapdata *sd) if (err) goto prep_merge_done; + mutex_lock(&io->files.inode->i_mutex); + kaio_invalidate_cache(io); + mutex_unlock(&io->files.inode->i_mutex); + err = ploop_kaio_upgrade(io->files.mapping); if (err) goto prep_merge_done; ___ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel