Revert "Bluetooth: Store advertising handle so it can be re-enabled"
[platform/kernel/linux-rpi.git] / fs / gfs2 / inode.c
index fadf5c1..4e63fbb 100644 (file)
@@ -696,7 +696,7 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
        set_nlink(inode, S_ISDIR(mode) ? 2 : 1);
        inode->i_rdev = dev;
        inode->i_size = size;
-       inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
+       inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
        munge_mode_uid_gid(dip, inode);
        check_and_update_goal(dip);
        ip->i_goal = dip->i_goal;
@@ -1035,7 +1035,7 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
 
        gfs2_trans_add_meta(ip->i_gl, dibh);
        inc_nlink(&ip->i_inode);
-       ip->i_inode.i_ctime = current_time(&ip->i_inode);
+       inode_set_ctime_current(&ip->i_inode);
        ihold(inode);
        d_instantiate(dentry, inode);
        mark_inode_dirty(inode);
@@ -1120,7 +1120,7 @@ static int gfs2_unlink_inode(struct gfs2_inode *dip,
                return error;
 
        ip->i_entries = 0;
-       inode->i_ctime = current_time(inode);
+       inode_set_ctime_current(inode);
        if (S_ISDIR(inode->i_mode))
                clear_nlink(inode);
        else
@@ -1377,7 +1377,7 @@ static int update_moved_ino(struct gfs2_inode *ip, struct gfs2_inode *ndip,
        if (dir_rename)
                return gfs2_dir_mvino(ip, &gfs2_qdotdot, ndip, DT_DIR);
 
-       ip->i_inode.i_ctime = current_time(&ip->i_inode);
+       inode_set_ctime_current(&ip->i_inode);
        mark_inode_dirty_sync(&ip->i_inode);
        return 0;
 }
@@ -1866,16 +1866,24 @@ out:
 int gfs2_permission(struct mnt_idmap *idmap, struct inode *inode,
                    int mask)
 {
+       int may_not_block = mask & MAY_NOT_BLOCK;
        struct gfs2_inode *ip;
        struct gfs2_holder i_gh;
+       struct gfs2_glock *gl;
        int error;
 
        gfs2_holder_mark_uninitialized(&i_gh);
        ip = GFS2_I(inode);
-       if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
-               if (mask & MAY_NOT_BLOCK)
+       gl = rcu_dereference_check(ip->i_gl, !may_not_block);
+       if (unlikely(!gl)) {
+               /* inode is getting torn down, must be RCU mode */
+               WARN_ON_ONCE(!may_not_block);
+               return -ECHILD;
+        }
+       if (gfs2_glock_is_locked_by_me(gl) == NULL) {
+               if (may_not_block)
                        return -ECHILD;
-               error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
+               error = gfs2_glock_nq_init(gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
                if (error)
                        return error;
        }
@@ -2077,7 +2085,7 @@ static int gfs2_getattr(struct mnt_idmap *idmap,
                                  STATX_ATTR_IMMUTABLE |
                                  STATX_ATTR_NODUMP);
 
-       generic_fillattr(&nop_mnt_idmap, inode, stat);
+       generic_fillattr(&nop_mnt_idmap, request_mask, inode, stat);
 
        if (gfs2_holder_initialized(&gh))
                gfs2_glock_dq_uninit(&gh);
@@ -2145,8 +2153,7 @@ loff_t gfs2_seek_hole(struct file *file, loff_t offset)
        return vfs_setpos(file, ret, inode->i_sb->s_maxbytes);
 }
 
-static int gfs2_update_time(struct inode *inode, struct timespec64 *time,
-                           int flags)
+static int gfs2_update_time(struct inode *inode, int flags)
 {
        struct gfs2_inode *ip = GFS2_I(inode);
        struct gfs2_glock *gl = ip->i_gl;
@@ -2161,7 +2168,8 @@ static int gfs2_update_time(struct inode *inode, struct timespec64 *time,
                if (error)
                        return error;
        }
-       return generic_update_time(inode, time, flags);
+       generic_update_time(inode, flags);
+       return 0;
 }
 
 static const struct inode_operations gfs2_file_iops = {