mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
Merge branch 'for-next' of git://git.samba.org/sfrench/cifs-2.6
Pull CIFS fixes from Steve French: "Misc small cifs fixes" * 'for-next' of git://git.samba.org/sfrench/cifs-2.6: cifs: eliminate cifsERROR variable cifs: don't compare uniqueids in cifs_prime_dcache unless server inode numbers are in use cifs: fix double-free of "string" in cifs_parse_mount_options
This commit is contained in:
commit
769cb858c2
@ -37,7 +37,6 @@ void dump_smb(void *, int);
|
|||||||
#define CIFS_TIMER 0x04
|
#define CIFS_TIMER 0x04
|
||||||
|
|
||||||
extern int cifsFYI;
|
extern int cifsFYI;
|
||||||
extern int cifsERROR;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* debug ON
|
* debug ON
|
||||||
@ -64,10 +63,7 @@ do { \
|
|||||||
|
|
||||||
/* error event message: e.g., i/o error */
|
/* error event message: e.g., i/o error */
|
||||||
#define cifserror(fmt, ...) \
|
#define cifserror(fmt, ...) \
|
||||||
do { \
|
printk(KERN_ERR "CIFS VFS: " fmt "\n", ##__VA_ARGS__); \
|
||||||
if (cifsERROR) \
|
|
||||||
printk(KERN_ERR "CIFS VFS: " fmt "\n", ##__VA_ARGS__); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define cERROR(set, fmt, ...) \
|
#define cERROR(set, fmt, ...) \
|
||||||
do { \
|
do { \
|
||||||
|
@ -54,7 +54,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
int cifsFYI = 0;
|
int cifsFYI = 0;
|
||||||
int cifsERROR = 1;
|
|
||||||
int traceSMB = 0;
|
int traceSMB = 0;
|
||||||
bool enable_oplocks = true;
|
bool enable_oplocks = true;
|
||||||
unsigned int linuxExtEnabled = 1;
|
unsigned int linuxExtEnabled = 1;
|
||||||
|
@ -1624,14 +1624,11 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
|
|||||||
case Opt_unc:
|
case Opt_unc:
|
||||||
string = vol->UNC;
|
string = vol->UNC;
|
||||||
vol->UNC = match_strdup(args);
|
vol->UNC = match_strdup(args);
|
||||||
if (vol->UNC == NULL) {
|
if (vol->UNC == NULL)
|
||||||
kfree(string);
|
|
||||||
goto out_nomem;
|
goto out_nomem;
|
||||||
}
|
|
||||||
|
|
||||||
convert_delimiter(vol->UNC, '\\');
|
convert_delimiter(vol->UNC, '\\');
|
||||||
if (vol->UNC[0] != '\\' || vol->UNC[1] != '\\') {
|
if (vol->UNC[0] != '\\' || vol->UNC[1] != '\\') {
|
||||||
kfree(string);
|
|
||||||
printk(KERN_ERR "CIFS: UNC Path does not "
|
printk(KERN_ERR "CIFS: UNC Path does not "
|
||||||
"begin with // or \\\\\n");
|
"begin with // or \\\\\n");
|
||||||
goto cifs_parse_mount_err;
|
goto cifs_parse_mount_err;
|
||||||
@ -1687,10 +1684,8 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
|
|||||||
|
|
||||||
string = vol->prepath;
|
string = vol->prepath;
|
||||||
vol->prepath = match_strdup(args);
|
vol->prepath = match_strdup(args);
|
||||||
if (vol->prepath == NULL) {
|
if (vol->prepath == NULL)
|
||||||
kfree(string);
|
|
||||||
goto out_nomem;
|
goto out_nomem;
|
||||||
}
|
|
||||||
/* Compare old prefixpath= option to new one */
|
/* Compare old prefixpath= option to new one */
|
||||||
if (!string || strcmp(string, vol->prepath))
|
if (!string || strcmp(string, vol->prepath))
|
||||||
printk(KERN_WARNING "CIFS: the value of the "
|
printk(KERN_WARNING "CIFS: the value of the "
|
||||||
|
@ -78,6 +78,7 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
|
|||||||
struct dentry *dentry, *alias;
|
struct dentry *dentry, *alias;
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
struct super_block *sb = parent->d_inode->i_sb;
|
struct super_block *sb = parent->d_inode->i_sb;
|
||||||
|
struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
|
||||||
|
|
||||||
cFYI(1, "%s: for %s", __func__, name->name);
|
cFYI(1, "%s: for %s", __func__, name->name);
|
||||||
|
|
||||||
@ -91,10 +92,20 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
|
|||||||
int err;
|
int err;
|
||||||
|
|
||||||
inode = dentry->d_inode;
|
inode = dentry->d_inode;
|
||||||
/* update inode in place if i_ino didn't change */
|
if (inode) {
|
||||||
if (inode && CIFS_I(inode)->uniqueid == fattr->cf_uniqueid) {
|
/*
|
||||||
cifs_fattr_to_inode(inode, fattr);
|
* If we're generating inode numbers, then we don't
|
||||||
goto out;
|
* want to clobber the existing one with the one that
|
||||||
|
* the readdir code created.
|
||||||
|
*/
|
||||||
|
if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM))
|
||||||
|
fattr->cf_uniqueid = CIFS_I(inode)->uniqueid;
|
||||||
|
|
||||||
|
/* update inode in place if i_ino didn't change */
|
||||||
|
if (CIFS_I(inode)->uniqueid == fattr->cf_uniqueid) {
|
||||||
|
cifs_fattr_to_inode(inode, fattr);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
err = d_invalidate(dentry);
|
err = d_invalidate(dentry);
|
||||||
dput(dentry);
|
dput(dentry);
|
||||||
|
Loading…
Reference in New Issue
Block a user