public inbox for lvm2-cvs@sourceware.org help / color / mirror / Atom feed
From: mornfall@sourceware.org To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org Subject: LVM2 ./WHATS_NEW doc/example.conf lib/config/d ... Date: Wed, 02 Sep 2009 14:47:00 -0000 [thread overview] Message-ID: <20090902144741.24550.qmail@sourceware.org> (raw) CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-09-02 14:47:40 Modified files: . : WHATS_NEW doc : example.conf lib/config : defaults.h lib/locking : file_locking.c Log message: Implement write lock prioritisation for file locking and make it default. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1251&r2=1.1252 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/doc/example.conf.diff?cvsroot=lvm2&r1=1.45&r2=1.46 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/config/defaults.h.diff?cvsroot=lvm2&r1=1.50&r2=1.51 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/locking/file_locking.c.diff?cvsroot=lvm2&r1=1.42&r2=1.43 --- LVM2/WHATS_NEW 2009/09/02 11:49:03 1.1251 +++ LVM2/WHATS_NEW 2009/09/02 14:47:39 1.1252 @@ -1,5 +1,6 @@ Version 2.02.52 - ================================= + Implement write lock prioritisation for file locking and make it default. Fix clogd build direcory. Drop unrequired clogd Makefile. Fix clvmd autodetection check and cleanup related configure messages. --- LVM2/doc/example.conf 2009/08/04 15:36:14 1.45 +++ LVM2/doc/example.conf 2009/09/02 14:47:40 1.46 @@ -288,6 +288,13 @@ # in progress. A directory like /tmp that may get wiped on reboot is OK. locking_dir = "/var/lock/lvm" + # Whenever a read-only and read-write access compete on a single volume + # group, ensure that the write lock gets priority over the read lock. + # Without this setting, write access may be stalled by high volume of + # read-only traffic on LVM metadata. NB. This option only affects + # locking_type = 1, i.e. local file-based locking. + prioritise_write_locks = 1 + # Other entries can go here to allow you to load shared libraries # e.g. if support for LVM1 metadata was compiled as a shared library use # format_libraries = "liblvm2format1.so" --- LVM2/lib/config/defaults.h 2009/08/04 15:36:14 1.50 +++ LVM2/lib/config/defaults.h 2009/09/02 14:47:40 1.51 @@ -42,6 +42,7 @@ #define DEFAULT_FALLBACK_TO_LOCAL_LOCKING 1 #define DEFAULT_FALLBACK_TO_CLUSTERED_LOCKING 1 #define DEFAULT_WAIT_FOR_LOCKS 1 +#define DEFAULT_PRIORITISE_WRITE_LOCKS 1 #define DEFAULT_MIRRORLOG "disk" #define DEFAULT_MIRROR_LOG_FAULT_POLICY "allocate" --- LVM2/lib/locking/file_locking.c 2009/08/13 13:23:52 1.42 +++ LVM2/lib/locking/file_locking.c 2009/09/02 14:47:40 1.43 @@ -38,6 +38,7 @@ static struct dm_list _lock_list; static char _lock_dir[NAME_LEN]; +static int _prioritise_write_locks; static sig_t _oldhandler; static sigset_t _fullsigset, _intsigset; @@ -47,6 +48,7 @@ { struct stat buf1, buf2; + log_debug("_undo_flock %s", file); if (!flock(fd, LOCK_NB | LOCK_EX) && !stat(file, &buf1) && !fstat(fd, &buf2) && @@ -135,6 +137,8 @@ int old_errno; struct stat buf1, buf2; + log_debug("_do_flock %s %c%c", + file, operation == LOCK_EX ? 'W' : 'R', nonblock ? ' ' : 'B'); do { if ((*fd > -1) && close(*fd)) log_sys_error("close", file); @@ -169,6 +173,29 @@ return_0; } +#define AUX_LOCK_SUFFIX ":aux" + +static int _do_write_priority_flock(const char *file, int *fd, int operation, uint32_t nonblock) +{ + int r, fd_aux = -1; + char *file_aux = alloca(strlen(file) + sizeof(AUX_LOCK_SUFFIX)); + + strcpy(file_aux, file); + strcat(file_aux, AUX_LOCK_SUFFIX); + + if ((r = _do_flock(file_aux, &fd_aux, LOCK_EX, 0))) { + if (operation == LOCK_EX) { + r = _do_flock(file, fd, operation, nonblock); + _undo_flock(file_aux, fd_aux); + } else { + _undo_flock(file_aux, fd_aux); + r = _do_flock(file, fd, operation, nonblock); + } + } + + return r; +} + static int _lock_file(const char *file, uint32_t flags) { int operation; @@ -207,7 +234,11 @@ log_very_verbose("Locking %s %c%c", ll->res, state, nonblock ? ' ' : 'B'); - r = _do_flock(file, &ll->lf, operation, nonblock); + if (_prioritise_write_locks) + r = _do_write_priority_flock(file, &ll->lf, operation, nonblock); + else + r = _do_flock(file, &ll->lf, operation, nonblock); + if (r) dm_list_add(&_lock_list, &ll->list); else { @@ -299,6 +330,10 @@ DEFAULT_LOCK_DIR), sizeof(_lock_dir)); + _prioritise_write_locks = + find_config_tree_bool(cmd, "global/prioritise_write_locks", + DEFAULT_PRIORITISE_WRITE_LOCKS); + if (!dm_create_dir(_lock_dir)) return 0;
next reply other threads:[~2009-09-02 14:47 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2009-09-02 14:47 mornfall [this message] -- strict thread matches above, loose matches on Subject: below -- 2010-01-06 13:27 mbroz 2009-10-05 12:44 agk 2009-08-01 17:08 snitzer 2009-08-01 17:07 snitzer 2009-07-24 23:29 agk 2006-09-02 1:18 agk 2006-08-31 20:56 agk
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=20090902144741.24550.qmail@sourceware.org \ --to=mornfall@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).