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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox