Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Code with comments #20

Open
wants to merge 78 commits into
base: caihui
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
5903535
Merge branch 'master' of https://github.com/timemath/hmfs
wulinzhu Sep 29, 2015
1f3c0a5
Merge branch 'goku'
wulinzhu Nov 3, 2015
aec41eb
Merge branch 'Billy'
Nov 6, 2015
5db3b38
Merge branch 'goku'
wulinzhu Nov 24, 2015
2820241
Add Makefile
wulinzhu Mar 11, 2016
3414728
Merge branch 'goku'
wulinzhu Mar 11, 2016
335bbb2
Merge branch 'master' of https://github.com/timemath/hmfs
wulinzhu Mar 11, 2016
8499701
FIXBUG
wulinzhu Mar 15, 2016
1e9ee08
Add Makefile
wulinzhu Mar 15, 2016
aa981c4
Merge branch 'goku'
wulinzhu Mar 15, 2016
62c9ed8
Merge branch 'master' of https://github.com/timemath/hmfs
wulinzhu Mar 15, 2016
e716e58
BUG REPORT:bug in gc: inconsistent valid blocks
wgtdkp Mar 21, 2016
575c38e
debuging scaffold
wgtdkp Mar 21, 2016
51421cb
FIXBUG:
wulinzhu Mar 22, 2016
b94eebd
FIXBUG: Bug in calculating end address of orphan block
wulinzhu Mar 22, 2016
836d14c
Update node.c
sjtutravel Apr 5, 2016
171ec35
Update node.c
sjtutravel Apr 5, 2016
5f398b7
Merge pull request #16 from timemath/jinweitong
sjtutravel Apr 5, 2016
10c7b04
Update super.c
sjtutravel Apr 5, 2016
5f6c28e
Merge pull request #17 from timemath/jinweitong
sjtutravel Apr 5, 2016
75e4b72
test
WeiyuCheng Apr 5, 2016
a4049f6
Merge pull request #18 from timemath/chengweiyu
WeiyuCheng Apr 5, 2016
d02d987
Update super.c
sjtutravel Apr 5, 2016
1355b2d
Update segment.c
Carolinecai Apr 6, 2016
4183395
comments for llseek and seek_hole_data
WeiyuCheng Apr 6, 2016
179e0bf
is_inline_inode
WeiyuCheng Apr 6, 2016
47085f5
Merge pull request #21 from timemath/chengweiyu
WeiyuCheng Apr 6, 2016
7b046e5
'segment'
Carolinecai Apr 7, 2016
5b63c1e
'43segmentc'
Carolinecai Apr 8, 2016
241f2cf
'recourtdirtynode'
Carolinecai Apr 8, 2016
44264db
'10functiondone'
Carolinecai Apr 8, 2016
0b20906
'15functiondone'
Carolinecai Apr 9, 2016
bcc604a
'thefirstversion'
Carolinecai Apr 9, 2016
f2180ed
cwy_first_ten_comments
WeiyuCheng Apr 10, 2016
a2047d3
Update hmfs.h
WeiyuCheng Apr 10, 2016
f8e9f2f
Merge pull request #24 from timemath/chengweiyu
WeiyuCheng Apr 10, 2016
a688d8f
my second ten comments
WeiyuCheng Apr 11, 2016
cc6a2ad
Merge pull request #25 from timemath/chengweiyu
WeiyuCheng Apr 11, 2016
6ebaa1d
Update node.c
sjtutravel Apr 12, 2016
cdbfba0
'1function'
Carolinecai Apr 14, 2016
1900e0d
'test'
Carolinecai Apr 14, 2016
41c3b51
'5function'
Carolinecai Apr 14, 2016
9877995
5 comments
WeiyuCheng Apr 16, 2016
314080a
'15functiondone'
Carolinecai Apr 16, 2016
8a8f585
5functions
WeiyuCheng Apr 17, 2016
99dd048
Merge pull request #26 from timemath/chengweiyu
WeiyuCheng Apr 17, 2016
ff7269f
'12functionsdone'
Carolinecai Apr 17, 2016
2cbe7f3
'30functiondone'
Carolinecai Apr 17, 2016
b09d43a
cwy second ten comments
WeiyuCheng Apr 17, 2016
38d0501
Update node.c
sjtutravel Apr 21, 2016
c90f4ac
Update data.c
sjtutravel Apr 21, 2016
e5a9082
Update dir.c
sjtutravel Apr 26, 2016
b25e7fa
Merge branch 'code_with_comments' of https://github.com/timemath/hmfs…
Carolinecai May 5, 2016
58b445c
'5functionfromgc'
Carolinecai May 5, 2016
71cacc0
manage file.c
WeiyuCheng May 7, 2016
f48ff1b
'32functiondone'
Carolinecai May 8, 2016
a4cdc7c
comments for namei.c
WeiyuCheng May 9, 2016
74a1287
comments for inode.c
WeiyuCheng May 9, 2016
07a0b5e
Update hash.c
sjtutravel May 9, 2016
e734785
Update debug.c
sjtutravel May 9, 2016
c35ebaa
Update symlink.c
sjtutravel May 11, 2016
d653a81
'checkpointdone'
Carolinecai May 12, 2016
0887ded
comments for xattr.c, acl.c and util.c
WeiyuCheng May 14, 2016
56ae51c
Merge branch 'chengweiyu' into code_with_comments
WeiyuCheng May 14, 2016
331fcaf
modify file.c
WeiyuCheng May 14, 2016
46c6461
modify comments for inode.c
WeiyuCheng May 14, 2016
01d9dc2
'recoverydone'
Carolinecai May 15, 2016
e251840
Merge branch 'code_with_comments' of https://github.com/timemath/hmfs…
Carolinecai May 15, 2016
c9cedd6
Update node.c
sjtutravel May 17, 2016
b8a7ed3
'3functionRemark'
Carolinecai May 22, 2016
e8f8ebd
Merge branch 'code_with_comments' of https://github.com/timemath/hmfs…
Carolinecai May 22, 2016
5747033
'recoverydoneremark'
Carolinecai May 22, 2016
b6bd9d7
Update dir.c
sjtutravel May 25, 2016
269e7db
Update hash.c
sjtutravel May 25, 2016
b8e86d2
Update super.c
sjtutravel May 25, 2016
2e10f54
Update debug.c
sjtutravel May 25, 2016
c94fc3c
modify comments for file.c
WeiyuCheng May 26, 2016
ac4f55b
modify comments for acl.c, inode.c, namei.c, util.c, xattr.c
WeiyuCheng May 26, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions fs/hmfs/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
ccflags-y += -DCONFIG_HMFS_DEBUG
ccflags-y += -DCONFIG_HMFS_DEBUG_GC
ccflags-y += -DCONFIG_HMFS_XATTR
#ccflags-y += -DCONFIG_HMFS_FAST_READ
ccflags-y += -DCONFIG_HMFS_ACL
ccflags-y += -DCONFIG_HMFS_DEBUG_RW_LOCK

