aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Phillips <daniel@tux3.org>2014-02-17 00:39:45 +0900
committerDaniel Phillips <daniel@tux3.org>2014-02-17 00:39:45 +0900
commit706c8bf7ab11cec8a7b0666718d0c1e2d89c1b33 (patch)
tree08c9f539a2b55524ef28042d019af66b20a3e1a4
parentad1a6637bdd8a003d472b414ffb3f6652f4e3a6b (diff)
downloadlinux-tux3-706c8bf7ab11cec8a7b0666718d0c1e2d89c1b33.tar.gz
tux3: Factor out tux_assign_inum to assign inum separately
Refactoring towards choosing inode after creating directory entry. Expose an operation for choosing and setting inode number suitable for callers outside inode.c Signed-off-by: Daniel Phillips <d.phillips@partner.samsung.com> Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
-rw-r--r--fs/tux3/inode.c14
-rw-r--r--fs/tux3/namei.c4
2 files changed, 14 insertions, 4 deletions
diff --git a/fs/tux3/inode.c b/fs/tux3/inode.c
index de15b4362a1713..dcf22b03a14ba6 100644
--- a/fs/tux3/inode.c
+++ b/fs/tux3/inode.c
@@ -345,17 +345,23 @@ struct inode *tux_create_inode(struct inode *dir, struct tux_iattr *iattr,
dev_t rdev)
{
struct inode *inode;
- int err;
inode = tux_new_inode(dir, iattr, rdev);
if (!inode)
return ERR_PTR(-ENOMEM);
+ return inode;
+}
+
+int tux_assign_inum(struct inode *inode)
+{
+ int err;
+
err = alloc_inum(inode, &ialloc_linear, NULL);
if (err) {
make_bad_inode(inode);
iput(inode);
- return ERR_PTR(err);
+ return err;
}
#if 0
/*
@@ -368,7 +374,7 @@ struct inode *tux_create_inode(struct inode *dir, struct tux_iattr *iattr,
tux3_warn(tux_sb(dir->i_sb), "inode insert error: inum %Lx",
inum);
iput(inode);
- return ERR_PTR(-EIO);
+ return -EIO;
}
#endif
/*
@@ -378,7 +384,7 @@ struct inode *tux_create_inode(struct inode *dir, struct tux_iattr *iattr,
tux3_iattrdirty(inode);
tux3_mark_inode_dirty(inode);
- return inode;
+ return 0;
}
/* Allocate inode with specific inum allocation policy */
diff --git a/fs/tux3/namei.c b/fs/tux3/namei.c
index 4b77eab764ee7e..ed2489edc40868 100644
--- a/fs/tux3/namei.c
+++ b/fs/tux3/namei.c
@@ -48,6 +48,8 @@ static int tux_add_dirent(struct inode *dir, struct dentry *dentry,
return err;
}
+int tux_assign_inum(struct inode *inode);
+
static int __tux3_mknod(struct inode *dir, struct dentry *dentry,
struct tux_iattr *iattr, dev_t rdev)
{
@@ -64,6 +66,7 @@ static int __tux3_mknod(struct inode *dir, struct dentry *dentry,
inode = tux_create_inode(dir, iattr, rdev);
err = PTR_ERR(inode);
if (!IS_ERR(inode)) {
+ tux_assign_inum(inode); // !!! error handling
err = tux_add_dirent(dir, dentry, inode);
if (!err) {
unlock_new_inode(inode);
@@ -149,6 +152,7 @@ static int __tux3_symlink(struct inode *dir, struct dentry *dentry,
if (!IS_ERR(inode)) {
err = page_symlink(inode, symname, len);
if (!err) {
+ tux_assign_inum(inode); // !!! error handling
err = tux_add_dirent(dir, dentry, inode);
if (!err) {
unlock_new_inode(inode);