2011-08-10 19:23:07

by Randy Dunlap

[permalink] [raw]
Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)

When CONFIG_BLOCK is not enabled (x86_64):

warning: (NFS_V4_1) selects MD which has unmet direct dependencies (BLOCK)

and these build errors:

fs/nfs/blocklayout/blocklayout.c: In function 'bl_submit_bio':
fs/nfs/blocklayout/blocklayout.c:132: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:133: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:133: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:136: error: implicit declaration of function 'submit_bio'
fs/nfs/blocklayout/blocklayout.c: In function 'bl_alloc_init_bio':
fs/nfs/blocklayout/blocklayout.c:148: error: implicit declaration of function 'bio_alloc'
fs/nfs/blocklayout/blocklayout.c:148: warning: assignment makes pointer from integer without a cast
fs/nfs/blocklayout/blocklayout.c:152: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:153: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:154: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:155: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c: In function 'bl_add_page_to_bio':
fs/nfs/blocklayout/blocklayout.c:171: error: implicit declaration of function 'bio_add_page'
fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_read':
fs/nfs/blocklayout/blocklayout.c:192: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:193: error: 'BIO_UPTODATE' undeclared (first use in this function)
fs/nfs/blocklayout/blocklayout.c:193: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:193: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:194: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:194: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:198: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:200: error: decrement of pointer to unknown structure
fs/nfs/blocklayout/blocklayout.c:200: error: arithmetic on pointer to an incomplete type
fs/nfs/blocklayout/blocklayout.c:200: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:201: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:204: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:210: error: implicit declaration of function 'bio_put'
fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_write_zero':
fs/nfs/blocklayout/blocklayout.c:355: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:356: error: 'BIO_UPTODATE' undeclared (first use in this function)
fs/nfs/blocklayout/blocklayout.c:356: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:356: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:357: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:357: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:361: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:363: error: decrement of pointer to unknown structure
fs/nfs/blocklayout/blocklayout.c:363: error: arithmetic on pointer to an incomplete type
fs/nfs/blocklayout/blocklayout.c:363: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:364: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:368: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_write':
fs/nfs/blocklayout/blocklayout.c:381: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:382: error: 'BIO_UPTODATE' undeclared (first use in this function)
fs/nfs/blocklayout/blocklayout.c:382: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:382: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c: In function 'map_block':
fs/nfs/blocklayout/blocklayout.c:440: error: implicit declaration of function 'set_buffer_mapped'
fs/nfs/blocklayout/blocklayout.c:441: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:442: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:445: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:445: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c: In function 'init_page_for_write':
fs/nfs/blocklayout/blocklayout.c:469: error: implicit declaration of function 'alloc_page_buffers'
fs/nfs/blocklayout/blocklayout.c:469: warning: assignment makes pointer from integer without a cast
fs/nfs/blocklayout/blocklayout.c:477: error: implicit declaration of function 'bh_uptodate_or_lock'
fs/nfs/blocklayout/blocklayout.c:478: error: implicit declaration of function 'bh_submit_read'
fs/nfs/blocklayout/blocklayout.c:486: error: implicit declaration of function 'free_buffer_head'
make[4]: *** [fs/nfs/blocklayout/blocklayout.o] Error 1

In file included from include/linux/raid/pq.h:20,
from lib/raid6/algos.c:19:
include/linux/blkdev.h:1346: warning: 'struct task_struct' declared inside parameter list
include/linux/blkdev.h:1346: warning: its scope is only this definition or declaration, which is probably not what you want
include/linux/blkdev.h:1350: warning: 'struct task_struct' declared inside parameter list
include/linux/blkdev.h:1355: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'blk_needs_flush_plug'
In file included from lib/raid6/algos.c:19:
include/linux/raid/pq.h:27: error: 'PAGE_SIZE' undeclared here (not in a function)
include/linux/raid/pq.h:74: error: expected declaration specifiers or '...' before 'size_t'
include/linux/raid/pq.h:113: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'raid6_gfmul'
include/linux/raid/pq.h:114: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'raid6_gfexp'
include/linux/raid/pq.h:115: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'raid6_gfinv'
include/linux/raid/pq.h:116: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'raid6_gfexi'
include/linux/raid/pq.h:119: error: expected declaration specifiers or '...' before 'size_t'
include/linux/raid/pq.h:121: error: expected declaration specifiers or '...' before 'size_t'
include/linux/raid/pq.h:122: error: expected declaration specifiers or '...' before 'size_t'
lib/raid6/algos.c: In function 'raid6_select_algo':
lib/raid6/algos.c:90: error: 'raid6_gfmul' undeclared (first use in this function)
lib/raid6/algos.c:116: warning: passing argument 2 of '(*algo)->gen_syndrome' makes pointer from integer without a cast
lib/raid6/algos.c:116: note: expected 'void **' but argument is of type 'long unsigned int'
lib/raid6/algos.c:116: error: too many arguments to function '(*algo)->gen_syndrome'
lib/raid6/algos.c: At top level:
lib/raid6/algos.c:153: error: expected declaration specifiers or '...' before string constant
lib/raid6/algos.c:153: warning: data definition has no type or storage class
lib/raid6/algos.c:153: warning: type defaults to 'int' in declaration of 'MODULE_LICENSE'
lib/raid6/algos.c:153: warning: function declaration isn't a prototype
lib/raid6/algos.c:154: error: expected declaration specifiers or '...' before string constant
lib/raid6/algos.c:154: warning: data definition has no type or storage class
lib/raid6/algos.c:154: warning: type defaults to 'int' in declaration of 'MODULE_DESCRIPTION'
lib/raid6/algos.c:154: warning: function declaration isn't a prototype
CC [M] drivers/char/applicom.o
make[3]: *** [lib/raid6/algos.o] Error 1

