git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
fs
/
cifs
/
link.c
diff --git
a/fs/cifs/link.c
b/fs/cifs/link.c
index
bde0fab
..
2ec99f8
100644
(file)
--- a/
fs/cifs/link.c
+++ b/
fs/cifs/link.c
@@
-48,10
+48,8
@@
cifs_hardlink(struct dentry *old_file, struct inode *inode,
/* No need to check for cross device links since server will do that
BB note DFS case in future though (when we may have to check) */
/* No need to check for cross device links since server will do that
BB note DFS case in future though (when we may have to check) */
- down(&inode->i_sb->s_vfs_rename_sem);
fromName = build_path_from_dentry(old_file);
toName = build_path_from_dentry(direntry);
fromName = build_path_from_dentry(old_file);
toName = build_path_from_dentry(direntry);
- up(&inode->i_sb->s_vfs_rename_sem);
if((fromName == NULL) || (toName == NULL)) {
rc = -ENOMEM;
goto cifs_hl_exit;
if((fromName == NULL) || (toName == NULL)) {
rc = -ENOMEM;
goto cifs_hl_exit;
@@
-67,7
+65,7
@@
cifs_hardlink(struct dentry *old_file, struct inode *inode,
cifs_sb_target->local_nls,
cifs_sb_target->mnt_cifs_flags &
CIFS_MOUNT_MAP_SPECIAL_CHR);
cifs_sb_target->local_nls,
cifs_sb_target->mnt_cifs_flags &
CIFS_MOUNT_MAP_SPECIAL_CHR);
- if(
rc == -EIO
)
+ if(
(rc == -EIO) || (rc == -EINVAL)
)
rc = -EOPNOTSUPP;
}
rc = -EOPNOTSUPP;
}
@@
-84,15
+82,13
@@
cifs_hardlink(struct dentry *old_file, struct inode *inode,
cifsInode->time = 0; /* will force revalidate to go get info when needed */
cifs_hl_exit:
cifsInode->time = 0; /* will force revalidate to go get info when needed */
cifs_hl_exit:
- if (fromName)
- kfree(fromName);
- if (toName)
- kfree(toName);
+ kfree(fromName);
+ kfree(toName);
FreeXid(xid);
return rc;
}
FreeXid(xid);
return rc;
}
-int
+void *
cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
{
struct inode *inode = direntry->d_inode;
cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
{
struct inode *inode = direntry->d_inode;
@@
-105,9
+101,7
@@
cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
xid = GetXid();
xid = GetXid();
- down(&direntry->d_sb->s_vfs_rename_sem);
full_path = build_path_from_dentry(direntry);
full_path = build_path_from_dentry(direntry);
- up(&direntry->d_sb->s_vfs_rename_sem);
if (!full_path)
goto out_no_free;
if (!full_path)
goto out_no_free;
@@
-148,7
+142,7
@@
out:
out_no_free:
FreeXid(xid);
nd_set_link(nd, target_path);
out_no_free:
FreeXid(xid);
nd_set_link(nd, target_path);
- return
0;
+ return
NULL; /* No cookie */
}
int
}
int
@@
-166,9
+160,7
@@
cifs_symlink(struct inode *inode, struct dentry *direntry, const char *symname)
cifs_sb = CIFS_SB(inode->i_sb);
pTcon = cifs_sb->tcon;
cifs_sb = CIFS_SB(inode->i_sb);
pTcon = cifs_sb->tcon;
- down(&inode->i_sb->s_vfs_rename_sem);
full_path = build_path_from_dentry(direntry);
full_path = build_path_from_dentry(direntry);
- up(&inode->i_sb->s_vfs_rename_sem);
if(full_path == NULL) {
FreeXid(xid);
if(full_path == NULL) {
FreeXid(xid);
@@
-198,13
+190,15
@@
cifs_symlink(struct inode *inode, struct dentry *direntry, const char *symname)
("Create symlink worked but get_inode_info failed with rc = %d ",
rc));
} else {
("Create symlink worked but get_inode_info failed with rc = %d ",
rc));
} else {
- direntry->d_op = &cifs_dentry_ops;
+ if (pTcon->nocase)
+ direntry->d_op = &cifs_ci_dentry_ops;
+ else
+ direntry->d_op = &cifs_dentry_ops;
d_instantiate(direntry, newinode);
}
}
d_instantiate(direntry, newinode);
}
}
- if (full_path)
- kfree(full_path);
+ kfree(full_path);
FreeXid(xid);
return rc;
}
FreeXid(xid);
return rc;
}
@@
-232,9
+226,9
@@
cifs_readlink(struct dentry *direntry, char __user *pBuffer, int buflen)
/* BB would it be safe against deadlock to grab this sem
even though rename itself grabs the sem and calls lookup? */
/* BB would it be safe against deadlock to grab this sem
even though rename itself grabs the sem and calls lookup? */
-/*
down(&inode->i_sb->s_vfs_rename_sem
);*/
+/*
mutex_lock(&inode->i_sb->s_vfs_rename_mutex
);*/
full_path = build_path_from_dentry(direntry);
full_path = build_path_from_dentry(direntry);
-/*
up(&inode->i_sb->s_vfs_rename_sem
);*/
+/*
mutex_unlock(&inode->i_sb->s_vfs_rename_mutex
);*/
if(full_path == NULL) {
FreeXid(xid);
if(full_path == NULL) {
FreeXid(xid);
@@
-250,8
+244,7
@@
cifs_readlink(struct dentry *direntry, char __user *pBuffer, int buflen)
len = buflen;
tmpbuffer = kmalloc(len,GFP_KERNEL);
if(tmpbuffer == NULL) {
len = buflen;
tmpbuffer = kmalloc(len,GFP_KERNEL);
if(tmpbuffer == NULL) {
- if (full_path)
- kfree(full_path);
+ kfree(full_path);
FreeXid(xid);
return -ENOMEM;
}
FreeXid(xid);
return -ENOMEM;
}
@@
-300,8
+293,7
@@
cifs_readlink(struct dentry *direntry, char __user *pBuffer, int buflen)
strncpy(tmpbuffer, referrals, len-1);
}
}
strncpy(tmpbuffer, referrals, len-1);
}
}
- if(referrals)
- kfree(referrals);
+ kfree(referrals);
kfree(tmp_path);
}
/* BB add code like else decode referrals then memcpy to
kfree(tmp_path);
}
/* BB add code like else decode referrals then memcpy to
@@
-320,17
+312,13
@@
cifs_readlink(struct dentry *direntry, char __user *pBuffer, int buflen)
rc));
}
rc));
}
- if (tmpbuffer) {
- kfree(tmpbuffer);
- }
- if (full_path) {
- kfree(full_path);
- }
+ kfree(tmpbuffer);
+ kfree(full_path);
FreeXid(xid);
return rc;
}
FreeXid(xid);
return rc;
}
-void cifs_put_link(struct dentry *direntry, struct nameidata *nd)
+void cifs_put_link(struct dentry *direntry, struct nameidata *nd
, void *cookie
)
{
char *p = nd_get_link(nd);
if (!IS_ERR(p))
{
char *p = nd_get_link(nd);
if (!IS_ERR(p))