-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 261819 b: refs/heads/master c: 155e752 h: refs/heads/master i: 261817: b117a26 261815: f826cea v: v3
- Loading branch information
Fred Isaman
authored and
Trond Myklebust
committed
Jul 31, 2011
1 parent
1011397
commit 5b9ccbc
Showing
6 changed files
with
279 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: db29c089094b2e686ebc9ed9f002be4a4f94b1f8 | ||
refs/heads/master: 155e7524f28fa374da041434085050693c3df45b |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# | ||
# Makefile for the pNFS block layout driver kernel module | ||
# | ||
obj-$(CONFIG_PNFS_BLOCK) += blocklayoutdriver.o | ||
blocklayoutdriver-objs := blocklayout.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
/* | ||
* linux/fs/nfs/blocklayout/blocklayout.c | ||
* | ||
* Module for the NFSv4.1 pNFS block layout driver. | ||
* | ||
* Copyright (c) 2006 The Regents of the University of Michigan. | ||
* All rights reserved. | ||
* | ||
* Andy Adamson <andros@citi.umich.edu> | ||
* Fred Isaman <iisaman@umich.edu> | ||
* | ||
* permission is granted to use, copy, create derivative works and | ||
* redistribute this software and such derivative works for any purpose, | ||
* so long as the name of the university of michigan is not used in | ||
* any advertising or publicity pertaining to the use or distribution | ||
* of this software without specific, written prior authorization. if | ||
* the above copyright notice or any other identification of the | ||
* university of michigan is included in any copy of any portion of | ||
* this software, then the disclaimer below must also be included. | ||
* | ||
* this software is provided as is, without representation from the | ||
* university of michigan as to its fitness for any purpose, and without | ||
* warranty by the university of michigan of any kind, either express | ||
* or implied, including without limitation the implied warranties of | ||
* merchantability and fitness for a particular purpose. the regents | ||
* of the university of michigan shall not be liable for any damages, | ||
* including special, indirect, incidental, or consequential damages, | ||
* with respect to any claim arising out or in connection with the use | ||
* of the software, even if it has been or is hereafter advised of the | ||
* possibility of such damages. | ||
*/ | ||
#include <linux/module.h> | ||
#include <linux/init.h> | ||
|
||
#include "blocklayout.h" | ||
|
||
#define NFSDBG_FACILITY NFSDBG_PNFS_LD | ||
|
||
MODULE_LICENSE("GPL"); | ||
MODULE_AUTHOR("Andy Adamson <andros@citi.umich.edu>"); | ||
MODULE_DESCRIPTION("The NFSv4.1 pNFS Block layout driver"); | ||
|
||
static enum pnfs_try_status | ||
bl_read_pagelist(struct nfs_read_data *rdata) | ||
{ | ||
return PNFS_NOT_ATTEMPTED; | ||
} | ||
|
||
static enum pnfs_try_status | ||
bl_write_pagelist(struct nfs_write_data *wdata, | ||
int sync) | ||
{ | ||
return PNFS_NOT_ATTEMPTED; | ||
} | ||
|
||
/* STUB */ | ||
static void | ||
release_extents(struct pnfs_block_layout *bl, | ||
struct pnfs_layout_range *range) | ||
{ | ||
return; | ||
} | ||
|
||
/* STUB */ | ||
static void | ||
release_inval_marks(struct pnfs_inval_markings *marks) | ||
{ | ||
return; | ||
} | ||
|
||
static void bl_free_layout_hdr(struct pnfs_layout_hdr *lo) | ||
{ | ||
struct pnfs_block_layout *bl = BLK_LO2EXT(lo); | ||
|
||
dprintk("%s enter\n", __func__); | ||
release_extents(bl, NULL); | ||
release_inval_marks(&bl->bl_inval); | ||
kfree(bl); | ||
} | ||
|
||
static struct pnfs_layout_hdr *bl_alloc_layout_hdr(struct inode *inode, | ||
gfp_t gfp_flags) | ||
{ | ||
struct pnfs_block_layout *bl; | ||
|
||
dprintk("%s enter\n", __func__); | ||
bl = kzalloc(sizeof(*bl), gfp_flags); | ||
if (!bl) | ||
return NULL; | ||
spin_lock_init(&bl->bl_ext_lock); | ||
INIT_LIST_HEAD(&bl->bl_extents[0]); | ||
INIT_LIST_HEAD(&bl->bl_extents[1]); | ||
INIT_LIST_HEAD(&bl->bl_commit); | ||
INIT_LIST_HEAD(&bl->bl_committing); | ||
bl->bl_count = 0; | ||
bl->bl_blocksize = NFS_SERVER(inode)->pnfs_blksize >> SECTOR_SHIFT; | ||
BL_INIT_INVAL_MARKS(&bl->bl_inval, bl->bl_blocksize); | ||
return &bl->bl_layout; | ||
} | ||
|
||
static void | ||
bl_free_lseg(struct pnfs_layout_segment *lseg) | ||
{ | ||
} | ||
|
||
static struct pnfs_layout_segment * | ||
bl_alloc_lseg(struct pnfs_layout_hdr *lo, | ||
struct nfs4_layoutget_res *lgr, gfp_t gfp_flags) | ||
{ | ||
return NULL; | ||
} | ||
|
||
static void | ||
bl_encode_layoutcommit(struct pnfs_layout_hdr *lo, struct xdr_stream *xdr, | ||
const struct nfs4_layoutcommit_args *arg) | ||
{ | ||
} | ||
|
||
static void | ||
bl_cleanup_layoutcommit(struct nfs4_layoutcommit_data *lcdata) | ||
{ | ||
} | ||
|
||
static int | ||
bl_set_layoutdriver(struct nfs_server *server, const struct nfs_fh *fh) | ||
{ | ||
dprintk("%s enter\n", __func__); | ||
return 0; | ||
} | ||
|
||
static int | ||
bl_clear_layoutdriver(struct nfs_server *server) | ||
{ | ||
dprintk("%s enter\n", __func__); | ||
return 0; | ||
} | ||
|
||
static struct pnfs_layoutdriver_type blocklayout_type = { | ||
.id = LAYOUT_BLOCK_VOLUME, | ||
.name = "LAYOUT_BLOCK_VOLUME", | ||
.read_pagelist = bl_read_pagelist, | ||
.write_pagelist = bl_write_pagelist, | ||
.alloc_layout_hdr = bl_alloc_layout_hdr, | ||
.free_layout_hdr = bl_free_layout_hdr, | ||
.alloc_lseg = bl_alloc_lseg, | ||
.free_lseg = bl_free_lseg, | ||
.encode_layoutcommit = bl_encode_layoutcommit, | ||
.cleanup_layoutcommit = bl_cleanup_layoutcommit, | ||
.set_layoutdriver = bl_set_layoutdriver, | ||
.clear_layoutdriver = bl_clear_layoutdriver, | ||
}; | ||
|
||
static int __init nfs4blocklayout_init(void) | ||
{ | ||
int ret; | ||
|
||
dprintk("%s: NFSv4 Block Layout Driver Registering...\n", __func__); | ||
|
||
ret = pnfs_register_layoutdriver(&blocklayout_type); | ||
return ret; | ||
} | ||
|
||
static void __exit nfs4blocklayout_exit(void) | ||
{ | ||
dprintk("%s: NFSv4 Block Layout Driver Unregistering...\n", | ||
__func__); | ||
|
||
pnfs_unregister_layoutdriver(&blocklayout_type); | ||
} | ||
|
||
MODULE_ALIAS("nfs-layouttype4-3"); | ||
|
||
module_init(nfs4blocklayout_init); | ||
module_exit(nfs4blocklayout_exit); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
/* | ||
* linux/fs/nfs/blocklayout/blocklayout.h | ||
* | ||
* Module for the NFSv4.1 pNFS block layout driver. | ||
* | ||
* Copyright (c) 2006 The Regents of the University of Michigan. | ||
* All rights reserved. | ||
* | ||
* Andy Adamson <andros@citi.umich.edu> | ||
* Fred Isaman <iisaman@umich.edu> | ||
* | ||
* permission is granted to use, copy, create derivative works and | ||
* redistribute this software and such derivative works for any purpose, | ||
* so long as the name of the university of michigan is not used in | ||
* any advertising or publicity pertaining to the use or distribution | ||
* of this software without specific, written prior authorization. if | ||
* the above copyright notice or any other identification of the | ||
* university of michigan is included in any copy of any portion of | ||
* this software, then the disclaimer below must also be included. | ||
* | ||
* this software is provided as is, without representation from the | ||
* university of michigan as to its fitness for any purpose, and without | ||
* warranty by the university of michigan of any kind, either express | ||
* or implied, including without limitation the implied warranties of | ||
* merchantability and fitness for a particular purpose. the regents | ||
* of the university of michigan shall not be liable for any damages, | ||
* including special, indirect, incidental, or consequential damages, | ||
* with respect to any claim arising out or in connection with the use | ||
* of the software, even if it has been or is hereafter advised of the | ||
* possibility of such damages. | ||
*/ | ||
#ifndef FS_NFS_NFS4BLOCKLAYOUT_H | ||
#define FS_NFS_NFS4BLOCKLAYOUT_H | ||
|
||
#include <linux/device-mapper.h> | ||
#include <linux/nfs_fs.h> | ||
#include "../pnfs.h" | ||
|
||
enum exstate4 { | ||
PNFS_BLOCK_READWRITE_DATA = 0, | ||
PNFS_BLOCK_READ_DATA = 1, | ||
PNFS_BLOCK_INVALID_DATA = 2, /* mapped, but data is invalid */ | ||
PNFS_BLOCK_NONE_DATA = 3 /* unmapped, it's a hole */ | ||
}; | ||
|
||
struct pnfs_inval_markings { | ||
/* STUB */ | ||
}; | ||
|
||
/* sector_t fields are all in 512-byte sectors */ | ||
struct pnfs_block_extent { | ||
struct kref be_refcnt; | ||
struct list_head be_node; /* link into lseg list */ | ||
struct nfs4_deviceid be_devid; /* FIXME: could use device cache instead */ | ||
struct block_device *be_mdev; | ||
sector_t be_f_offset; /* the starting offset in the file */ | ||
sector_t be_length; /* the size of the extent */ | ||
sector_t be_v_offset; /* the starting offset in the volume */ | ||
enum exstate4 be_state; /* the state of this extent */ | ||
struct pnfs_inval_markings *be_inval; /* tracks INVAL->RW transition */ | ||
}; | ||
|
||
static inline void | ||
BL_INIT_INVAL_MARKS(struct pnfs_inval_markings *marks, sector_t blocksize) | ||
{ | ||
/* STUB */ | ||
} | ||
|
||
enum extentclass4 { | ||
RW_EXTENT = 0, /* READWRTE and INVAL */ | ||
RO_EXTENT = 1, /* READ and NONE */ | ||
EXTENT_LISTS = 2, | ||
}; | ||
|
||
struct pnfs_block_layout { | ||
struct pnfs_layout_hdr bl_layout; | ||
struct pnfs_inval_markings bl_inval; /* tracks INVAL->RW transition */ | ||
spinlock_t bl_ext_lock; /* Protects list manipulation */ | ||
struct list_head bl_extents[EXTENT_LISTS]; /* R and RW extents */ | ||
struct list_head bl_commit; /* Needs layout commit */ | ||
struct list_head bl_committing; /* Layout committing */ | ||
unsigned int bl_count; /* entries in bl_commit */ | ||
sector_t bl_blocksize; /* Server blocksize in sectors */ | ||
}; | ||
|
||
static inline struct pnfs_block_layout *BLK_LO2EXT(struct pnfs_layout_hdr *lo) | ||
{ | ||
return container_of(lo, struct pnfs_block_layout, bl_layout); | ||
} | ||
|
||
#endif /* FS_NFS_NFS4BLOCKLAYOUT_H */ |