In file included from drivers/md/linear.c:19:
include/linux/blkdev.h:1346: warning: 'struct task_struct' declared inside parameter list
include/linux/blkdev.h:1346: warning: its scope is only this definition or declaration, which is probably not what you want
include/linux/blkdev.h:1350: warning: 'struct task_struct' declared inside parameter list
include/linux/blkdev.h:1355: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'blk_needs_flush_plug'
In file included from drivers/md/linear.c:23:
drivers/md/md.h: In function 'md_sync_acct':
drivers/md/md.h:418: error: dereferencing pointer to incomplete type
drivers/md/md.h: In function 'mdname':
drivers/md/md.h:484: error: dereferencing pointer to incomplete type
CC [M] net/netfilter/xt_connbytes.o
In file included from drivers/md/linear.c:24:
drivers/md/linear.h: At top level:
drivers/md/linear.h:15: error: field 'rcu' has incomplete type
drivers/md/linear.c: In function 'which_dev':
drivers/md/linear.c:36: error: implicit declaration of function 'rcu_dereference'
drivers/md/linear.c:36: warning: assignment makes pointer from integer without a cast
drivers/md/linear.c: At top level:
drivers/md/linear.c:64: warning: 'struct bvec_merge_data' declared inside parameter list
drivers/md/linear.c: In function 'linear_mergeable_bvec':
drivers/md/linear.c:66: error: dereferencing pointer to incomplete type
drivers/md/linear.c:68: error: dereferencing pointer to incomplete type
drivers/md/linear.c:69: error: dereferencing pointer to incomplete type
drivers/md/linear.c:69: error: implicit declaration of function 'get_start_sect'
drivers/md/linear.c:69: error: dereferencing pointer to incomplete type
drivers/md/linear.c:71: error: implicit declaration of function 'rcu_read_lock'
drivers/md/linear.c:74: error: implicit declaration of function 'rcu_read_unlock'
drivers/md/linear.c:82: error: dereferencing pointer to incomplete type
drivers/md/linear.c: In function 'linear_congested':
drivers/md/linear.c:100: warning: assignment makes pointer from integer without a cast
drivers/md/linear.c:103: error: implicit declaration of function 'bdev_get_queue'
drivers/md/linear.c:103: warning: initialization makes pointer from integer without a cast
drivers/md/linear.c:104: error: implicit declaration of function 'bdi_congested'
drivers/md/linear.c:104: error: dereferencing pointer to incomplete type
drivers/md/linear.c: In function 'linear_size':
drivers/md/linear.c:117: warning: assignment makes pointer from integer without a cast
drivers/md/linear.c: In function 'linear_conf':
drivers/md/linear.c:158: error: implicit declaration of function 'disk_stack_limits'
drivers/md/linear.c:164: error: dereferencing pointer to incomplete type
drivers/md/linear.c:165: error: implicit declaration of function 'blk_queue_max_segments'
drivers/md/linear.c:166: error: implicit declaration of function 'blk_queue_segment_boundary'
drivers/md/linear.c:167: error: 'PAGE_CACHE_SIZE' undeclared (first use in this function)
drivers/md/linear.c: In function 'linear_run':
drivers/md/linear.c:210: error: implicit declaration of function 'blk_queue_merge_bvec'
drivers/md/linear.c:211: error: dereferencing pointer to incomplete type
drivers/md/linear.c:212: error: dereferencing pointer to incomplete type
drivers/md/linear.c: In function 'linear_add':
drivers/md/linear.c:238: warning: assignment makes pointer from integer without a cast
drivers/md/linear.c:240: error: implicit declaration of function 'rcu_assign_pointer'
drivers/md/linear.c:242: error: implicit declaration of function 'set_capacity'
drivers/md/linear.c:243: error: implicit declaration of function 'revalidate_disk'
drivers/md/linear.c:244: error: implicit declaration of function 'kfree_rcu'
drivers/md/linear.c:244: error: 'rcu' undeclared (first use in this function)
drivers/md/linear.c: In function 'linear_stop':
drivers/md/linear.c:259: error: implicit declaration of function 'rcu_barrier'
drivers/md/linear.c:260: error: implicit declaration of function 'blk_sync_queue'
drivers/md/linear.c: In function 'linear_make_request':
drivers/md/linear.c:272: error: dereferencing pointer to incomplete type
drivers/md/linear.c:272: error: 'REQ_FLUSH' undeclared (first use in this function)
drivers/md/linear.c:278: error: dereferencing pointer to incomplete type
drivers/md/linear.c:282: error: dereferencing pointer to incomplete type
drivers/md/linear.c:282: error: dereferencing pointer to incomplete type
drivers/md/linear.c:284: error: 'BDEVNAME_SIZE' undeclared (first use in this function)
drivers/md/linear.c:290: error: dereferencing pointer to incomplete type
drivers/md/linear.c:291: error: implicit declaration of function 'bdevname'
drivers/md/linear.c:293: warning: format '%s' expects type 'char *', but argument 4 has type 'int'
drivers/md/linear.c:295: error: implicit declaration of function 'bio_io_error'
drivers/md/linear.c:284: warning: unused variable 'b'
drivers/md/linear.c:298: error: dereferencing pointer to incomplete type
drivers/md/linear.c:298: error: dereferencing pointer to incomplete type
drivers/md/linear.c:308: error: implicit declaration of function 'bio_split'
drivers/md/linear.c:308: error: dereferencing pointer to incomplete type
drivers/md/linear.c:308: warning: assignment makes pointer from integer without a cast
drivers/md/linear.c:310: error: dereferencing pointer to incomplete type
drivers/md/linear.c:311: error: implicit declaration of function 'generic_make_request'
drivers/md/linear.c:311: error: dereferencing pointer to incomplete type
drivers/md/linear.c:312: error: dereferencing pointer to incomplete type
drivers/md/linear.c:313: error: dereferencing pointer to incomplete type
drivers/md/linear.c:314: error: implicit declaration of function 'bio_pair_release'
drivers/md/linear.c:318: error: dereferencing pointer to incomplete type
drivers/md/linear.c:319: error: dereferencing pointer to incomplete type
drivers/md/linear.c:319: error: dereferencing pointer to incomplete type
drivers/md/linear.c: At top level:
drivers/md/linear.c:337: error: 'THIS_MODULE' undeclared here (not in a function)
drivers/md/linear.c:359: error: expected declaration specifiers or '...' before string constant
drivers/md/linear.c:359: warning: data definition has no type or storage class
drivers/md/linear.c:359: warning: type defaults to 'int' in declaration of 'MODULE_LICENSE'
drivers/md/linear.c:359: warning: function declaration isn't a prototype
drivers/md/linear.c:360: error: expected declaration specifiers or '...' before string constant
drivers/md/linear.c:360: warning: data definition has no type or storage class
drivers/md/linear.c:360: warning: type defaults to 'int' in declaration of 'MODULE_DESCRIPTION'
drivers/md/linear.c:360: warning: function declaration isn't a prototype
drivers/md/linear.c:361: error: expected declaration specifiers or '...' before string constant
drivers/md/linear.c:361: warning: data definition has no type or storage class
drivers/md/linear.c:361: warning: type defaults to 'int' in declaration of 'MODULE_ALIAS'
drivers/md/linear.c:361: warning: function declaration isn't a prototype
drivers/md/linear.c:362: error: expected declaration specifiers or '...' before string constant
drivers/md/linear.c:362: warning: data definition has no type or storage class
drivers/md/linear.c:362: warning: type defaults to 'int' in declaration of 'MODULE_ALIAS'
drivers/md/linear.c:362: warning: function declaration isn't a prototype
drivers/md/linear.c:363: error: expected declaration specifiers or '...' before string constant
drivers/md/linear.c:363: warning: data definition has no type or storage class
drivers/md/linear.c:363: warning: type defaults to 'int' in declaration of 'MODULE_ALIAS'
drivers/md/linear.c:363: warning: function declaration isn't a prototype
make[3]: *** [drivers/md/linear.o] Error 1


---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***


2011-08-11 01:10:36

by Linus Torvalds

[permalink] [raw]
Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)

On Wed, Aug 10, 2011 at 5:58 PM, Randy Dunlap <[email protected]> wrote:
>
> The blocklayout parts of NVS_V4_1 could depend on BLOCK. ?or all of NVS_V4_1
> can depend on BLOCK.

Absolutely. Replace "could" by "should".

There's no way I'll take a patch to make NFS "select BLOCK". If the
block layer isn't enabled, then NFS obviously shouldn't be doing any
pnfs stuff.

Linus

2011-08-11 16:08:27

by Randy Dunlap

[permalink] [raw]
Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)

On Wed, 10 Aug 2011 23:26:47 -0400 [email protected] wrote:

> Hi, Randy and Linus
>
> > -----Original Message-----
> > From: [email protected] [mailto:[email protected]]
> > On Behalf Of Linus Torvalds
> > Sent: Thursday, August 11, 2011 9:10 AM
> > To: Randy Dunlap
> > Cc: Peng Tao; Trond Myklebust; [email protected]; Linux Kernel Mailing List;
> > [email protected]
> > Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)
> >
> > On Wed, Aug 10, 2011 at 5:58 PM, Randy Dunlap <[email protected]> wrote:
> > >
> > > The blocklayout parts of NVS_V4_1 could depend on BLOCK. ?or all of NVS_V4_1
> > > can depend on BLOCK.
> >
> > Absolutely. Replace "could" by "should".
> >
> > There's no way I'll take a patch to make NFS "select BLOCK". If the
> > block layer isn't enabled, then NFS obviously shouldn't be doing any
> > pnfs stuff.
> I see. How about the following patch? We used to do like following for PNFS_BLOCK but it was changed during code review.

Yes, that builds cleanly for me. Thanks.

Acked-by: Randy Dunlap <[email protected]>