obj-m += hmfs.o

hmfs-objs := super.o node.o inode.o checkpoint.o file.o data.o namei.o segment.o hash.o dir.o symlink.o gc.o recovery.o

hmfs-objs += debug.o
hmfs-objs += xattr.o
hmfs-objs += util.o
hmfs-objs += acl.o

all:
make -C /lib/modules/`uname -r`/build M=`pwd` modules
clean:
make -C /lib/modules/`uname -r`/build M=`pwd` clean
114 changes: 98 additions & 16 deletions fs/hmfs/acl.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@
#include "hmfs.h"
#include "xattr.h"
#include "acl.h"

/**
* @param[in] count 字节数
* @return 返回count个acl_entry对应的字节数
*/
static inline size_t hmfs_acl_size(int count)
{
if (count <= 4) {
Expand All @@ -29,7 +32,10 @@ static inline size_t hmfs_acl_size(int count)
(count - 4) * ACL_ENTRY_SIZE;
}
}

/**
* @param[in] size entry数
* @return 返回size个字节对应的访问控制表entry数
*/
static inline int hmfs_acl_count(size_t size)
{
ssize_t s;
Expand All @@ -46,7 +52,11 @@ static inline int hmfs_acl_count(size_t size)
return s / ACL_ENTRY_SIZE + 4;
}
}

/**
* 获取文件访问控制表的地址
* @param[in] inode 为该文件inode
* @return 成功则返回访问控制表地址,否则返回NULL
*/
static void *get_acl_block(struct inode *inode)
{
struct hmfs_sb_info *sbi = HMFS_I_SB(inode);
Expand All @@ -62,7 +72,12 @@ static void *get_acl_block(struct inode *inode)
return ADDR(sbi, acl_addr);
return NULL;
}

/**
* 读取访问控制表内容
* @param[in] base_addr 为要读取的ACL的起始地址
* @param[in] size 为要读取的字节数
* @return 返回值为指向存储了访问控制表内容的新建ACL表的指针
*/
static struct posix_acl *hmfs_read_acl(const char *base_addr, size_t size)
{
int i, count;
Expand Down Expand Up @@ -117,7 +132,12 @@ static struct posix_acl *hmfs_read_acl(const char *base_addr, size_t size)
posix_acl_release(acl);
return ERR_PTR(-EINVAL);
}

/**
* 获取文件访问控制表内容
* @param[in] inode 为该文件inode
* @param[in] type 定义获取类型为ACL_TYPE_ACCESS或是ACL_TYPE_DEFAULT,从而读取不同的内容
* @return 成功时返回指向存储获取到内容的ACL表的指针
*/
struct posix_acl *hmfs_get_acl(struct inode *inode, int type)
{
struct hmfs_acl_header *acl_header = NULL;
Expand Down Expand Up @@ -160,15 +180,27 @@ struct posix_acl *hmfs_get_acl(struct inode *inode, int type)

return acl;
}

/**
* 初始化@base_addr指向的acl块
* 修改其h_magic值为HMFS_X_BLOCK_TAG_ACL
* 修改a_version值为HMFS_ACL_VERSION
* @param[in] base_addr 指向acl块
*/
static void init_acl_block(void *base_addr)
{
struct hmfs_acl_header *acl_header = ACL_HEADER(base_addr);

XATTR_HDR(base_addr)->h_magic = cpu_to_le16(HMFS_X_BLOCK_TAG_ACL);
acl_header->a_version = cpu_to_le32(HMFS_ACL_VERSION);
}

/**
* 写文件访问控制表
* @param[in] inode 为该文件的inode
* @param[in] acl 指向的结构体存储了要写入文件ACL的值
* @param[in] size 用于存储写入后的ACL大小
* @param[in] type 定义ACL类型为ACL_TYPE_ACCESS还是ACL_TYPE_DEFAULT
* @return 成功则返回写入的访问控制表地址
*/
static void *hmfs_write_acl(struct inode *inode, const struct posix_acl *acl,
size_t *size, int type)
{
Expand Down Expand Up @@ -249,7 +281,13 @@ static void *hmfs_write_acl(struct inode *inode, const struct posix_acl *acl,
fail:
return ERR_PTR(-EINVAL);
}

/**
* 设置文件访问控制表
* @param[in] inode 为该文件的inode
* @param[in] acl 指向的结构体存储了要写入文件ACL的值
* @param[in] type 定义ACL类型为ACL_TYPE_ACCESS还是ACL_TYPE_DEFAULT
* @return 成功则返回0
*/
int hmfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
{
struct hmfs_inode_info *fi = HMFS_I(inode);
Expand Down Expand Up @@ -292,7 +330,12 @@ int hmfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
clear_inode_flag(fi, FI_ACL_MODE);
return error;
}

/**
* 复制访问控制表
* @param[in] acl 为要复制的访问控制表
* @param[in] flags 为复制时使用的gfp掩码
* @return 返回复制的访问控制表
*/
static struct posix_acl *hmfs_acl_clone(const struct posix_acl *acl,
gfp_t flags)
{
Expand All @@ -308,7 +351,10 @@ static struct posix_acl *hmfs_acl_clone(const struct posix_acl *acl,
}
return clone;
}

/**
* 创建新节点时修改文件acl
* @return 成功则返回0
*/
static int hmfs_acl_create_masq(struct posix_acl *acl, umode_t *mode_p)
{
struct posix_acl_entry *pa, *pe;
Expand Down Expand Up @@ -360,7 +406,14 @@ static int hmfs_acl_create_masq(struct posix_acl *acl, umode_t *mode_p)
*mode_p = (*mode_p & ~S_IRWXUGO) | mode;
return not_equiv;
}

/**
* 创建一个访问控制表
* @param[in] dir为参照的已有文件inode
* @param[in] mode对应文件类型
* @param[in] *default_acl指向dir文件的acl
* @param[in] *acl指向新建的文件acl
* @return 成功则返回0
*/
static int hmfs_acl_create(struct inode *dir, umode_t *mode,
struct posix_acl **default_acl, struct posix_acl **acl)
{
Expand Down Expand Up @@ -407,7 +460,12 @@ static int hmfs_acl_create(struct inode *dir, umode_t *mode,
posix_acl_release(p);
return -ENOMEM;
}

/**
* 初始化访问控制表
* @param[in] inode 为需要初始化的文件inode
* @param[in] dir 为参照的文件inode
* @return 成功则返回0
*/
int hmfs_init_acl(struct inode *inode, struct inode *dir)
{
struct posix_acl *default_acl = NULL, *acl = NULL;
Expand All @@ -430,7 +488,13 @@ int hmfs_init_acl(struct inode *inode, struct inode *dir)

return error;
}

/**
* 列出文件POSIX_ACL_XATTR_ACCESS属性值
* @param[in] dentry用于索引超级块
* @param[in] list用于存储字符串
* @param[in] list_size为list存储的最大空间
* @return 返回属性值的字节长度
*/
size_t hmfs_acl_access_xattr_list(struct dentry *dentry, char *list,
size_t list_size, const char *name, size_t name_len,
int type)
Expand All @@ -444,7 +508,13 @@ size_t hmfs_acl_access_xattr_list(struct dentry *dentry, char *list,
memcpy(list, POSIX_ACL_XATTR_ACCESS, size);
return size;
}

/**
* 列出文件POSIX_ACL_XATTR_DEFAULT属性值
* @param[in] dentry 用于索引超级块
* @param[in] list 用于存储字符串
* @param[in] list_size 为list存储的最大空间
* @return 返回属性值的字节长度
*/
size_t hmfs_acl_default_xattr_list(struct dentry *dentry, char *list,
size_t list_size, const char *name, size_t name_len,
int type)
Expand All @@ -458,7 +528,13 @@ size_t hmfs_acl_default_xattr_list(struct dentry *dentry, char *list,
memcpy(list, POSIX_ACL_XATTR_DEFAULT, size);
return size;
}

/**
* 获取文件acl扩展属性
* @param[in] dentry 为该文件目录项
* @param[in] buffer 为属性复制到的目标缓冲区地址
* @param[in] size 为目标缓冲区最大大小
* @return 成功则返回acl属性字节长度
*/
int hmfs_acl_xattr_get(struct dentry *dentry, const char *name, void *buffer,
size_t size, int type)
{
Expand All @@ -483,7 +559,13 @@ int hmfs_acl_xattr_get(struct dentry *dentry, const char *name, void *buffer,

return error;
}

/**
* 设置文件acl扩展属性
* @param[in] dentry 为该文件目录项
* @param[in] value 为要设置的属性值
* @param[in] size 为要设置的属性值字节数
* @return 成功则返回0
*/
static int hmfs_acl_xattr_set(struct dentry *dentry, const char *name,
const void *value, size_t size, int flags, int type)
{
Expand Down
11 changes: 11 additions & 0 deletions fs/hmfs/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash

if [ "$1" == "hmfs" ]
then
insmod ./hmfs.ko
sudo mount -t hmfs -o physaddr=0x4B000000,init=100M none ~/mount_hmfs/
elif [ "$1" == "nohmfs" ]
then
umount ~/mount_hmfs
rmmod hmfs
fi
Loading