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:
Linus Torvalds 2012-12-21 17:09:07 -08:00
commit 769cb858c2
4 changed files with 18 additions and 17 deletions

View File

@ -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 { \

View File

@ -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;

View File

@ -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 "

View File

@ -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);