> From 833b59c1d24b43a9a4d47f777abab2cd9d041c68 Mon Sep 17 00:00:00 2001
> From: Peng Tao <[email protected]>
> Date: Wed, 10 Aug 2011 18:29:21 -0400
> Subject: [PATCH] NFS41: make PNFS_BLOCK selectable
>
> PNFS_BLOCK needs BLK_DEV_DM/MD, which is not a dependency for other
> pnfs layout drivers. Seperate it out so others can still build when
> BLK_DEV_DM/MD is not enabled.
>
> Also change select to depends on to avoid build failures.
>
> Reported-by: Randy Dunlap <[email protected]>
> Signed-off-by: Peng Tao <[email protected]>
> ---
> fs/nfs/Kconfig | 14 +++++++++-----
> 1 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
> index be02077..0d30613 100644
> --- a/fs/nfs/Kconfig
> +++ b/fs/nfs/Kconfig
> @@ -79,12 +79,9 @@ config NFS_V4_1
> depends on NFS_FS && NFS_V4 && EXPERIMENTAL
> select SUNRPC_BACKCHANNEL
> select PNFS_FILE_LAYOUT
> - select PNFS_BLOCK
> - select MD
> - select BLK_DEV_DM
> help
> This option enables support for minor version 1 of the NFSv4 protocol
> - (RFC 5661 and RFC 5663) in the kernel's NFS client.
> + (RFC 5661) in the kernel's NFS client.
>
> If unsure, say N.
>
> @@ -92,7 +89,14 @@ config PNFS_FILE_LAYOUT
> tristate
>
> config PNFS_BLOCK
> - tristate
> + tristate "Provide support for the pNFS Block Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
> + depends on NFS_FS && NFS_V4_1 && BLK_DEV_DM
> + help
> + Say M here if you want your pNFS client to support the Block Layout Driver
> + (RFC 5663). Requires Multiple devices driver support (DM) and Device mapper
> + support (BLK_DEV_DM).
> +
> + If unsure, say N.
>
> config PNFS_OBJLAYOUT
> tristate "Provide support for the pNFS Objects Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
> --
> 1.7.4.2
>
>
>


---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

2011-08-11 23:47:41

by Peng Tao

[permalink] [raw]
Subject: Re: [PATCH] pnfs: Automatically select blocks & objects layouts

On Fri, Aug 12, 2011 at 6:13 AM, Jim Rees <[email protected]> wrote:
> Boaz Harrosh wrote:
>
>  What about the below? based on v3.1-rc1
>
>  ----
>  From: Boaz Harrosh <[email protected]>
>  Subject: [PATCH] pnfs: Automatically select blocks & objects layouts
>
>  Just like files-layout, blocks & objects layouts are part of the
>  NFS 4.1 protocol and should be automatically selected if NFS_4_1
>  is selected. The small problem is that these depend on other
>  Kernel support being present, while files only depends on NFS
>  itself.
>
>  This patch removes from the user choice the presence of objects
>  and blocks layout. But makes sure these are selected only if
>  the depended subsystems are present in the Kernel.
>
>  Signed-off-by: Boaz Harrosh <[email protected]>
>
> Acked-by: Jim Rees <[email protected]>
>
> I think this is what we want.  There is no point allowing the user to pick
> and choose various layout drivers.  If they have selected nfs4.1 they should
> get all the layout drivers their kernel will support, based on the
> dependencies.
>
I agree automatically selecting is more reasonable.
Acked-by: Peng Tao <[email protected]>


--
Thanks,
-Bergwolf

2011-08-11 00:58:31

by Randy Dunlap

[permalink] [raw]
Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)

On Thu, 11 Aug 2011 08:35:50 +0800 Peng Tao wrote:

> On Thu, Aug 11, 2011 at 3:23 AM, Randy Dunlap <[email protected]> wrote:
> > When CONFIG_BLOCK is not enabled (x86_64):
> >
> > warning: (NFS_V4_1) selects MD which has unmet direct dependencies (BLOCK)

> MD depends on BLOCK but when MD is selected, it will not select BLOCK.
> Selecting BLOCK at NFS_V4_1 can solve this but it's like resolving
> dependency from top down.
>
> Is MD designed to not be selected from the first place? If not, can we
> change it to selecting BLOCK?

Hopefully MD will not select BLOCK.

The blocklayout parts of NVS_V4_1 could depend on BLOCK. or all of NVS_V4_1
can depend on BLOCK.

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

2011-08-11 10:11:37

by Benny Halevy

[permalink] [raw]
Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)

On 2011-08-11 06:26, [email protected] wrote:
> Hi, Randy and Linus
>
>> -----Original Message-----
>> From: [email protected] [mailto:[email protected]]
>> On Behalf Of Linus Torvalds
>> Sent: Thursday, August 11, 2011 9:10 AM
>> To: Randy Dunlap
>> Cc: Peng Tao; Trond Myklebust; [email protected]; Linux Kernel Mailing List;
>> [email protected]
>> Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)
>>
>> On Wed, Aug 10, 2011 at 5:58 PM, Randy Dunlap <[email protected]> wrote:
>>>
>>> The blocklayout parts of NVS_V4_1 could depend on BLOCK. or all of NVS_V4_1
>>> can depend on BLOCK.
>>
>> Absolutely. Replace "could" by "should".
>>
>> There's no way I'll take a patch to make NFS "select BLOCK". If the
>> block layer isn't enabled, then NFS obviously shouldn't be doing any
>> pnfs stuff.
> I see. How about the following patch? We used to do like following for PNFS_BLOCK but it was changed during code review.

My Ack, that's indeed closer to what I had queued in my tree originally and
follows the approach we used for the objects layout driver.

Benny

>
>
> From 833b59c1d24b43a9a4d47f777abab2cd9d041c68 Mon Sep 17 00:00:00 2001
> From: Peng Tao <[email protected]>
> Date: Wed, 10 Aug 2011 18:29:21 -0400
> Subject: [PATCH] NFS41: make PNFS_BLOCK selectable
>
> PNFS_BLOCK needs BLK_DEV_DM/MD, which is not a dependency for other
> pnfs layout drivers. Seperate it out so others can still build when
> BLK_DEV_DM/MD is not enabled.
>
> Also change select to depends on to avoid build failures.
>
> Reported-by: Randy Dunlap <[email protected]>
> Signed-off-by: Peng Tao <[email protected]>
> ---
> fs/nfs/Kconfig | 14 +++++++++-----
> 1 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
> index be02077..0d30613 100644
> --- a/fs/nfs/Kconfig
> +++ b/fs/nfs/Kconfig
> @@ -79,12 +79,9 @@ config NFS_V4_1
> depends on NFS_FS && NFS_V4 && EXPERIMENTAL
> select SUNRPC_BACKCHANNEL
> select PNFS_FILE_LAYOUT
> - select PNFS_BLOCK
> - select MD
> - select BLK_DEV_DM
> help
> This option enables support for minor version 1 of the NFSv4 protocol
> - (RFC 5661 and RFC 5663) in the kernel's NFS client.
> + (RFC 5661) in the kernel's NFS client.
>
> If unsure, say N.
>
> @@ -92,7 +89,14 @@ config PNFS_FILE_LAYOUT
> tristate
>
> config PNFS_BLOCK
> - tristate
> + tristate "Provide support for the pNFS Block Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
> + depends on NFS_FS && NFS_V4_1 && BLK_DEV_DM
> + help
> + Say M here if you want your pNFS client to support the Block Layout Driver
> + (RFC 5663). Requires Multiple devices driver support (DM) and Device mapper
> + support (BLK_DEV_DM).
> +
> + If unsure, say N.
>
> config PNFS_OBJLAYOUT
> tristate "Provide support for the pNFS Objects Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"

2011-08-11 22:13:11

by Jim Rees

[permalink] [raw]
Subject: Re: [PATCH] pnfs: Automatically select blocks & objects layouts

Boaz Harrosh wrote:

What about the below? based on v3.1-rc1

----
From: Boaz Harrosh <[email protected]>
Subject: [PATCH] pnfs: Automatically select blocks & objects layouts

Just like files-layout, blocks & objects layouts are part of the
NFS 4.1 protocol and should be automatically selected if NFS_4_1
is selected. The small problem is that these depend on other
Kernel support being present, while files only depends on NFS
itself.

This patch removes from the user choice the presence of objects
and blocks layout. But makes sure these are selected only if
the depended subsystems are present in the Kernel.

Signed-off-by: Boaz Harrosh <[email protected]>

Acked-by: Jim Rees <[email protected]>

I think this is what we want. There is no point allowing the user to pick
and choose various layout drivers. If they have selected nfs4.1 they should
get all the layout drivers their kernel will support, based on the
dependencies.

2011-08-11 00:36:11

by Peng Tao

[permalink] [raw]
Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)

On Thu, Aug 11, 2011 at 3:23 AM, Randy Dunlap <[email protected]> wrote:
> When CONFIG_BLOCK is not enabled (x86_64):
>
> warning: (NFS_V4_1) selects MD which has unmet direct dependencies (BLOCK)
MD depends on BLOCK but when MD is selected, it will not select BLOCK.
Selecting BLOCK at NFS_V4_1 can solve this but it's like resolving
dependency from top down.

Is MD designed to not be selected from the first place? If not, can we
change it to selecting BLOCK?

Thanks,
Tao

