Commit 9654640d authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/sfrench/cifs-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
  [CIFS] One line missing from previous commit
  [CIFS] mtime bounces from local to remote when cifs nocmtime i_flags overwritten
  [CIFS] fix &&/& typo in cifs_setattr()
parents b5bf28cd 004c46b9
...@@ -91,8 +91,9 @@ cifs_read_super(struct super_block *sb, void *data, ...@@ -91,8 +91,9 @@ cifs_read_super(struct super_block *sb, void *data,
struct inode *inode; struct inode *inode;
struct cifs_sb_info *cifs_sb; struct cifs_sb_info *cifs_sb;
int rc = 0; int rc = 0;
sb->s_flags |= MS_NODIRATIME; /* and probably even noatime */ /* BB should we make this contingent on mount parm? */
sb->s_flags |= MS_NODIRATIME | MS_NOATIME;
sb->s_fs_info = kzalloc(sizeof(struct cifs_sb_info),GFP_KERNEL); sb->s_fs_info = kzalloc(sizeof(struct cifs_sb_info),GFP_KERNEL);
cifs_sb = CIFS_SB(sb); cifs_sb = CIFS_SB(sb);
if(cifs_sb == NULL) if(cifs_sb == NULL)
...@@ -258,7 +259,10 @@ cifs_alloc_inode(struct super_block *sb) ...@@ -258,7 +259,10 @@ cifs_alloc_inode(struct super_block *sb)
cifs_inode->clientCanCacheRead = FALSE; cifs_inode->clientCanCacheRead = FALSE;
cifs_inode->clientCanCacheAll = FALSE; cifs_inode->clientCanCacheAll = FALSE;
cifs_inode->vfs_inode.i_blkbits = 14; /* 2**14 = CIFS_MAX_MSGSIZE */ cifs_inode->vfs_inode.i_blkbits = 14; /* 2**14 = CIFS_MAX_MSGSIZE */
cifs_inode->vfs_inode.i_flags = S_NOATIME | S_NOCMTIME;
/* Can not set i_flags here - they get immediately overwritten
to zero by the VFS */
/* cifs_inode->vfs_inode.i_flags = S_NOATIME | S_NOCMTIME;*/
INIT_LIST_HEAD(&cifs_inode->openFileList); INIT_LIST_HEAD(&cifs_inode->openFileList);
return &cifs_inode->vfs_inode; return &cifs_inode->vfs_inode;
} }
...@@ -283,6 +287,7 @@ cifs_show_options(struct seq_file *s, struct vfsmount *m) ...@@ -283,6 +287,7 @@ cifs_show_options(struct seq_file *s, struct vfsmount *m)
if (cifs_sb) { if (cifs_sb) {
if (cifs_sb->tcon) { if (cifs_sb->tcon) {
/* BB add prepath to mount options displayed */
seq_printf(s, ",unc=%s", cifs_sb->tcon->treeName); seq_printf(s, ",unc=%s", cifs_sb->tcon->treeName);
if (cifs_sb->tcon->ses) { if (cifs_sb->tcon->ses) {
if (cifs_sb->tcon->ses->userName) if (cifs_sb->tcon->ses->userName)
......
...@@ -35,9 +35,11 @@ ...@@ -35,9 +35,11 @@
#define BAD_PROT 0xFFFF #define BAD_PROT 0xFFFF
/* SMB command codes */ /* SMB command codes */
/* Some commands have minimal (wct=0,bcc=0), or uninteresting, responses /*
(ie which include no useful data other than the SMB error code itself). * Some commands have minimal (wct=0,bcc=0), or uninteresting, responses
Knowing this helps avoid response buffer allocations and copy in some cases */ * (ie which include no useful data other than the SMB error code itself).
* Knowing this helps avoid response buffer allocations and copy in some cases
*/
#define SMB_COM_CREATE_DIRECTORY 0x00 /* trivial response */ #define SMB_COM_CREATE_DIRECTORY 0x00 /* trivial response */
#define SMB_COM_DELETE_DIRECTORY 0x01 /* trivial response */ #define SMB_COM_DELETE_DIRECTORY 0x01 /* trivial response */
#define SMB_COM_CLOSE 0x04 /* triv req/rsp, timestamp ignored */ #define SMB_COM_CLOSE 0x04 /* triv req/rsp, timestamp ignored */
......
...@@ -1014,8 +1014,9 @@ static ssize_t cifs_write(struct file *file, const char *write_data, ...@@ -1014,8 +1014,9 @@ static ssize_t cifs_write(struct file *file, const char *write_data,
/* since the write may have blocked check these pointers again */ /* since the write may have blocked check these pointers again */
if (file->f_path.dentry) { if (file->f_path.dentry) {
if (file->f_path.dentry->d_inode) { if (file->f_path.dentry->d_inode) {
file->f_path.dentry->d_inode->i_ctime = /*BB We could make this contingent on superblock ATIME flag too */
file->f_path.dentry->d_inode->i_mtime = CURRENT_TIME; /* file->f_path.dentry->d_inode->i_ctime =
file->f_path.dentry->d_inode->i_mtime = CURRENT_TIME;*/
if (total_written > 0) { if (total_written > 0) {
if (*poffset > file->f_path.dentry->d_inode->i_size) if (*poffset > file->f_path.dentry->d_inode->i_size)
i_size_write(file->f_path.dentry->d_inode, i_size_write(file->f_path.dentry->d_inode,
......
...@@ -90,6 +90,9 @@ int cifs_get_inode_info_unix(struct inode **pinode, ...@@ -90,6 +90,9 @@ int cifs_get_inode_info_unix(struct inode **pinode,
(*pinode)->i_ino = (*pinode)->i_ino =
(unsigned long)findData.UniqueId; (unsigned long)findData.UniqueId;
} /* note ino incremented to unique num in new_inode */ } /* note ino incremented to unique num in new_inode */
if(sb->s_flags & MS_NOATIME)
(*pinode)->i_flags |= S_NOATIME | S_NOCMTIME;
insert_inode_hash(*pinode); insert_inode_hash(*pinode);
} }
...@@ -421,6 +424,8 @@ int cifs_get_inode_info(struct inode **pinode, ...@@ -421,6 +424,8 @@ int cifs_get_inode_info(struct inode **pinode,
} else /* do we need cast or hash to ino? */ } else /* do we need cast or hash to ino? */
(*pinode)->i_ino = inode_num; (*pinode)->i_ino = inode_num;
} /* else ino incremented to unique num in new_inode*/ } /* else ino incremented to unique num in new_inode*/
if(sb->s_flags & MS_NOATIME)
(*pinode)->i_flags |= S_NOATIME | S_NOCMTIME;
insert_inode_hash(*pinode); insert_inode_hash(*pinode);
} }
inode = *pinode; inode = *pinode;
...@@ -1359,7 +1364,7 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs) ...@@ -1359,7 +1364,7 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
and this check ensures that we are not being called from and this check ensures that we are not being called from
sys_utimes in which case we ought to fail the call back to sys_utimes in which case we ought to fail the call back to
the user when the server rejects the call */ the user when the server rejects the call */
if((rc) && (attrs->ia_valid && if((rc) && (attrs->ia_valid &
(ATTR_MODE | ATTR_GID | ATTR_UID | ATTR_SIZE))) (ATTR_MODE | ATTR_GID | ATTR_UID | ATTR_SIZE)))
rc = 0; rc = 0;
} }
......
...@@ -77,7 +77,8 @@ cifs_hardlink(struct dentry *old_file, struct inode *inode, ...@@ -77,7 +77,8 @@ cifs_hardlink(struct dentry *old_file, struct inode *inode,
cifsInode = CIFS_I(old_file->d_inode); cifsInode = CIFS_I(old_file->d_inode);
if(rc == 0) { if(rc == 0) {
old_file->d_inode->i_nlink++; old_file->d_inode->i_nlink++;
old_file->d_inode->i_ctime = CURRENT_TIME; /* BB should we make this contingent on superblock flag NOATIME? */
/* old_file->d_inode->i_ctime = CURRENT_TIME;*/
/* parent dir timestamps will update from srv /* parent dir timestamps will update from srv
within a second, would it really be worth it within a second, would it really be worth it
to set the parent dir cifs inode time to zero to set the parent dir cifs inode time to zero
......
...@@ -83,6 +83,8 @@ static int construct_dentry(struct qstr *qstring, struct file *file, ...@@ -83,6 +83,8 @@ static int construct_dentry(struct qstr *qstring, struct file *file,
return rc; return rc;
rc = 1; rc = 1;
} }
if(file->f_path.dentry->d_sb->s_flags & MS_NOATIME)
(*ptmp_inode)->i_flags |= S_NOATIME | S_NOCMTIME;
} else { } else {
tmp_dentry = d_alloc(file->f_path.dentry, qstring); tmp_dentry = d_alloc(file->f_path.dentry, qstring);
if(tmp_dentry == NULL) { if(tmp_dentry == NULL) {
...@@ -98,6 +100,8 @@ static int construct_dentry(struct qstr *qstring, struct file *file, ...@@ -98,6 +100,8 @@ static int construct_dentry(struct qstr *qstring, struct file *file,
tmp_dentry->d_op = &cifs_dentry_ops; tmp_dentry->d_op = &cifs_dentry_ops;
if(*ptmp_inode == NULL) if(*ptmp_inode == NULL)
return rc; return rc;
if(file->f_path.dentry->d_sb->s_flags & MS_NOATIME)
(*ptmp_inode)->i_flags |= S_NOATIME | S_NOCMTIME;
rc = 2; rc = 2;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment