]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 18 Aug 2010 16:35:08 +0000 (09:35 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 18 Aug 2010 16:35:08 +0000 (09:35 -0700)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
  fs: brlock vfsmount_lock
  fs: scale files_lock
  lglock: introduce special lglock and brlock spin locks
  tty: fix fu_list abuse
  fs: cleanup files_lock locking
  fs: remove extra lookup in __lookup_hash
  fs: fs_struct rwlock to spinlock
  apparmor: use task path helpers
  fs: dentry allocation consolidation
  fs: fix do_lookup false negative
  mbcache: Limit the maximum number of cache entries
  hostfs ->follow_link() braino
  hostfs: dumb (and usually harmless) tpyo - strncpy instead of strlcpy
  remove SWRITE* I/O types
  kill BH_Ordered flag
  vfs: update ctime when changing the file's permission by setfacl
  cramfs: only unlock new inodes
  fix reiserfs_evict_inode end_writeback second call

1  2 
fs/exec.c
fs/nilfs2/super.c

diff --combined fs/exec.c
index 05c7d6b84df7c770f07aa7148b9f47e6aacd060f,5adab2c93ecaa621525892b607c9a291ce6bbe80..2d9455282744bce582e48e0ecec4f4a6d332a28c
+++ b/fs/exec.c
@@@ -361,13 -361,13 +361,13 @@@ err
  /*
   * count() counts the number of strings in array ARGV.
   */
 -static int count(char __user * __user * argv, int max)
 +static int count(const char __user * const __user * argv, int max)
  {
        int i = 0;
  
        if (argv != NULL) {
                for (;;) {
 -                      char __user * p;
 +                      const char __user * p;
  
                        if (get_user(p, argv))
                                return -EFAULT;
   * processes's memory to the new process's stack.  The call to get_user_pages()
   * ensures the destination page is created and not swapped out.
   */
 -static int copy_strings(int argc, char __user * __user * argv,
 +static int copy_strings(int argc, const char __user *const __user *argv,
                        struct linux_binprm *bprm)
  {
        struct page *kmapped_page = NULL;
        int ret;
  
        while (argc-- > 0) {
 -              char __user *str;
 +              const char __user *str;
                int len;
                unsigned long pos;
  
@@@ -470,13 -470,12 +470,13 @@@ out
  /*
   * Like copy_strings, but get argv and its values from kernel memory.
   */
 -int copy_strings_kernel(int argc,char ** argv, struct linux_binprm *bprm)
 +int copy_strings_kernel(int argc, const char *const *argv,
 +                      struct linux_binprm *bprm)
  {
        int r;
        mm_segment_t oldfs = get_fs();
        set_fs(KERNEL_DS);
 -      r = copy_strings(argc, (char __user * __user *)argv, bprm);
 +      r = copy_strings(argc, (const char __user *const  __user *)argv, bprm);
        set_fs(oldfs);
        return r;
  }
@@@ -998,7 -997,7 +998,7 @@@ EXPORT_SYMBOL(flush_old_exec)
  void setup_new_exec(struct linux_binprm * bprm)
  {
        int i, ch;
 -      char * name;
 +      const char *name;
        char tcomm[sizeof(current->comm)];
  
        arch_pick_mmap_layout(current->mm);
@@@ -1118,7 -1117,7 +1118,7 @@@ int check_unsafe_exec(struct linux_binp
        bprm->unsafe = tracehook_unsafe_exec(p);
  
        n_fs = 1;
-       write_lock(&p->fs->lock);
+       spin_lock(&p->fs->lock);
        rcu_read_lock();
        for (t = next_thread(p); t != p; t = next_thread(t)) {
                if (t->fs == p->fs)
                        res = 1;
                }
        }
-       write_unlock(&p->fs->lock);
+       spin_unlock(&p->fs->lock);
  
        return res;
  }
@@@ -1317,9 -1316,9 +1317,9 @@@ EXPORT_SYMBOL(search_binary_handler)
  /*
   * sys_execve() executes a new program.
   */
 -int do_execve(char * filename,
 -      char __user *__user *argv,
 -      char __user *__user *envp,
 +int do_execve(const char * filename,
 +      const char __user *const __user *argv,
 +      const char __user *const __user *envp,
        struct pt_regs * regs)
  {
        struct linux_binprm *bprm;
diff --combined fs/nilfs2/super.c
index bee60c04109a29b61d9cf4baffece2d18f7f75c3,68345430fb48dbf390d0bb52ae3ab4d0e2f6aaa3..922263393c765664f6b5598f4c144093ec9e582c
@@@ -175,24 -175,24 +175,24 @@@ static int nilfs_sync_super(struct nilf
  {
        struct the_nilfs *nilfs = sbi->s_nilfs;
        int err;
-       int barrier_done = 0;
  
-       if (nilfs_test_opt(sbi, BARRIER)) {
-               set_buffer_ordered(nilfs->ns_sbh[0]);
-               barrier_done = 1;
-       }
   retry:
        set_buffer_dirty(nilfs->ns_sbh[0]);
-       err = sync_dirty_buffer(nilfs->ns_sbh[0]);
-       if (err == -EOPNOTSUPP && barrier_done) {
-               nilfs_warning(sbi->s_super, __func__,
-                             "barrier-based sync failed. "
-                             "disabling barriers\n");
-               nilfs_clear_opt(sbi, BARRIER);
-               barrier_done = 0;
-               clear_buffer_ordered(nilfs->ns_sbh[0]);
-               goto retry;
+       if (nilfs_test_opt(sbi, BARRIER)) {
+               err = __sync_dirty_buffer(nilfs->ns_sbh[0],
+                                         WRITE_SYNC | WRITE_BARRIER);
+               if (err == -EOPNOTSUPP) {
+                       nilfs_warning(sbi->s_super, __func__,
+                                     "barrier-based sync failed. "
+                                     "disabling barriers\n");
+                       nilfs_clear_opt(sbi, BARRIER);
+                       goto retry;
+               }
+       } else {
+               err = sync_dirty_buffer(nilfs->ns_sbh[0]);
        }
        if (unlikely(err)) {
                printk(KERN_ERR
                       "NILFS: unable to write superblock (err=%d)\n", err);
@@@ -400,10 -400,9 +400,10 @@@ int nilfs_attach_checkpoint(struct nilf
        list_add(&sbi->s_list, &nilfs->ns_supers);
        up_write(&nilfs->ns_super_sem);
  
 +      err = -ENOMEM;
        sbi->s_ifile = nilfs_ifile_new(sbi, nilfs->ns_inode_size);
        if (!sbi->s_ifile)
 -              return -ENOMEM;
 +              goto delist;
  
        down_read(&nilfs->ns_segctor_sem);
        err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, cno, 0, &raw_cp,
        nilfs_mdt_destroy(sbi->s_ifile);
        sbi->s_ifile = NULL;
  
 + delist:
        down_write(&nilfs->ns_super_sem);
        list_del_init(&sbi->s_list);
        up_write(&nilfs->ns_super_sem);