>
> and these build errors:
>
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_submit_bio':
> fs/nfs/blocklayout/blocklayout.c:132: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:133: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:133: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:136: error: implicit declaration of function 'submit_bio'
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_alloc_init_bio':
> fs/nfs/blocklayout/blocklayout.c:148: error: implicit declaration of function 'bio_alloc'
> fs/nfs/blocklayout/blocklayout.c:148: warning: assignment makes pointer from integer without a cast
> fs/nfs/blocklayout/blocklayout.c:152: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:153: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:154: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:155: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_add_page_to_bio':
> fs/nfs/blocklayout/blocklayout.c:171: error: implicit declaration of function 'bio_add_page'
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_read':
> fs/nfs/blocklayout/blocklayout.c:192: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:193: error: 'BIO_UPTODATE' undeclared (first use in this function)
> fs/nfs/blocklayout/blocklayout.c:193: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:193: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:194: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:194: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:198: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:200: error: decrement of pointer to unknown structure
> fs/nfs/blocklayout/blocklayout.c:200: error: arithmetic on pointer to an incomplete type
> fs/nfs/blocklayout/blocklayout.c:200: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:201: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:204: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:210: error: implicit declaration of function 'bio_put'
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_write_zero':
> fs/nfs/blocklayout/blocklayout.c:355: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:356: error: 'BIO_UPTODATE' undeclared (first use in this function)
> fs/nfs/blocklayout/blocklayout.c:356: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:356: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:357: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:357: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:361: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:363: error: decrement of pointer to unknown structure
> fs/nfs/blocklayout/blocklayout.c:363: error: arithmetic on pointer to an incomplete type
> fs/nfs/blocklayout/blocklayout.c:363: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:364: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:368: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_write':
> fs/nfs/blocklayout/blocklayout.c:381: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:382: error: 'BIO_UPTODATE' undeclared (first use in this function)
> fs/nfs/blocklayout/blocklayout.c:382: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:382: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c: In function 'map_block':
> fs/nfs/blocklayout/blocklayout.c:440: error: implicit declaration of function 'set_buffer_mapped'
> fs/nfs/blocklayout/blocklayout.c:441: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:442: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:445: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:445: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c: In function 'init_page_for_write':
> fs/nfs/blocklayout/blocklayout.c:469: error: implicit declaration of function 'alloc_page_buffers'
> fs/nfs/blocklayout/blocklayout.c:469: warning: assignment makes pointer from integer without a cast
> fs/nfs/blocklayout/blocklayout.c:477: error: implicit declaration of function 'bh_uptodate_or_lock'
> fs/nfs/blocklayout/blocklayout.c:478: error: implicit declaration of function 'bh_submit_read'
> fs/nfs/blocklayout/blocklayout.c:486: error: implicit declaration of function 'free_buffer_head'
> make[4]: *** [fs/nfs/blocklayout/blocklayout.o] Error 1
>
> In file included from include/linux/raid/pq.h:20,
>                 from lib/raid6/algos.c:19:
> include/linux/blkdev.h:1346: warning: 'struct task_struct' declared inside parameter list
> include/linux/blkdev.h:1346: warning: its scope is only this definition or declaration, which is probably not what you want
> include/linux/blkdev.h:1350: warning: 'struct task_struct' declared inside parameter list
> include/linux/blkdev.h:1355: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'blk_needs_flush_plug'
> In file included from lib/raid6/algos.c:19:
> include/linux/raid/pq.h:27: error: 'PAGE_SIZE' undeclared here (not in a function)
> include/linux/raid/pq.h:74: error: expected declaration specifiers or '...' before 'size_t'
> include/linux/raid/pq.h:113: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'raid6_gfmul'
> include/linux/raid/pq.h:114: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'raid6_gfexp'
> include/linux/raid/pq.h:115: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'raid6_gfinv'
> include/linux/raid/pq.h:116: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'raid6_gfexi'
> include/linux/raid/pq.h:119: error: expected declaration specifiers or '...' before 'size_t'
> include/linux/raid/pq.h:121: error: expected declaration specifiers or '...' before 'size_t'
> include/linux/raid/pq.h:122: error: expected declaration specifiers or '...' before 'size_t'
> lib/raid6/algos.c: In function 'raid6_select_algo':
> lib/raid6/algos.c:90: error: 'raid6_gfmul' undeclared (first use in this function)
> lib/raid6/algos.c:116: warning: passing argument 2 of '(*algo)->gen_syndrome' makes pointer from integer without a cast
> lib/raid6/algos.c:116: note: expected 'void **' but argument is of type 'long unsigned int'
> lib/raid6/algos.c:116: error: too many arguments to function '(*algo)->gen_syndrome'
> lib/raid6/algos.c: At top level:
> lib/raid6/algos.c:153: error: expected declaration specifiers or '...' before string constant
> lib/raid6/algos.c:153: warning: data definition has no type or storage class
> lib/raid6/algos.c:153: warning: type defaults to 'int' in declaration of 'MODULE_LICENSE'
> lib/raid6/algos.c:153: warning: function declaration isn't a prototype
> lib/raid6/algos.c:154: error: expected declaration specifiers or '...' before string constant
> lib/raid6/algos.c:154: warning: data definition has no type or storage class
> lib/raid6/algos.c:154: warning: type defaults to 'int' in declaration of 'MODULE_DESCRIPTION'
> lib/raid6/algos.c:154: warning: function declaration isn't a prototype
>  CC [M]  drivers/char/applicom.o
> make[3]: *** [lib/raid6/algos.o] Error 1
>
> In file included from drivers/md/linear.c:19:
> include/linux/blkdev.h:1346: warning: 'struct task_struct' declared inside parameter list
> include/linux/blkdev.h:1346: warning: its scope is only this definition or declaration, which is probably not what you want
> include/linux/blkdev.h:1350: warning: 'struct task_struct' declared inside parameter list
> include/linux/blkdev.h:1355: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'blk_needs_flush_plug'
> In file included from drivers/md/linear.c:23:
> drivers/md/md.h: In function 'md_sync_acct':
> drivers/md/md.h:418: error: dereferencing pointer to incomplete type
> drivers/md/md.h: In function 'mdname':
> drivers/md/md.h:484: error: dereferencing pointer to incomplete type
>  CC [M]  net/netfilter/xt_connbytes.o
> In file included from drivers/md/linear.c:24:
> drivers/md/linear.h: At top level:
> drivers/md/linear.h:15: error: field 'rcu' has incomplete type
> drivers/md/linear.c: In function 'which_dev':
> drivers/md/linear.c:36: error: implicit declaration of function 'rcu_dereference'
> drivers/md/linear.c:36: warning: assignment makes pointer from integer without a cast
> drivers/md/linear.c: At top level:
> drivers/md/linear.c:64: warning: 'struct bvec_merge_data' declared inside parameter list
> drivers/md/linear.c: In function 'linear_mergeable_bvec':
> drivers/md/linear.c:66: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:68: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:69: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:69: error: implicit declaration of function 'get_start_sect'
> drivers/md/linear.c:69: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:71: error: implicit declaration of function 'rcu_read_lock'
> drivers/md/linear.c:74: error: implicit declaration of function 'rcu_read_unlock'
> drivers/md/linear.c:82: error: dereferencing pointer to incomplete type
> drivers/md/linear.c: In function 'linear_congested':
> drivers/md/linear.c:100: warning: assignment makes pointer from integer without a cast
> drivers/md/linear.c:103: error: implicit declaration of function 'bdev_get_queue'
> drivers/md/linear.c:103: warning: initialization makes pointer from integer without a cast
> drivers/md/linear.c:104: error: implicit declaration of function 'bdi_congested'
> drivers/md/linear.c:104: error: dereferencing pointer to incomplete type
> drivers/md/linear.c: In function 'linear_size':
> drivers/md/linear.c:117: warning: assignment makes pointer from integer without a cast
> drivers/md/linear.c: In function 'linear_conf':
> drivers/md/linear.c:158: error: implicit declaration of function 'disk_stack_limits'
> drivers/md/linear.c:164: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:165: error: implicit declaration of function 'blk_queue_max_segments'
> drivers/md/linear.c:166: error: implicit declaration of function 'blk_queue_segment_boundary'
> drivers/md/linear.c:167: error: 'PAGE_CACHE_SIZE' undeclared (first use in this function)
> drivers/md/linear.c: In function 'linear_run':
> drivers/md/linear.c:210: error: implicit declaration of function 'blk_queue_merge_bvec'
> drivers/md/linear.c:211: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:212: error: dereferencing pointer to incomplete type
> drivers/md/linear.c: In function 'linear_add':
> drivers/md/linear.c:238: warning: assignment makes pointer from integer without a cast
> drivers/md/linear.c:240: error: implicit declaration of function 'rcu_assign_pointer'
> drivers/md/linear.c:242: error: implicit declaration of function 'set_capacity'
> drivers/md/linear.c:243: error: implicit declaration of function 'revalidate_disk'
> drivers/md/linear.c:244: error: implicit declaration of function 'kfree_rcu'
> drivers/md/linear.c:244: error: 'rcu' undeclared (first use in this function)
> drivers/md/linear.c: In function 'linear_stop':
> drivers/md/linear.c:259: error: implicit declaration of function 'rcu_barrier'
> drivers/md/linear.c:260: error: implicit declaration of function 'blk_sync_queue'
> drivers/md/linear.c: In function 'linear_make_request':
> drivers/md/linear.c:272: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:272: error: 'REQ_FLUSH' undeclared (first use in this function)
> drivers/md/linear.c:278: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:282: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:282: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:284: error: 'BDEVNAME_SIZE' undeclared (first use in this function)
> drivers/md/linear.c:290: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:291: error: implicit declaration of function 'bdevname'
> drivers/md/linear.c:293: warning: format '%s' expects type 'char *', but argument 4 has type 'int'
> drivers/md/linear.c:295: error: implicit declaration of function 'bio_io_error'
> drivers/md/linear.c:284: warning: unused variable 'b'
> drivers/md/linear.c:298: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:298: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:308: error: implicit declaration of function 'bio_split'
> drivers/md/linear.c:308: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:308: warning: assignment makes pointer from integer without a cast
> drivers/md/linear.c:310: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:311: error: implicit declaration of function 'generic_make_request'
> drivers/md/linear.c:311: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:312: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:313: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:314: error: implicit declaration of function 'bio_pair_release'
> drivers/md/linear.c:318: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:319: error: dereferencing pointer to incomplete type
> drivers/md/linear.c:319: error: dereferencing pointer to incomplete type
> drivers/md/linear.c: At top level:
> drivers/md/linear.c:337: error: 'THIS_MODULE' undeclared here (not in a function)
> drivers/md/linear.c:359: error: expected declaration specifiers or '...' before string constant
> drivers/md/linear.c:359: warning: data definition has no type or storage class
> drivers/md/linear.c:359: warning: type defaults to 'int' in declaration of 'MODULE_LICENSE'
> drivers/md/linear.c:359: warning: function declaration isn't a prototype
> drivers/md/linear.c:360: error: expected declaration specifiers or '...' before string constant
> drivers/md/linear.c:360: warning: data definition has no type or storage class
> drivers/md/linear.c:360: warning: type defaults to 'int' in declaration of 'MODULE_DESCRIPTION'
> drivers/md/linear.c:360: warning: function declaration isn't a prototype
> drivers/md/linear.c:361: error: expected declaration specifiers or '...' before string constant
> drivers/md/linear.c:361: warning: data definition has no type or storage class
> drivers/md/linear.c:361: warning: type defaults to 'int' in declaration of 'MODULE_ALIAS'
> drivers/md/linear.c:361: warning: function declaration isn't a prototype
> drivers/md/linear.c:362: error: expected declaration specifiers or '...' before string constant
> drivers/md/linear.c:362: warning: data definition has no type or storage class
> drivers/md/linear.c:362: warning: type defaults to 'int' in declaration of 'MODULE_ALIAS'
> drivers/md/linear.c:362: warning: function declaration isn't a prototype
> drivers/md/linear.c:363: error: expected declaration specifiers or '...' before string constant
> drivers/md/linear.c:363: warning: data definition has no type or storage class
> drivers/md/linear.c:363: warning: type defaults to 'int' in declaration of 'MODULE_ALIAS'
> drivers/md/linear.c:363: warning: function declaration isn't a prototype
> make[3]: *** [drivers/md/linear.o] Error 1
>
>
> ---
> ~Randy
> *** Remember to use Documentation/SubmitChecklist when testing your code ***
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

2011-08-11 06:06:42

by Christoph Hellwig

[permalink] [raw]
Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)

Note that the object layout also effectively needs the block layer.


2011-08-11 21:11:27

by Boaz Harrosh

[permalink] [raw]
Subject: [PATCH] pnfs: Automatically select blocks & objects layouts

What about the below? based on v3.1-rc1

----
From: Boaz Harrosh <[email protected]>
Subject: [PATCH] pnfs: Automatically select blocks & objects layouts

Just like files-layout, blocks & objects layouts are part of the
NFS 4.1 protocol and should be automatically selected if NFS_4_1
is selected. The small problem is that these depend on other
Kernel support being present, while files only depends on NFS
itself.

This patch removes from the user choice the presence of objects
and blocks layout. But makes sure these are selected only if
the depended subsystems are present in the Kernel.

Signed-off-by: Boaz Harrosh <[email protected]>
---
fs/nfs/Kconfig | 14 ++++----------
1 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
index be02077..1b951cd 100644
--- a/fs/nfs/Kconfig
+++ b/fs/nfs/Kconfig
@@ -79,9 +79,6 @@ config NFS_V4_1
depends on NFS_FS && NFS_V4 && EXPERIMENTAL
select SUNRPC_BACKCHANNEL
select PNFS_FILE_LAYOUT
- select PNFS_BLOCK
- select MD
- select BLK_DEV_DM
help
This option enables support for minor version 1 of the NFSv4 protocol
(RFC 5661 and RFC 5663) in the kernel's NFS client.
@@ -93,16 +90,13 @@ config PNFS_FILE_LAYOUT

