Re: [PATCH 4/4] cifs: remove /proc/fs/cifs/Experimental

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 7 Dec 2010 10:21:11 -0600
Steve French <smfrench@xxxxxxxxx> wrote:

> The issue of how to prevent a page from being modified as it is
> written out (due to signing in our case) has been discussed on lkml a
> few times (e.g. T10 block devices).   We should hold off on changing
> this until we have a way of handling the case of:   we calculate the
> signature, but just before the page in the cache is remodified, we
> send it with the wrong signature ... obviously if we reissue the write
> we are fine (the data is fine) but there may be better ways to lock
> the page (and some suggestions have been made on lkml for similar
> sounding problems).
> 

This behavior has been "Experimental" for years. At what point do we
remove this kludge? Who in their right mind is going to turn on a
switch called "Experimental" to enable this? As a user, I'd certainly
be reticent to do so. It's not clear what turning on "Experimental"
would give me.

If you think this behavior deserves to be switchable then let's put a
real usable switch on it. I don't think it ought to be hidden
as /proc/fs/cifs/Experimental. Perhaps a module parameter for
this would be more appropriate?

If so what would you name such a switch?

> On Tue, Dec 7, 2010 at 10:13 AM, Jeff Layton <jlayton@xxxxxxxxx> wrote:
> > On Tue,  7 Dec 2010 09:23:55 -0500
> > Jeff Layton <jlayton@xxxxxxxxxx> wrote:
> >
> >> This flag only affects a couple of places in the write codepath, and
> >> it's not entirely clear to me what the purpose of it is. I've never
> >> known anyone (even developers) to use this knob, so let's remove it.
> >>
> >> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
> >> ---
> >>  fs/cifs/cifs_debug.c |   42 ------------------------------------------
> >>  fs/cifs/cifsfs.c     |    1 -
> >>  fs/cifs/cifsglob.h   |    1 -
> >>  fs/cifs/file.c       |    6 +++---
> >>  4 files changed, 3 insertions(+), 47 deletions(-)
> >>
> >> diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c
> >> index 103ab8b..04eecb2 100644
> >> --- a/fs/cifs/cifs_debug.c
> >> +++ b/fs/cifs/cifs_debug.c
> >> @@ -425,7 +425,6 @@ static const struct file_operations cifs_lookup_cache_proc_fops;
> >>  static const struct file_operations traceSMB_proc_fops;
> >>  static const struct file_operations cifs_multiuser_mount_proc_fops;
> >>  static const struct file_operations cifs_security_flags_proc_fops;
> >> -static const struct file_operations cifs_experimental_proc_fops;
> >>  static const struct file_operations cifs_linux_ext_proc_fops;
> >>
> >>  void
> >> @@ -443,8 +442,6 @@ cifs_proc_init(void)
> >>       proc_create("cifsFYI", 0, proc_fs_cifs, &cifsFYI_proc_fops);
> >>       proc_create("traceSMB", 0, proc_fs_cifs, &traceSMB_proc_fops);
> >>       proc_create("OplockEnabled", 0, proc_fs_cifs, &cifs_oplock_proc_fops);
> >> -     proc_create("Experimental", 0, proc_fs_cifs,
> >> -                 &cifs_experimental_proc_fops);
> >>       proc_create("LinuxExtensionsEnabled", 0, proc_fs_cifs,
> >>                   &cifs_linux_ext_proc_fops);
> >>       proc_create("MultiuserMount", 0, proc_fs_cifs,
> >> @@ -552,45 +549,6 @@ static const struct file_operations cifs_oplock_proc_fops = {
> >>       .write          = cifs_oplock_proc_write,
> >>  };
> >>
> >> -static int cifs_experimental_proc_show(struct seq_file *m, void *v)
> >> -{
> >> -     seq_printf(m, "%d\n", experimEnabled);
> >> -     return 0;
> >> -}
> >> -
> >> -static int cifs_experimental_proc_open(struct inode *inode, struct file *file)
> >> -{
> >> -     return single_open(file, cifs_experimental_proc_show, NULL);
> >> -}
> >> -
> >> -static ssize_t cifs_experimental_proc_write(struct file *file,
> >> -             const char __user *buffer, size_t count, loff_t *ppos)
> >> -{
> >> -     char c;
> >> -     int rc;
> >> -
> >> -     rc = get_user(c, buffer);
> >> -     if (rc)
> >> -             return rc;
> >> -     if (c == '0' || c == 'n' || c == 'N')
> >> -             experimEnabled = 0;
> >> -     else if (c == '1' || c == 'y' || c == 'Y')
> >> -             experimEnabled = 1;
> >> -     else if (c == '2')
> >> -             experimEnabled = 2;
> >> -
> >> -     return count;
> >> -}
> >> -
> >> -static const struct file_operations cifs_experimental_proc_fops = {
> >> -     .owner          = THIS_MODULE,
> >> -     .open           = cifs_experimental_proc_open,
> >> -     .read           = seq_read,
> >> -     .llseek         = seq_lseek,
> >> -     .release        = single_release,
> >> -     .write          = cifs_experimental_proc_write,
> >> -};
> >> -
> >>  static int cifs_linux_ext_proc_show(struct seq_file *m, void *v)
> >>  {
> >>       seq_printf(m, "%d\n", linuxExtEnabled);
> >> diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
> >> index 48582b7..932a347 100644
> >> --- a/fs/cifs/cifsfs.c
> >> +++ b/fs/cifs/cifsfs.c
> >> @@ -53,7 +53,6 @@ int cifsFYI = 0;
> >>  int cifsERROR = 1;
> >>  int traceSMB = 0;
> >>  unsigned int oplockEnabled = 1;
> >> -unsigned int experimEnabled = 0;
> >>  unsigned int linuxExtEnabled = 1;
> >>  unsigned int lookupCacheEnabled = 1;
> >>  unsigned int multiuser_mount = 0;
> >> diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
> >> index 37fb246..5ab6701 100644
> >> --- a/fs/cifs/cifsglob.h
> >> +++ b/fs/cifs/cifsglob.h
> >> @@ -777,7 +777,6 @@ GLOBAL_EXTERN unsigned int multiuser_mount; /* if enabled allows new sessions
> >>                               have the uid/password or Kerberos credential
> >>                               or equivalent for current user */
> >>  GLOBAL_EXTERN unsigned int oplockEnabled;
> >> -GLOBAL_EXTERN unsigned int experimEnabled;
> >>  GLOBAL_EXTERN unsigned int lookupCacheEnabled;
> >>  GLOBAL_EXTERN unsigned int global_secflags;  /* if on, session setup sent
> >>                               with more secure ntlmssp2 challenge/resp */
> >> diff --git a/fs/cifs/file.c b/fs/cifs/file.c
> >> index 5a28660..5f6907e 100644
> >> --- a/fs/cifs/file.c
> >> +++ b/fs/cifs/file.c
> >> @@ -1054,10 +1054,10 @@ static ssize_t cifs_write(struct cifsFileInfo *open_file,
> >>                               if (rc != 0)
> >>                                       break;
> >>                       }
> >> -                     if (experimEnabled || (pTcon->ses->server &&
> >> +                     if (pTcon->ses->server &&
> >>                               ((pTcon->ses->server->secMode &
> >>                               (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED))
> >> -                             == 0))) {
> >> +                             == 0)) {
> >>                               struct kvec iov[2];
> >>                               unsigned int len;
> >>
> >> @@ -1319,7 +1319,7 @@ static int cifs_writepages(struct address_space *mapping,
> >>       }
> >>
> >>       tcon = tlink_tcon(open_file->tlink);
> >> -     if (!experimEnabled && tcon->ses->server->secMode &
> >> +     if (tcon->ses->server->secMode &
> >>                       (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED)) {
> >>               cifsFileInfo_put(open_file);
> >>               kfree(iov);
> >
> > Just noticed that this misses removing the de-registration of
> > "Experimental", so it'll need to be respun.
> >
> > --
> > Jeff Layton <jlayton@xxxxxxxxx>
> >
> 
> 
> 


-- 
Jeff Layton <jlayton@xxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux