All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zheng Liu <gnehzuil.liu@gmail.com>
To: Theodore Ts'o <tytso@mit.edu>
Cc: linux-ext4@vger.kernel.org, Zheng Liu <wenqing.lz@taobao.com>,
	Christopher Li <sparse@chrisli.org>,
	linux-sparse@vger.kernel.org
Subject: Re: [PATCH 03/10 v3] ext4: add physical block and status member into extent status tree
Date: Sun, 3 Feb 2013 13:21:13 +0800	[thread overview]
Message-ID: <20130203052113.GA9823@gmail.com> (raw)
In-Reply-To: <20130203030343.GB1359@thunk.org>

On Sat, Feb 02, 2013 at 10:03:43PM -0500, Theodore Ts'o wrote:
> On Wed, Jan 30, 2013 at 10:43:33AM +0800, Zheng Liu wrote:
> > 
> > Clang is first coming in my mind.  I know that some one try to use it
> > to build a linux kernel and get a lot of problems that are about gcc
> > extension.  But for us it seems that things are not too bad. ;)
> 
> Clang accepts bitfields with "unsigned long long", but I've discovered
> something which does _not_ support unsigned long long --- the "sparse"
> tool.  :-(

Yes, this problem has been reported by Fengguang.  So I am plan to use
another method to define extent_status structure as last time we
discuessed.  What do you think?

Thanks,
                                                - Zheng

> 
> I discovered this when running "make C=1", i.e.:
> 
>   rm -f fs/ext4/extents_status.o
>   make C=1 fs/ext4/extents_status.o
> 
> Here's a simple test case which demo's that sparse doesn't deal well
> with unsigned long long.  If we change the last two fields in struct
> extents_status to:
> 
> 	unsigned long es_pblk : 30;	/* first physical block */
> 	unsigned long es_status : 2;	/* record the status of extent */
> 
> sparse doesn't complain.  But as shown below, sparse complains bitterly:
> 
> /tmp/foo.c:22:24: warning: invalid access past the end of 'es' (24 28)
> 
> I'm not sure Chris will consider this a bug, since bitfields
> with "unsigned long long" isn't standards complaint, even if gcc and
> clang supports it.   Chris, what do you think?
> 
>               	       		      	       - Ted
>    	
> 
> #!/bin/sh
> cat > /tmp/foo.c << EOF
> #include <unistd.h>
> #include <stdio.h>
> 
> struct rb_node {
> 	unsigned long  __rb_parent_color;
> 	struct rb_node *rb_right;
> 	struct rb_node *rb_left;
> } __attribute__((aligned(sizeof(long))));
> 
> struct extent_status {
> 	struct rb_node rb_node;
> 	unsigned long es_lblk;		/* first logical block extent covers */
> 	unsigned long es_len;		/* length of extent in block */
> 	unsigned long long es_pblk : 62;	/* first physical block */
> 	unsigned long long es_status : 2;	/* record the status of extent */
> };
> 
> int main(int argc, char **argv)
> {
> 	struct extent_status es;
> 
> 	es.es_status = 3;
> 
> 	printf("%d\n", es.es_status);
> 	printf("size %u\n", sizeof(es));
> }
> EOF
> sparse /tmp/foo.c
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2013-02-03  5:21 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-23 12:03 [PATCH 00/10 v3] ext4: extent status tree (step2) Zheng Liu
2013-01-23 12:03 ` [PATCH 01/10 v3] ext4: refine extent status tree Zheng Liu
2013-01-23 12:03 ` [PATCH 02/10 v3] ext4: remove EXT4_MAP_FROM_CLUSTER flag Zheng Liu
2013-01-23 12:03 ` [PATCH 03/10 v3] ext4: add physical block and status member into extent status tree Zheng Liu
2013-01-29  3:03   ` Theodore Ts'o
2013-01-29  5:34     ` Zheng Liu
2013-01-29 17:28       ` Theodore Ts'o
2013-01-30  2:43         ` Zheng Liu
2013-02-03  3:03           ` Theodore Ts'o
2013-02-03  5:21             ` Zheng Liu [this message]
2013-02-03  8:19               ` Dan Carpenter
2013-02-03 14:57                 ` Theodore Ts'o
2013-02-03  7:30             ` Sam Ravnborg
2013-01-23 12:03 ` [PATCH 04/10 v3] ext4: adjust interfaces of " Zheng Liu
2013-01-23 12:03 ` [PATCH 05/10 v3] ext4: track all extent status in " Zheng Liu
2013-01-23 12:03 ` [PATCH 06/10 v3] ext4: lookup block mapping " Zheng Liu
2013-01-23 12:03 ` [PATCH 07/10 v3] ext4: remove single extent cache Zheng Liu
2013-01-23 12:03 ` [PATCH 08/10 v3] fs: allow for fs-specific objects to be pruned as part of pruning inodes Zheng Liu
2013-01-23 12:03 ` [PATCH 09/10 v3] ext4: adjust some functions for reclaiming extents from extent status tree Zheng Liu
2013-01-23 12:04 ` [PATCH 10/10 v3] ext4: reclaim " Zheng Liu

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=20130203052113.GA9823@gmail.com \
    --to=gnehzuil.liu@gmail.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-sparse@vger.kernel.org \
    --cc=sparse@chrisli.org \
    --cc=tytso@mit.edu \
    --cc=wenqing.lz@taobao.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.