summaryrefslogtreecommitdiffstats
path: root/fs/cifs/inode.c
diff options
context:
space:
mode:
authorSteve French2008-02-15 22:06:08 +0100
committerSteve French2008-02-15 22:06:08 +0100
commit0a3abcf75bf391fec4e32356ab5ddb8f5d2e6b41 (patch)
treeb80b1d344ec24cad28b057ef803cebac9434be01 /fs/cifs/inode.c
parent[CIFS] factoring out common code in get_inode_info functions (diff)
parentLinux 2.6.25-rc2 (diff)
downloadkernel-qcow2-linux-0a3abcf75bf391fec4e32356ab5ddb8f5d2e6b41.tar.gz
kernel-qcow2-linux-0a3abcf75bf391fec4e32356ab5ddb8f5d2e6b41.tar.xz
kernel-qcow2-linux-0a3abcf75bf391fec4e32356ab5ddb8f5d2e6b41.zip
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'fs/cifs/inode.c')
-rw-r--r--fs/cifs/inode.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index e7cd392a796a..1d8aa0385ef7 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -566,10 +566,18 @@ static const struct inode_operations cifs_ipc_inode_ops = {
};
/* gets root inode */
-void cifs_read_inode(struct inode *inode)
+struct inode *cifs_iget(struct super_block *sb, unsigned long ino)
{
- int xid, rc;
+ int xid;
struct cifs_sb_info *cifs_sb;
+ struct inode *inode;
+ long rc;
+
+ inode = iget_locked(sb, ino);
+ if (!inode)
+ return ERR_PTR(-ENOMEM);
+ if (!(inode->i_state & I_NEW))
+ return inode;
cifs_sb = CIFS_SB(inode->i_sb);
xid = GetXid();
@@ -586,10 +594,18 @@ void cifs_read_inode(struct inode *inode)
inode->i_fop = &simple_dir_operations;
inode->i_uid = cifs_sb->mnt_uid;
inode->i_gid = cifs_sb->mnt_gid;
+ _FreeXid(xid);
+ iget_failed(inode);
+ return ERR_PTR(rc);
}
- /* can not call macro FreeXid here since in a void func */
+ unlock_new_inode(inode);
+
+ /* can not call macro FreeXid here since in a void func
+ * TODO: This is no longer true
+ */
_FreeXid(xid);
+ return inode;
}
int cifs_unlink(struct inode *inode, struct dentry *direntry)