From: Pekka Enberg <penberg@gmail.com>
To: David Teigland <teigland@redhat.com>
Cc: akpm@osdl.org, linux-kernel@vger.kernel.org,
linux-cluster@redhat.com, Pekka Enberg <penberg@cs.helsinki.fi>
Subject: Re: [PATCH 00/14] GFS
Date: Wed, 3 Aug 2005 09:44:06 +0300 [thread overview]
Message-ID: <84144f0205080223445375c907@mail.gmail.com> (raw)
In-Reply-To: <20050802071828.GA11217@redhat.com>
Hi David,
Some more comments below.
Pekka
On 8/2/05, David Teigland <teigland@redhat.com> wrote:
> +/**
> + * inode_create - create a struct gfs2_inode
> + * @i_gl: The glock covering the inode
> + * @inum: The inode number
> + * @io_gl: the iopen glock to acquire/hold (using holder in new gfs2_inode)
> + * @io_state: the state the iopen glock should be acquired in
> + * @ipp: pointer to put the returned inode in
> + *
> + * Returns: errno
> + */
> +
> +static int inode_create(struct gfs2_glock *i_gl, struct gfs2_inum *inum,
> + struct gfs2_glock *io_gl, unsigned int io_state,
> + struct gfs2_inode **ipp)
> +{
> + struct gfs2_sbd *sdp = i_gl->gl_sbd;
> + struct gfs2_inode *ip;
> + int error = 0;
> +
> + RETRY_MALLOC(ip = kmem_cache_alloc(gfs2_inode_cachep, GFP_KERNEL), ip);
Why do you want to do this? The callers can handle ENOMEM just fine.
> +/**
> + * gfs2_random - Generate a random 32-bit number
> + *
> + * Generate a semi-crappy 32-bit pseudo-random number without using
> + * floating point.
> + *
> + * The PRNG is from "Numerical Recipes in C" (second edition), page 284.
> + *
> + * Returns: a 32-bit random number
> + */
> +
> +uint32_t gfs2_random(void)
> +{
> + gfs2_random_number = 0x0019660D * gfs2_random_number + 0x3C6EF35F;
> + return gfs2_random_number;
> +}
Please consider moving this into lib/random.c. This one already appears in
drivers/net/hamradio/dmascc.c.
> +/**
> + * gfs2_hash - hash an array of data
> + * @data: the data to be hashed
> + * @len: the length of data to be hashed
> + *
> + * Take some data and convert it to a 32-bit hash.
> + *
> + * This is the 32-bit FNV-1a hash from:
> + * http://www.isthe.com/chongo/tech/comp/fnv/
> + *
> + * Returns: the hash
> + */
> +
> +uint32_t gfs2_hash(const void *data, unsigned int len)
> +{
> + uint32_t h = 0x811C9DC5;
> + h = hash_more_internal(data, len, h);
> + return h;
> +}
Is there a reason why you cannot use <linux/hash.h> or <linux/jhash.h>?
> +void gfs2_sort(void *base, unsigned int num_elem, unsigned int size,
> + int (*compar) (const void *, const void *))
> +{
> + register char *pbase = (char *)base;
> + int i, j, k, h;
> + static int cols[16] = {1391376, 463792, 198768, 86961,
> + 33936, 13776, 4592, 1968,
> + 861, 336, 112, 48,
> + 21, 7, 3, 1};
> +
> + for (k = 0; k < 16; k++) {
> + h = cols[k];
> + for (i = h; i < num_elem; i++) {
> + j = i;
> + while (j >= h &&
> + (*compar)((void *)(pbase + size * (j - h)),
> + (void *)(pbase + size * j)) > 0) {
> + SWAP(pbase + size * j,
> + pbase + size * (j - h),
> + size);
> + j = j - h;
> + }
> + }
> + }
> +}
Please use sort() from lib/sort.c.
> +/**
> + * gfs2_io_error_inode_i - Flag an inode I/O error and withdraw
> + * @ip:
> + * @function:
> + * @file:
> + * @line:
Please drop empty kerneldoc tags. (Appears in various other places as well.)
> +#define RETRY_MALLOC(do_this, until_this) \
> +for (;;) { \
> + { do_this; } \
> + if (until_this) \
> + break; \
> + if (time_after_eq(jiffies, gfs2_malloc_warning + 5 * HZ)) { \
> + printk("GFS2: out of memory: %s, %u\n", __FILE__, __LINE__); \
> + gfs2_malloc_warning = jiffies; \
> + } \
> + yield(); \
> +}
Please drop this.
> +int gfs2_acl_create(struct gfs2_inode *dip, struct gfs2_inode *ip)
> +{
> + struct gfs2_sbd *sdp = dip->i_sbd;
> + struct posix_acl *acl = NULL;
> + struct gfs2_ea_request er;
> + mode_t mode = ip->i_di.di_mode;
> + int error;
> +
> + if (!sdp->sd_args.ar_posix_acl)
> + return 0;
> + if (S_ISLNK(ip->i_di.di_mode))
> + return 0;
> +
> + memset(&er, 0, sizeof(struct gfs2_ea_request));
> + er.er_type = GFS2_EATYPE_SYS;
> +
> + error = acl_get(dip, ACL_DEFAULT, &acl, NULL,
> + &er.er_data, &er.er_data_len);
> + if (error)
> + return error;
> + if (!acl) {
> + mode &= ~current->fs->umask;
> + if (mode != ip->i_di.di_mode)
> + error = munge_mode(ip, mode);
> + return error;
> + }
> +
> + {
> + struct posix_acl *clone = posix_acl_clone(acl, GFP_KERNEL);
> + error = -ENOMEM;
> + if (!clone)
> + goto out;
> + gfs2_memory_add(clone);
> + gfs2_memory_rm(acl);
> + posix_acl_release(acl);
> + acl = clone;
> + }
Please make this a real function. It is duplicated below.
> + if (error > 0) {
> + er.er_name = GFS2_POSIX_ACL_ACCESS;
> + er.er_name_len = GFS2_POSIX_ACL_ACCESS_LEN;
> + posix_acl_to_xattr(acl, er.er_data, er.er_data_len);
> + er.er_mode = mode;
> + er.er_flags = GFS2_ERF_MODE;
> + error = gfs2_system_eaops.eo_set(ip, &er);
> + if (error)
> + goto out;
> + } else
> + munge_mode(ip, mode);
> +
> + out:
> + gfs2_memory_rm(acl);
> + posix_acl_release(acl);
> + kfree(er.er_data);
> +
> + return error;
Whitespace damage.
> +int gfs2_acl_chmod(struct gfs2_inode *ip, struct iattr *attr)
> +{
> + struct posix_acl *acl = NULL;
> + struct gfs2_ea_location el;
> + char *data;
> + unsigned int len;
> + int error;
> +
> + error = acl_get(ip, ACL_ACCESS, &acl, &el, &data, &len);
> + if (error)
> + return error;
> + if (!acl)
> + return gfs2_setattr_simple(ip, attr);
> +
> + {
> + struct posix_acl *clone = posix_acl_clone(acl, GFP_KERNEL);
> + error = -ENOMEM;
> + if (!clone)
> + goto out;
> + gfs2_memory_add(clone);
> + gfs2_memory_rm(acl);
> + posix_acl_release(acl);
> + acl = clone;
> + }
Duplicated above.
> +static int ea_foreach(struct gfs2_inode *ip, ea_call_t ea_call, void *data)
> +{
> + struct buffer_head *bh;
> + int error;
> +
> + error = gfs2_meta_read(ip->i_gl, ip->i_di.di_eattr,
> + DIO_START | DIO_WAIT, &bh);
> + if (error)
> + return error;
> +
> + if (!(ip->i_di.di_flags & GFS2_DIF_EA_INDIRECT))
> + error = ea_foreach_i(ip, bh, ea_call, data);
goto out here so you can drop the else branch below.
> + else {
> + struct buffer_head *eabh;
> + uint64_t *eablk, *end;
> +
> + if (gfs2_metatype_check(ip->i_sbd, bh, GFS2_METATYPE_IN)) {
> + error = -EIO;
> + goto out;
> + }
> +
> + eablk = (uint64_t *)(bh->b_data +
> + sizeof(struct gfs2_meta_header));
> + end = eablk + ip->i_sbd->sd_inptrs;
> +
> +static int ea_find_i(struct gfs2_inode *ip, struct buffer_head *bh,
> + struct gfs2_ea_header *ea, struct gfs2_ea_header *prev,
> + void *private)
> +{
> + struct ea_find *ef = (struct ea_find *)private;
> + struct gfs2_ea_request *er = ef->ef_er;
> +
> + if (ea->ea_type == GFS2_EATYPE_UNUSED)
> + return 0;
> +
> + if (ea->ea_type == er->er_type) {
> + if (ea->ea_name_len == er->er_name_len &&
> + !memcmp(GFS2_EA2NAME(ea), er->er_name, ea->ea_name_len)) {
> + struct gfs2_ea_location *el = ef->ef_el;
> + get_bh(bh);
> + el->el_bh = bh;
> + el->el_ea = ea;
> + el->el_prev = prev;
> + return 1;
> + }
> + }
> +
> +#if 0
> + else if ((ip->i_di.di_flags & GFS2_DIF_EA_PACKED) &&
> + er->er_type == GFS2_EATYPE_SYS)
> + return 1;
> +#endif
Please drop commented out code.
> +static int ea_list_i(struct gfs2_inode *ip, struct buffer_head *bh,
> + struct gfs2_ea_header *ea, struct gfs2_ea_header *prev,
> + void *private)
> +{
> + struct ea_list *ei = (struct ea_list *)private;
Please drop redundant cast.
> +static int ea_set_i(struct gfs2_inode *ip, struct gfs2_ea_request *er,
> + struct gfs2_ea_location *el)
> +{
> + {
> + struct ea_set es;
> + int error;
> +
> + memset(&es, 0, sizeof(struct ea_set));
> + es.es_er = er;
> + es.es_el = el;
> +
> + error = ea_foreach(ip, ea_set_simple, &es);
> + if (error > 0)
> + return 0;
> + if (error)
> + return error;
> + }
> + {
> + unsigned int blks = 2;
> + if (!(ip->i_di.di_flags & GFS2_DIF_EA_INDIRECT))
> + blks++;
> + if (GFS2_EAREQ_SIZE_STUFFED(er) > ip->i_sbd->sd_jbsize)
> + blks += DIV_RU(er->er_data_len,
> + ip->i_sbd->sd_jbsize);
> +
> + return ea_alloc_skeleton(ip, er, blks, ea_set_block, el);
> + }
Please drop the extra braces.
next prev parent reply other threads:[~2005-08-03 6:44 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-08-02 7:18 [PATCH 00/14] GFS David Teigland
2005-08-02 7:45 ` Arjan van de Ven
2005-08-02 14:57 ` Jan Engelhardt
2005-08-02 15:02 ` Arjan van de Ven
2005-08-03 1:00 ` Hans Reiser
2005-08-03 4:07 ` Kyle Moffett
2005-08-03 6:37 ` Jan Engelhardt
2005-08-03 9:09 ` Arjan van de Ven
2005-08-03 3:56 ` David Teigland
2005-08-03 9:17 ` Arjan van de Ven
2005-08-03 10:08 ` David Teigland
2005-08-03 10:37 ` Lars Marowsky-Bree
2005-08-03 18:54 ` Mark Fasheh
2005-08-05 7:14 ` David Teigland
2005-08-05 7:27 ` [Linux-cluster] " Mike Christie
2005-08-05 7:30 ` Mike Christie
2005-08-05 7:34 ` Arjan van de Ven
2005-08-05 9:44 ` David Teigland
2005-08-05 10:07 ` Jörn Engel
2005-08-05 10:31 ` David Teigland
2005-08-05 8:28 ` Jan Engelhardt
2005-08-05 8:34 ` Arjan van de Ven
2005-08-08 6:26 ` David Teigland
2005-08-11 6:06 ` David Teigland
2005-08-11 6:55 ` Arjan van de Ven
2005-08-02 10:16 ` Pekka Enberg
2005-08-03 6:36 ` David Teigland
2005-08-08 14:14 ` GFS Pekka J Enberg
2005-08-08 18:32 ` GFS Zach Brown
2005-08-09 14:49 ` GFS Pekka Enberg
2005-08-09 17:17 ` GFS Zach Brown
2005-08-09 18:35 ` GFS Pekka J Enberg
2005-08-10 4:48 ` GFS Pekka J Enberg
2005-08-10 7:21 ` GFS Christoph Hellwig
2005-08-10 7:31 ` GFS Pekka J Enberg
2005-08-10 16:26 ` GFS Mark Fasheh
2005-08-10 16:57 ` GFS Pekka J Enberg
2005-08-10 18:21 ` GFS Mark Fasheh
2005-08-10 20:18 ` GFS Pekka J Enberg
2005-08-10 22:07 ` GFS Mark Fasheh
2005-08-11 4:41 ` GFS Pekka J Enberg
2005-08-10 5:59 ` GFS David Teigland
2005-08-10 6:06 ` GFS Pekka J Enberg
2005-08-03 6:44 ` Pekka Enberg [this message]
2005-08-08 9:57 ` [PATCH 00/14] GFS David Teigland
2005-08-08 10:00 ` GFS Pekka J Enberg
2005-08-08 10:05 ` [PATCH 00/14] GFS Arjan van de Ven
2005-08-08 10:20 ` Jörn Engel
2005-08-08 10:18 ` GFS Pekka J Enberg
2005-08-08 10:56 ` GFS David Teigland
2005-08-08 10:57 ` GFS Pekka J Enberg
2005-08-08 11:39 ` GFS David Teigland
2005-08-08 10:34 ` GFS Pekka J Enberg
2005-08-09 14:55 ` GFS Pekka J Enberg
2005-08-10 7:40 ` GFS Pekka J Enberg
2005-08-10 7:43 ` GFS Christoph Hellwig
2005-08-09 15:20 ` [PATCH 00/14] GFS Al Viro
2005-08-10 7:03 ` Christoph Hellwig
2005-08-10 10:30 ` Lars Marowsky-Bree
2005-08-10 10:32 ` Christoph Hellwig
2005-08-10 10:34 ` Lars Marowsky-Bree
2005-08-10 10:54 ` Christoph Hellwig
2005-08-10 11:02 ` Lars Marowsky-Bree
2005-08-10 11:05 ` Christoph Hellwig
2005-08-10 11:09 ` Lars Marowsky-Bree
2005-08-10 11:11 ` Christoph Hellwig
2005-08-10 13:26 ` [Linux-cluster] " AJ Lewis
2005-08-10 15:43 ` Kyle Moffett
2005-08-11 8:17 ` GFS - updated patches David Teigland
2005-08-11 8:21 ` [Linux-cluster] " Michael
2005-08-11 8:46 ` David Teigland
2005-08-11 8:49 ` Michael
2005-08-11 8:32 ` Arjan van de Ven
2005-08-11 8:50 ` David Teigland
2005-08-11 8:50 ` Arjan van de Ven
2005-08-11 9:16 ` David Teigland
2005-08-11 10:04 ` Pekka Enberg
2005-08-11 9:54 ` [Linux-cluster] " Michael
2005-08-11 10:00 ` Pekka Enberg
[not found] <20050802071828.GA11217@redhat.com.suse.lists.linux.kernel>
2005-08-03 14:33 ` [PATCH 00/14] GFS Andi Kleen
2005-08-07 11:52 ` Alan Cox
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=84144f0205080223445375c907@mail.gmail.com \
--to=penberg@gmail.com \
--cc=akpm@osdl.org \
--cc=linux-cluster@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=penberg@cs.helsinki.fi \
--cc=teigland@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.