public inbox for lvm2-cvs@sourceware.org help / color / mirror / Atom feed
From: zkabelac@sourceware.org To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org Subject: LVM2 ./WHATS_NEW lib/cache/lvmcache.c lib/meta ... Date: Thu, 11 Aug 2011 17:34:00 -0000 [thread overview] Message-ID: <20110811173432.32560.qmail@sourceware.org> (raw) CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2011-08-11 17:34:31 Modified files: . : WHATS_NEW lib/cache : lvmcache.c lib/metadata : metadata.c Log message: Lock memory for shared VG Use debug pool locking functionality. So the command could check, whether the memory in the pool has not been modified. For lv_postoder() instead of unlocking and locking for every changed struct status member do it once when entering and leaving function. (mprotect would trap each such memory access). Currently lv_postoder() does not modify other part of vg structure then status flags of each LV with flags that are reverted back to its original state after function exit. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.2065&r2=1.2066 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/cache/lvmcache.c.diff?cvsroot=lvm2&r1=1.114&r2=1.115 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.464&r2=1.465 --- LVM2/WHATS_NEW 2011/08/11 17:24:23 1.2065 +++ LVM2/WHATS_NEW 2011/08/11 17:34:30 1.2066 @@ -1,5 +1,6 @@ Version 2.02.87 - =============================== + Use memory pool locking to check for corruption of internal VG structs. Cache and share generated VG structs. Fix possible format instance memory leaks and premature releases in _vg_read. Suppress locking error messages in monitoring init scripts. --- LVM2/lib/cache/lvmcache.c 2011/08/11 17:24:24 1.114 +++ LVM2/lib/cache/lvmcache.c 2011/08/11 17:34:30 1.115 @@ -689,6 +689,9 @@ vginfo->vg_use_count = 0; vg->vginfo = vginfo; + if (!dm_pool_lock(vg->vgmem, 1)) + goto_bad; + out: vginfo->holders++; vginfo->vg_use_count++; @@ -715,6 +718,11 @@ log_debug("VG %s reused %d times.", vginfo->cached_vg->name, vginfo->vg_use_count); + /* Debug perform crc check only when it's been used more then once */ + if (!dm_pool_unlock(vginfo->cached_vg->vgmem, + (vginfo->vg_use_count > 1))) + stack; + vginfo->cached_vg->vginfo = NULL; vginfo->cached_vg = NULL; --- LVM2/lib/metadata/metadata.c 2011/08/11 17:24:24 1.464 +++ LVM2/lib/metadata/metadata.c 2011/08/11 17:34:31 1.465 @@ -2107,8 +2107,17 @@ void *data) { int r; + int pool_locked = dm_pool_locked(lv->vg->vgmem); + + if (pool_locked && !dm_pool_unlock(lv->vg->vgmem, 0)) + return_0; + r = _lv_postorder_visit(lv, fn, data); _lv_postorder_cleanup(lv, 0); + + if (pool_locked && !dm_pool_lock(lv->vg->vgmem, 0)) + return_0; + return r; } @@ -2122,6 +2131,10 @@ { struct lv_list *lvl; int r = 1; + int pool_locked = dm_pool_locked(vg->vgmem); + + if (pool_locked && !dm_pool_unlock(vg->vgmem, 0)) + return_0; dm_list_iterate_items(lvl, &vg->lvs) if (!_lv_postorder_visit(lvl->lv, fn, data)) { @@ -2132,6 +2145,9 @@ dm_list_iterate_items(lvl, &vg->lvs) _lv_postorder_cleanup(lvl->lv, 0); + if (pool_locked && !dm_pool_lock(vg->vgmem, 0)) + return_0; + return r; }
reply other threads:[~2011-08-11 17:34 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20110811173432.32560.qmail@sourceware.org \ --to=zkabelac@sourceware.org \ --cc=lvm-devel@redhat.com \ --cc=lvm2-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).