Message ID | 1522934301-6520-17-git-send-email-amir73il@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu 05-04-18 16:18:17, Amir Goldstein wrote: > Use helper fsnotify_connector_obj() helper to reduce object type > dependent code. > > Signed-off-by: Amir Goldstein <amir73il@gmail.com> So up to this patch I had only minor comments so once you address them could you please send these preparatory cleanups, I'll go through them and can then queue them up for 4.18-rc1? I like them and I think they are worthwhile cleanups regardless of the new watch type so we don't need to delay them more than necessary... Honza > --- > fs/notify/mark.c | 21 ++++++++------------- > include/linux/fsnotify_backend.h | 1 + > 2 files changed, 9 insertions(+), 13 deletions(-) > > diff --git a/fs/notify/mark.c b/fs/notify/mark.c > index 53bacbce1145..3b19ed700ac3 100644 > --- a/fs/notify/mark.c > +++ b/fs/notify/mark.c > @@ -177,19 +177,14 @@ static void fsnotify_connector_destroy_workfn(struct work_struct *work) > static struct inode *fsnotify_detach_connector_from_object( > struct fsnotify_mark_connector *conn) > { > - struct inode *inode = NULL; > - > - if (conn->type == FSNOTIFY_OBJ_TYPE_INODE) { > - inode = conn->inode; > - rcu_assign_pointer(inode->i_fsnotify.marks, NULL); > - inode->i_fsnotify.mask = 0; > - conn->inode = NULL; > - conn->type = FSNOTIFY_OBJ_TYPE_DETACHED; > - } else if (conn->type == FSNOTIFY_OBJ_TYPE_VFSMOUNT) { > - rcu_assign_pointer(real_mount(conn->mnt)->mnt_fsnotify.marks, > - NULL); > - real_mount(conn->mnt)->mnt_fsnotify.mask = 0; > - conn->mnt = NULL; > + struct fsnotify_obj *obj = fsnotify_connector_obj(conn); > + struct inode *inode = (conn->type == FSNOTIFY_OBJ_TYPE_INODE) ? > + conn->inode : NULL; > + > + if (obj) { > + rcu_assign_pointer(obj->marks, NULL); > + obj->mask = 0; > + conn->object = NULL; > conn->type = FSNOTIFY_OBJ_TYPE_DETACHED; > } > > diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h > index 9a908b96909e..abbd7311077f 100644 > --- a/include/linux/fsnotify_backend.h > +++ b/include/linux/fsnotify_backend.h > @@ -275,6 +275,7 @@ struct fsnotify_mark_connector { > spinlock_t lock; > unsigned int type; /* Type of object [lock] */ > union { /* Object pointer [lock] */ > + void *object; > struct inode *inode; > struct vfsmount *mnt; > }; > -- > 2.7.4 >
On Thu, Apr 19, 2018 at 4:59 PM, Jan Kara <jack@suse.cz> wrote: > On Thu 05-04-18 16:18:17, Amir Goldstein wrote: >> Use helper fsnotify_connector_obj() helper to reduce object type >> dependent code. >> >> Signed-off-by: Amir Goldstein <amir73il@gmail.com> > > So up to this patch I had only minor comments so once you address them > could you please send these preparatory cleanups, I'll go through them and > can then queue them up for 4.18-rc1? I like them and I think they are > worthwhile cleanups regardless of the new watch type so we don't need to > delay them more than necessary... > Will do. Will also top them up with this fanotify refactoring patch: [19/20] fanotify: factor out helpers to add/remove mark Thanks, Amir.
diff --git a/fs/notify/mark.c b/fs/notify/mark.c index 53bacbce1145..3b19ed700ac3 100644 --- a/fs/notify/mark.c +++ b/fs/notify/mark.c @@ -177,19 +177,14 @@ static void fsnotify_connector_destroy_workfn(struct work_struct *work) static struct inode *fsnotify_detach_connector_from_object( struct fsnotify_mark_connector *conn) { - struct inode *inode = NULL; - - if (conn->type == FSNOTIFY_OBJ_TYPE_INODE) { - inode = conn->inode; - rcu_assign_pointer(inode->i_fsnotify.marks, NULL); - inode->i_fsnotify.mask = 0; - conn->inode = NULL; - conn->type = FSNOTIFY_OBJ_TYPE_DETACHED; - } else if (conn->type == FSNOTIFY_OBJ_TYPE_VFSMOUNT) { - rcu_assign_pointer(real_mount(conn->mnt)->mnt_fsnotify.marks, - NULL); - real_mount(conn->mnt)->mnt_fsnotify.mask = 0; - conn->mnt = NULL; + struct fsnotify_obj *obj = fsnotify_connector_obj(conn); + struct inode *inode = (conn->type == FSNOTIFY_OBJ_TYPE_INODE) ? + conn->inode : NULL; + + if (obj) { + rcu_assign_pointer(obj->marks, NULL); + obj->mask = 0; + conn->object = NULL; conn->type = FSNOTIFY_OBJ_TYPE_DETACHED; } diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 9a908b96909e..abbd7311077f 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h @@ -275,6 +275,7 @@ struct fsnotify_mark_connector { spinlock_t lock; unsigned int type; /* Type of object [lock] */ union { /* Object pointer [lock] */ + void *object; struct inode *inode; struct vfsmount *mnt; };
Use helper fsnotify_connector_obj() helper to reduce object type dependent code. Signed-off-by: Amir Goldstein <amir73il@gmail.com> --- fs/notify/mark.c | 21 ++++++++------------- include/linux/fsnotify_backend.h | 1 + 2 files changed, 9 insertions(+), 13 deletions(-)