config PNFS_BLOCK
tristate
+ depends on NFS_FS && NFS_V4_1 && MD && BLK_DEV_DM
+ default m

config PNFS_OBJLAYOUT
- tristate "Provide support for the pNFS Objects Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
+ tristate
depends on NFS_FS && NFS_V4_1 && SCSI_OSD_ULD
- help
- Say M here if you want your pNFS client to support the Objects Layout Driver.
- Requires the SCSI osd initiator library (SCSI_OSD_INITIATOR) and
- upper level driver (SCSI_OSD_ULD).
-
- If unsure, say N.
+ default m

config ROOT_NFS
bool "Root file system on NFS"
--
1.7.6



2011-08-11 21:43:56

by Randy Dunlap

[permalink] [raw]
Subject: Re: [PATCH v2] pnfs: Automatically select blocks & objects layouts

On Thu, 11 Aug 2011 14:29:25 -0700 Boaz Harrosh wrote:

>
> Just like files-layout, blocks & objects layouts are part of the
> NFS 4.1 protocol and should be automatically selected if NFS_4_1
> is selected. The small problem is that these depend on other
> Kernel support being present, while files only depends on NFS
> itself.
>
> This patch removes from the user choice the presence of objects
> and blocks layout. But makes sure these are selected only if
> the depended subsystems are present in the Kernel.
>
> Signed-off-by: Boaz Harrosh <[email protected]>

v1 applied & built OK for me.
v2 didn't apply to linux-3.1-rc1 cleanly, but I think I got it right.
Maybe not. I got all of this from it:

warning: (NFS_V4_1) selects MD which has unmet direct dependencies (BLOCK)
CC [M] fs/nfs/blocklayout/blocklayout.o
CC [M] fs/nfs/blocklayout/extents.o
In file included from fs/nfs/blocklayout/blocklayout.h:35,
from fs/nfs/blocklayout/extents.c:33:
include/linux/device-mapper.h:49: warning: 'struct bio' declared inside parameter list
include/linux/device-mapper.h:49: warning: its scope is only this definition or declaration, which is probably not what you want
include/linux/device-mapper.h:51: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:63: warning: 'struct bio' declared inside parameter list
include/linux/device-mapper.h:66: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:83: warning: 'struct bvec_merge_data' declared inside parameter list
include/linux/device-mapper.h:95: warning: 'struct queue_limits' declared inside parameter list
include/linux/device-mapper.h:300: warning: 'struct bio' declared inside parameter list
include/linux/device-mapper.h:301: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:475: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:476: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:477: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:478: warning: 'struct request_queue' declared inside parameter list
In file included from fs/nfs/blocklayout/blocklayout.h:35,
from fs/nfs/blocklayout/blocklayout.c:40:
include/linux/device-mapper.h:49: warning: 'struct bio' declared inside parameter list
include/linux/device-mapper.h:49: warning: its scope is only this definition or declaration, which is probably not what you want
include/linux/device-mapper.h:51: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:63: warning: 'struct bio' declared inside parameter list
include/linux/device-mapper.h:66: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:83: warning: 'struct bvec_merge_data' declared inside parameter list
include/linux/device-mapper.h:95: warning: 'struct queue_limits' declared inside parameter list
include/linux/device-mapper.h:300: warning: 'struct bio' declared inside parameter list
include/linux/device-mapper.h:301: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:475: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:476: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:477: warning: 'struct request' declared inside parameter list
include/linux/device-mapper.h:478: warning: 'struct request_queue' declared inside parameter list
fs/nfs/blocklayout/blocklayout.c: In function 'bl_submit_bio':
fs/nfs/blocklayout/blocklayout.c:132: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:133: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:133: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:136: error: implicit declaration of function 'submit_bio'
fs/nfs/blocklayout/blocklayout.c: In function 'bl_alloc_init_bio':
fs/nfs/blocklayout/blocklayout.c:148: error: implicit declaration of function 'bio_alloc'
fs/nfs/blocklayout/blocklayout.c:148: warning: assignment makes pointer from integer without a cast
fs/nfs/blocklayout/blocklayout.c:152: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:153: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:154: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:155: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c: In function 'bl_add_page_to_bio':
fs/nfs/blocklayout/blocklayout.c:171: error: implicit declaration of function 'bio_add_page'
fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_read':
fs/nfs/blocklayout/blocklayout.c:192: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:193: error: 'BIO_UPTODATE' undeclared (first use in this function)
fs/nfs/blocklayout/blocklayout.c:193: error: (Each undeclared identifier is reported only once
fs/nfs/blocklayout/blocklayout.c:193: error: for each function it appears in.)
fs/nfs/blocklayout/blocklayout.c:193: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:193: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:194: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:194: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:198: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:200: error: decrement of pointer to unknown structure
fs/nfs/blocklayout/blocklayout.c:200: error: arithmetic on pointer to an incomplete type
fs/nfs/blocklayout/blocklayout.c:200: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:201: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:204: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:210: error: implicit declaration of function 'bio_put'
fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_write_zero':
fs/nfs/blocklayout/blocklayout.c:355: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:356: error: 'BIO_UPTODATE' undeclared (first use in this function)
fs/nfs/blocklayout/blocklayout.c:356: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:356: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:357: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:357: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:361: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:363: error: decrement of pointer to unknown structure
fs/nfs/blocklayout/blocklayout.c:363: error: arithmetic on pointer to an incomplete type
fs/nfs/blocklayout/blocklayout.c:363: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:364: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:368: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_write':
fs/nfs/blocklayout/blocklayout.c:381: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:382: error: 'BIO_UPTODATE' undeclared (first use in this function)
fs/nfs/blocklayout/blocklayout.c:382: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:382: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c: In function 'map_block':
fs/nfs/blocklayout/blocklayout.c:440: error: implicit declaration of function 'set_buffer_mapped'
fs/nfs/blocklayout/blocklayout.c:441: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:442: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:445: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c:445: error: dereferencing pointer to incomplete type
fs/nfs/blocklayout/blocklayout.c: In function 'init_page_for_write':
fs/nfs/blocklayout/blocklayout.c:469: error: implicit declaration of function 'alloc_page_buffers'
fs/nfs/blocklayout/blocklayout.c:469: warning: assignment makes pointer from integer without a cast
fs/nfs/blocklayout/blocklayout.c:477: error: implicit declaration of function 'bh_uptodate_or_lock'
fs/nfs/blocklayout/blocklayout.c:478: error: implicit declaration of function 'bh_submit_read'
fs/nfs/blocklayout/blocklayout.c:486: error: implicit declaration of function 'free_buffer_head'
make[4]: *** [fs/nfs/blocklayout/blocklayout.o] Error 1

and more errors in drivers/md/


> ---
> fs/nfs/Kconfig | 18 ++++--------------
> 1 files changed, 4 insertions(+), 14 deletions(-)
>
> diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
> index 0d30613..dbcd821 100644
> --- a/fs/nfs/Kconfig
> +++ b/fs/nfs/Kconfig
> @@ -89,24 +89,14 @@ config PNFS_FILE_LAYOUT
> tristate
>
> config PNFS_BLOCK
> - tristate "Provide support for the pNFS Block Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
> + tristate
> depends on NFS_FS && NFS_V4_1 && BLK_DEV_DM
> - help
> - Say M here if you want your pNFS client to support the Block Layout Driver
> - (RFC 5663). Requires Multiple devices driver support (DM) and Device mapper
> - support (BLK_DEV_DM).
> -
> - If unsure, say N.
> + default m
>
> config PNFS_OBJLAYOUT
> - tristate "Provide support for the pNFS Objects Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
> + tristate
> depends on NFS_FS && NFS_V4_1 && SCSI_OSD_ULD
> - help
> - Say M here if you want your pNFS client to support the Objects Layout Driver.
> - Requires the SCSI osd initiator library (SCSI_OSD_INITIATOR) and
> - upper level driver (SCSI_OSD_ULD).
> -
> - If unsure, say N.
> + default m
>
> config ROOT_NFS
> bool "Root file system on NFS"
> --


