All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zdenek Kabelac <zkabelac@redhat.com>
To: lvm-devel@redhat.com
Subject: [PATCH 1/6] Pool locking code
Date: Wed, 23 Mar 2011 15:54:04 +0100	[thread overview]
Message-ID: <4D8A098C.8060803@redhat.com> (raw)
In-Reply-To: <1300888988.14527.28.camel@ubuntu>

Dne 23.3.2011 15:03, Joe Thornber napsal(a):
> On Tue, 2011-03-22 at 22:21 +0100, Zdenek Kabelac wrote:
>> Adding specific functions to lock and unlock pool, to modify
>> specific uint64_t*, and to revert all modified uint64_t back.
> 
>> +/* prevent modification of pool */
>> +int dm_pool_locked(struct dm_pool *p);
>> +int dm_pool_lock(struct dm_pool *p, unsigned count)
>> +	__attribute__((__warn_unused_result__));
>> +int dm_pool_unlock(struct dm_pool *p)
>> +	__attribute__((__warn_unused_result__));
>> +int dm_pool_set_uint64(struct dm_pool *p, uint64_t *addr, uint64_t new_value)
>> +	__attribute__((__warn_unused_result__));
>> +int dm_pool_restore(struct dm_pool *p, int check_crc)
>> +	__attribute__((__warn_unused_result__));
>> +
> 
> Hi Kabi,
> 
> I like what you're trying to do here.  But I don't really like the above
> interface, particularly the dm_pool_set_uint64() method which is going
> to be ugly to use.
> 
> Ideally I guess I'd prefer something like:
> 
>         struct dm_pool_snapshot;
>         
>         struct dm_pool_snapshot *dm_pool_take_snapshot(struct dm_pool *p);
>         void dm_pool_destroy_snapshot(struct dm_pool_snapshot *snap);
>         int dm_pool_compare(struct dm_pool *p, struct dm_pool_snapshot *snap);
>         int dm_pool_restore_snapshot(struct dm_pool *p, struct dm_pool_snapshot *snap, int release_subsequently_allocated_data);
>         
> You'd use the compare function within assertions to check nobody has
> changed a pool unexpectedly.  There's no concept of a locked pool, you
> don't have to change the existing pool code to check if you're locked.
> Also you don't need a special interface for changing data within a
> locked pool.
> 
> The simple way of implementing the above is to just make a copy of the
> pool data within the snapshot.  Which of course is a very slow op.  So
> could you give me an idea of the size of a typical pool when you are
> locking it?  How frequently do you lock?
> 

Forget to answer the size question -  >8MB is allocated by the VG mempool when
set of simple linear 7200LVs on 1 PV are in use.

Also that's why I mention in my patchset that doing even quick crc hash
checksum is quite slow - I except full memcpy would be even slower - and I do
that only with finally pool unlock).

Zdenek



  parent reply	other threads:[~2011-03-23 14:54 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-22 21:21 [PATCH 0/6] VG share v2 Zdenek Kabelac
2011-03-22 21:21 ` [PATCH 1/6] Pool locking code Zdenek Kabelac
2011-03-23 14:03   ` Joe Thornber
2011-03-23 14:43     ` Zdenek Kabelac
2011-03-23 14:53       ` Joe Thornber
2011-03-23 14:54     ` Zdenek Kabelac [this message]
2011-03-23 15:13       ` Joe Thornber
2011-03-23 15:57         ` Zdenek Kabelac
2011-03-23 16:33           ` Zdenek Kabelac
2011-03-23 17:29             ` Zdenek Kabelac
2011-03-23 18:41           ` Joe Thornber
2011-03-23 19:01             ` Zdenek Kabelac
2011-03-24 12:21               ` Joe Thornber
2011-03-24 12:45                 ` Zdenek Kabelac
2011-03-24 13:50                   ` Zdenek Kabelac
2011-03-22 21:21 ` [PATCH 2/6] Code move vg_mark_partial up in stack Zdenek Kabelac
2011-03-22 21:21 ` [PATCH 3/6] Share VG multiple times Zdenek Kabelac
2011-03-22 21:21 ` [PATCH 4/6] Use dm_pool_set_uint64 Zdenek Kabelac
2011-03-22 21:21 ` [PATCH 5/6] lv_postorder using dm_pool_set_uint64 Zdenek Kabelac
2011-03-22 21:22 ` [PATCH 6/6] lv_postorder unlock and lock Zdenek Kabelac

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=4D8A098C.8060803@redhat.com \
    --to=zkabelac@redhat.com \
    --cc=lvm-devel@redhat.com \
    /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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.