---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

2011-08-11 21:53:45

by Boaz Harrosh

[permalink] [raw]
Subject: Re: [PATCH v2] pnfs: Automatically select blocks & objects layouts

On 08/11/2011 02:43 PM, Randy Dunlap wrote:
> On Thu, 11 Aug 2011 14:29:25 -0700 Boaz Harrosh wrote:
>
>>
>> Just like files-layout, blocks & objects layouts are part of the
>> NFS 4.1 protocol and should be automatically selected if NFS_4_1
>> is selected. The small problem is that these depend on other
>> Kernel support being present, while files only depends on NFS
>> itself.
>>
>> This patch removes from the user choice the presence of objects
>> and blocks layout. But makes sure these are selected only if
>> the depended subsystems are present in the Kernel.
>>
>> Signed-off-by: Boaz Harrosh <[email protected]>
>
> v1 applied & built OK for me.

Sorry about the mixup, my bad

v1 is the one you need for linux-3.1-rc1.

> v2 didn't apply to linux-3.1-rc1 cleanly, but I think I got it right.

v2 should apply cleanly ontop of linus/master as off:
1d229d5 Merge branch 'perf-urgent-for-linus'

Because of the other patch already submitted by Linus.

The result of the two patches should give you the same exact
Kconfig file. Just applied on two different tips.

Again sorry!
Boaz

> Maybe not. I got all of this from it:
>
> warning: (NFS_V4_1) selects MD which has unmet direct dependencies (BLOCK)
> CC [M] fs/nfs/blocklayout/blocklayout.o
> CC [M] fs/nfs/blocklayout/extents.o
> In file included from fs/nfs/blocklayout/blocklayout.h:35,
> from fs/nfs/blocklayout/extents.c:33:
> include/linux/device-mapper.h:49: warning: 'struct bio' declared inside parameter list
> include/linux/device-mapper.h:49: warning: its scope is only this definition or declaration, which is probably not what you want
> include/linux/device-mapper.h:51: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:63: warning: 'struct bio' declared inside parameter list
> include/linux/device-mapper.h:66: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:83: warning: 'struct bvec_merge_data' declared inside parameter list
> include/linux/device-mapper.h:95: warning: 'struct queue_limits' declared inside parameter list
> include/linux/device-mapper.h:300: warning: 'struct bio' declared inside parameter list
> include/linux/device-mapper.h:301: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:475: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:476: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:477: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:478: warning: 'struct request_queue' declared inside parameter list
> In file included from fs/nfs/blocklayout/blocklayout.h:35,
> from fs/nfs/blocklayout/blocklayout.c:40:
> include/linux/device-mapper.h:49: warning: 'struct bio' declared inside parameter list
> include/linux/device-mapper.h:49: warning: its scope is only this definition or declaration, which is probably not what you want
> include/linux/device-mapper.h:51: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:63: warning: 'struct bio' declared inside parameter list
> include/linux/device-mapper.h:66: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:83: warning: 'struct bvec_merge_data' declared inside parameter list
> include/linux/device-mapper.h:95: warning: 'struct queue_limits' declared inside parameter list
> include/linux/device-mapper.h:300: warning: 'struct bio' declared inside parameter list
> include/linux/device-mapper.h:301: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:475: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:476: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:477: warning: 'struct request' declared inside parameter list
> include/linux/device-mapper.h:478: warning: 'struct request_queue' declared inside parameter list
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_submit_bio':
> fs/nfs/blocklayout/blocklayout.c:132: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:133: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:133: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:136: error: implicit declaration of function 'submit_bio'
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_alloc_init_bio':
> fs/nfs/blocklayout/blocklayout.c:148: error: implicit declaration of function 'bio_alloc'
> fs/nfs/blocklayout/blocklayout.c:148: warning: assignment makes pointer from integer without a cast
> fs/nfs/blocklayout/blocklayout.c:152: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:153: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:154: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:155: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_add_page_to_bio':
> fs/nfs/blocklayout/blocklayout.c:171: error: implicit declaration of function 'bio_add_page'
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_read':
> fs/nfs/blocklayout/blocklayout.c:192: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:193: error: 'BIO_UPTODATE' undeclared (first use in this function)
> fs/nfs/blocklayout/blocklayout.c:193: error: (Each undeclared identifier is reported only once
> fs/nfs/blocklayout/blocklayout.c:193: error: for each function it appears in.)
> fs/nfs/blocklayout/blocklayout.c:193: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:193: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:194: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:194: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:198: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:200: error: decrement of pointer to unknown structure
> fs/nfs/blocklayout/blocklayout.c:200: error: arithmetic on pointer to an incomplete type
> fs/nfs/blocklayout/blocklayout.c:200: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:201: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:204: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:210: error: implicit declaration of function 'bio_put'
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_write_zero':
> fs/nfs/blocklayout/blocklayout.c:355: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:356: error: 'BIO_UPTODATE' undeclared (first use in this function)
> fs/nfs/blocklayout/blocklayout.c:356: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:356: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:357: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:357: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:361: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:363: error: decrement of pointer to unknown structure
> fs/nfs/blocklayout/blocklayout.c:363: error: arithmetic on pointer to an incomplete type
> fs/nfs/blocklayout/blocklayout.c:363: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:364: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:368: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c: In function 'bl_end_io_write':
> fs/nfs/blocklayout/blocklayout.c:381: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:382: error: 'BIO_UPTODATE' undeclared (first use in this function)
> fs/nfs/blocklayout/blocklayout.c:382: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:382: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c: In function 'map_block':
> fs/nfs/blocklayout/blocklayout.c:440: error: implicit declaration of function 'set_buffer_mapped'
> fs/nfs/blocklayout/blocklayout.c:441: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:442: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:445: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c:445: error: dereferencing pointer to incomplete type
> fs/nfs/blocklayout/blocklayout.c: In function 'init_page_for_write':
> fs/nfs/blocklayout/blocklayout.c:469: error: implicit declaration of function 'alloc_page_buffers'
> fs/nfs/blocklayout/blocklayout.c:469: warning: assignment makes pointer from integer without a cast
> fs/nfs/blocklayout/blocklayout.c:477: error: implicit declaration of function 'bh_uptodate_or_lock'
> fs/nfs/blocklayout/blocklayout.c:478: error: implicit declaration of function 'bh_submit_read'
> fs/nfs/blocklayout/blocklayout.c:486: error: implicit declaration of function 'free_buffer_head'
> make[4]: *** [fs/nfs/blocklayout/blocklayout.o] Error 1
>
> and more errors in drivers/md/
>
>
>> ---
>> fs/nfs/Kconfig | 18 ++++--------------
>> 1 files changed, 4 insertions(+), 14 deletions(-)
>>
>> diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
>> index 0d30613..dbcd821 100644
>> --- a/fs/nfs/Kconfig
>> +++ b/fs/nfs/Kconfig
>> @@ -89,24 +89,14 @@ config PNFS_FILE_LAYOUT
>> tristate
>>
>> config PNFS_BLOCK
>> - tristate "Provide support for the pNFS Block Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
>> + tristate
>> depends on NFS_FS && NFS_V4_1 && BLK_DEV_DM
>> - help
>> - Say M here if you want your pNFS client to support the Block Layout Driver
>> - (RFC 5663). Requires Multiple devices driver support (DM) and Device mapper
>> - support (BLK_DEV_DM).
>> -
>> - If unsure, say N.
>> + default m
>>
>> config PNFS_OBJLAYOUT
>> - tristate "Provide support for the pNFS Objects Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
>> + tristate
>> depends on NFS_FS && NFS_V4_1 && SCSI_OSD_ULD
>> - help
>> - Say M here if you want your pNFS client to support the Objects Layout Driver.
>> - Requires the SCSI osd initiator library (SCSI_OSD_INITIATOR) and
>> - upper level driver (SCSI_OSD_ULD).
>> -
>> - If unsure, say N.
>> + default m
>>
>> config ROOT_NFS
>> bool "Root file system on NFS"
>> --
>
>
> ---
> ~Randy
> *** Remember to use Documentation/SubmitChecklist when testing your code ***


2011-08-11 21:30:09

by Boaz Harrosh

[permalink] [raw]
Subject: [PATCH v2] pnfs: Automatically select blocks & objects layouts


Just like files-layout, blocks & objects layouts are part of the
NFS 4.1 protocol and should be automatically selected if NFS_4_1
is selected. The small problem is that these depend on other
Kernel support being present, while files only depends on NFS
itself.

This patch removes from the user choice the presence of objects
and blocks layout. But makes sure these are selected only if
the depended subsystems are present in the Kernel.

Signed-off-by: Boaz Harrosh <[email protected]>
---
fs/nfs/Kconfig | 18 ++++--------------
1 files changed, 4 insertions(+), 14 deletions(-)

diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
index 0d30613..dbcd821 100644
--- a/fs/nfs/Kconfig
+++ b/fs/nfs/Kconfig
@@ -89,24 +89,14 @@ config PNFS_FILE_LAYOUT
tristate

config PNFS_BLOCK
- tristate "Provide support for the pNFS Block Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
+ tristate
depends on NFS_FS && NFS_V4_1 && BLK_DEV_DM
- help
- Say M here if you want your pNFS client to support the Block Layout Driver
- (RFC 5663). Requires Multiple devices driver support (DM) and Device mapper
- support (BLK_DEV_DM).
-
- If unsure, say N.
+ default m

config PNFS_OBJLAYOUT
- tristate "Provide support for the pNFS Objects Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
+ tristate
depends on NFS_FS && NFS_V4_1 && SCSI_OSD_ULD
- help
- Say M here if you want your pNFS client to support the Objects Layout Driver.
- Requires the SCSI osd initiator library (SCSI_OSD_INITIATOR) and
- upper level driver (SCSI_OSD_ULD).
-
- If unsure, say N.
+ default m

config ROOT_NFS
bool "Root file system on NFS"
--
1.7.6



2011-08-11 18:45:16

by Boaz Harrosh

[permalink] [raw]
Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)

On 08/11/2011 03:11 AM, Benny Halevy wrote:
> On 2011-08-11 06:26, [email protected] wrote:
>
> My Ack, that's indeed closer to what I had queued in my tree originally and
> follows the approach we used for the objects layout driver.
>
> Benny
>

Yes but this breaks "Sorin"'s conspiracy to sneak into readhat the block
layout driver. Because it would be selected automatically if you set
CONFIG_NFS41.

Because for some perverted reason readhat wants pNFS-Files in, with
latest patches, but not the blocks or objects. I liked it that Blocks
tried to state: "pNFS is with blocks as well". Even Trond agreed that
it is logical this way.

You select CONFIG_NFS41 or not. objects and blocks are a part of that,
mandated by the protocol.

(I don't know that it was "Sorin"'s Idea, I meant the block guys)

I wish we can go back to the auto selection but fix the dependency
stuff. Surly it is possible.

Thanks
Boaz

2011-08-11 03:30:25

by Peng, Tao

[permalink] [raw]
Subject: RE: Linux 3.1-rc1 (nfs/pnfs and drivers/md)

Hi, Randy and Linus

> -----Original Message-----
> From: [email protected] [mailto:[email protected]]
> On Behalf Of Linus Torvalds
> Sent: Thursday, August 11, 2011 9:10 AM
> To: Randy Dunlap
> Cc: Peng Tao; Trond Myklebust; [email protected]; Linux Kernel Mailing List;
> [email protected]
> Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)
>
> On Wed, Aug 10, 2011 at 5:58 PM, Randy Dunlap <[email protected]> wrote:
> >
> > The blocklayout parts of NVS_V4_1 could depend on BLOCK. ?or all of NVS_V4_1
> > can depend on BLOCK.
>
> Absolutely. Replace "could" by "should".
>
> There's no way I'll take a patch to make NFS "select BLOCK". If the
> block layer isn't enabled, then NFS obviously shouldn't be doing any
> pnfs stuff.
I see. How about the following patch? We used to do like following for PNFS_BLOCK but it was changed during code review.


>From 833b59c1d24b43a9a4d47f777abab2cd9d041c68 Mon Sep 17 00:00:00 2001
From: Peng Tao <[email protected]>
Date: Wed, 10 Aug 2011 18:29:21 -0400
Subject: [PATCH] NFS41: make PNFS_BLOCK selectable

PNFS_BLOCK needs BLK_DEV_DM/MD, which is not a dependency for other
pnfs layout drivers. Seperate it out so others can still build when
BLK_DEV_DM/MD is not enabled.

Also change select to depends on to avoid build failures.

Reported-by: Randy Dunlap <[email protected]>
Signed-off-by: Peng Tao <[email protected]>
---
fs/nfs/Kconfig | 14 +++++++++-----
1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
index be02077..0d30613 100644
--- a/fs/nfs/Kconfig
+++ b/fs/nfs/Kconfig
@@ -79,12 +79,9 @@ config NFS_V4_1
depends on NFS_FS && NFS_V4 && EXPERIMENTAL
select SUNRPC_BACKCHANNEL
select PNFS_FILE_LAYOUT
- select PNFS_BLOCK
- select MD
- select BLK_DEV_DM
help
This option enables support for minor version 1 of the NFSv4 protocol
- (RFC 5661 and RFC 5663) in the kernel's NFS client.
+ (RFC 5661) in the kernel's NFS client.

If unsure, say N.

@@ -92,7 +89,14 @@ config PNFS_FILE_LAYOUT
tristate

config PNFS_BLOCK
- tristate
+ tristate "Provide support for the pNFS Block Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
+ depends on NFS_FS && NFS_V4_1 && BLK_DEV_DM
+ help
+ Say M here if you want your pNFS client to support the Block Layout Driver
+ (RFC 5663). Requires Multiple devices driver support (DM) and Device mapper
+ support (BLK_DEV_DM).
+
+ If unsure, say N.

config PNFS_OBJLAYOUT
tristate "Provide support for the pNFS Objects Layout Driver for NFSv4.1 pNFS (EXPERIMENTAL)"
--
1.7.4.2




2011-08-11 06:22:10

by Peng, Tao

[permalink] [raw]
Subject: RE: Linux 3.1-rc1 (nfs/pnfs and drivers/md)

> -----Original Message-----
> From: Christoph Hellwig [mailto:[email protected]]
> Sent: Thursday, August 11, 2011 2:07 PM
> To: Peng, Tao
> Cc: [email protected]; [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected]
> Subject: Re: Linux 3.1-rc1 (nfs/pnfs and drivers/md)
>
> Note that the object layout also effectively needs the block layer.
>
That is taken care of by PNFS_OBJLAYOUT depending on SCSI_OSD_ULD.

The dependency chain for PNFS_OBJLAYOUT on BLOCK is:
PNFS_OBJLAYOUT-> SCSI_OSD_ULD -> SCSI_OSD_INITIATOR -> SCSI-> BLOCK

With the patch, if CONFIG_BLOCK is not set, pnfs file layout can still be built.

Thanks,
Tao