From: Beata Michalska <b.michalska@samsung.com> To: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org Cc: greg@kroah.com, jack@suse.cz, tytso@mit.edu, adilger.kernel@dilger.ca, hughd@google.com, lczerner@redhat.com, hch@infradead.org, linux-ext4@vger.kernel.org, linux-mm@kvack.org, kyungmin.park@samsung.com, kmpark@infradead.org Subject: [RFC v3 4/4] shmem: Add support for generic FS events Date: Tue, 16 Jun 2015 15:09:33 +0200 [thread overview] Message-ID: <1434460173-18427-5-git-send-email-b.michalska@samsung.com> (raw) In-Reply-To: <1434460173-18427-1-git-send-email-b.michalska@samsung.com> Add support for the generic FS events interface covering threshold notifiactions and the ENOSPC warning. Signed-off-by: Beata Michalska <b.michalska@samsung.com> --- mm/shmem.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index cf2d0ca..a044d12 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -201,6 +201,7 @@ static int shmem_reserve_inode(struct super_block *sb) spin_lock(&sbinfo->stat_lock); if (!sbinfo->free_inodes) { spin_unlock(&sbinfo->stat_lock); + fs_event_notify(sb, FS_WARN_ENOSPC); return -ENOSPC; } sbinfo->free_inodes--; @@ -239,8 +240,10 @@ static void shmem_recalc_inode(struct inode *inode) freed = info->alloced - info->swapped - inode->i_mapping->nrpages; if (freed > 0) { struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb); - if (sbinfo->max_blocks) + if (sbinfo->max_blocks) { percpu_counter_add(&sbinfo->used_blocks, -freed); + fs_event_free_space(inode->i_sb, freed); + } info->alloced -= freed; inode->i_blocks -= freed * BLOCKS_PER_PAGE; shmem_unacct_blocks(info->flags, freed); @@ -1164,6 +1167,7 @@ repeat: goto unacct; } percpu_counter_inc(&sbinfo->used_blocks); + fs_event_alloc_space(inode->i_sb, 1); } page = shmem_alloc_page(gfp, info, index); @@ -1245,8 +1249,10 @@ trunc: spin_unlock(&info->lock); decused: sbinfo = SHMEM_SB(inode->i_sb); - if (sbinfo->max_blocks) + if (sbinfo->max_blocks) { percpu_counter_add(&sbinfo->used_blocks, -1); + fs_event_free_space(inode->i_sb, 1); + } unacct: shmem_unacct_blocks(info->flags, 1); failed: @@ -1258,12 +1264,16 @@ unlock: unlock_page(page); page_cache_release(page); } - if (error == -ENOSPC && !once++) { + if (error == -ENOSPC) { + if (!once++) { info = SHMEM_I(inode); spin_lock(&info->lock); shmem_recalc_inode(inode); spin_unlock(&info->lock); goto repeat; + } else { + fs_event_notify(inode->i_sb, FS_WARN_ENOSPC); + } } if (error == -EEXIST) /* from above or from radix_tree_insert */ goto repeat; @@ -2729,12 +2739,26 @@ static int shmem_encode_fh(struct inode *inode, __u32 *fh, int *len, return 1; } +static void shmem_trace_query(struct super_block *sb, u64 *ncount) +{ + struct shmem_sb_info *sbinfo = SHMEM_SB(sb); + + if (sbinfo->max_blocks) + *ncount = sbinfo->max_blocks - + percpu_counter_sum(&sbinfo->used_blocks); + +} + static const struct export_operations shmem_export_ops = { .get_parent = shmem_get_parent, .encode_fh = shmem_encode_fh, .fh_to_dentry = shmem_fh_to_dentry, }; +static const struct fs_trace_operations shmem_trace_ops = { + .query = shmem_trace_query, +}; + static int shmem_parse_options(char *options, struct shmem_sb_info *sbinfo, bool remount) { @@ -3020,6 +3044,9 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) sb->s_flags |= MS_NOUSER; } sb->s_export_op = &shmem_export_ops; + sb->s_etrace.ops = &shmem_trace_ops; + sb->s_etrace.events_cap_mask = FS_EVENTS_ALL; + sb->s_flags |= MS_NOSEC; #else sb->s_flags |= MS_NOUSER; -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Beata Michalska <b.michalska@samsung.com> To: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org Cc: greg@kroah.com, jack@suse.cz, tytso@mit.edu, adilger.kernel@dilger.ca, hughd@google.com, lczerner@redhat.com, hch@infradead.org, linux-ext4@vger.kernel.org, linux-mm@kvack.org, kyungmin.park@samsung.com, kmpark@infradead.org Subject: [RFC v3 4/4] shmem: Add support for generic FS events Date: Tue, 16 Jun 2015 15:09:33 +0200 [thread overview] Message-ID: <1434460173-18427-5-git-send-email-b.michalska@samsung.com> (raw) In-Reply-To: <1434460173-18427-1-git-send-email-b.michalska@samsung.com> Add support for the generic FS events interface covering threshold notifiactions and the ENOSPC warning. Signed-off-by: Beata Michalska <b.michalska@samsung.com> --- mm/shmem.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index cf2d0ca..a044d12 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -201,6 +201,7 @@ static int shmem_reserve_inode(struct super_block *sb) spin_lock(&sbinfo->stat_lock); if (!sbinfo->free_inodes) { spin_unlock(&sbinfo->stat_lock); + fs_event_notify(sb, FS_WARN_ENOSPC); return -ENOSPC; } sbinfo->free_inodes--; @@ -239,8 +240,10 @@ static void shmem_recalc_inode(struct inode *inode) freed = info->alloced - info->swapped - inode->i_mapping->nrpages; if (freed > 0) { struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb); - if (sbinfo->max_blocks) + if (sbinfo->max_blocks) { percpu_counter_add(&sbinfo->used_blocks, -freed); + fs_event_free_space(inode->i_sb, freed); + } info->alloced -= freed; inode->i_blocks -= freed * BLOCKS_PER_PAGE; shmem_unacct_blocks(info->flags, freed); @@ -1164,6 +1167,7 @@ repeat: goto unacct; } percpu_counter_inc(&sbinfo->used_blocks); + fs_event_alloc_space(inode->i_sb, 1); } page = shmem_alloc_page(gfp, info, index); @@ -1245,8 +1249,10 @@ trunc: spin_unlock(&info->lock); decused: sbinfo = SHMEM_SB(inode->i_sb); - if (sbinfo->max_blocks) + if (sbinfo->max_blocks) { percpu_counter_add(&sbinfo->used_blocks, -1); + fs_event_free_space(inode->i_sb, 1); + } unacct: shmem_unacct_blocks(info->flags, 1); failed: @@ -1258,12 +1264,16 @@ unlock: unlock_page(page); page_cache_release(page); } - if (error == -ENOSPC && !once++) { + if (error == -ENOSPC) { + if (!once++) { info = SHMEM_I(inode); spin_lock(&info->lock); shmem_recalc_inode(inode); spin_unlock(&info->lock); goto repeat; + } else { + fs_event_notify(inode->i_sb, FS_WARN_ENOSPC); + } } if (error == -EEXIST) /* from above or from radix_tree_insert */ goto repeat; @@ -2729,12 +2739,26 @@ static int shmem_encode_fh(struct inode *inode, __u32 *fh, int *len, return 1; } +static void shmem_trace_query(struct super_block *sb, u64 *ncount) +{ + struct shmem_sb_info *sbinfo = SHMEM_SB(sb); + + if (sbinfo->max_blocks) + *ncount = sbinfo->max_blocks - + percpu_counter_sum(&sbinfo->used_blocks); + +} + static const struct export_operations shmem_export_ops = { .get_parent = shmem_get_parent, .encode_fh = shmem_encode_fh, .fh_to_dentry = shmem_fh_to_dentry, }; +static const struct fs_trace_operations shmem_trace_ops = { + .query = shmem_trace_query, +}; + static int shmem_parse_options(char *options, struct shmem_sb_info *sbinfo, bool remount) { @@ -3020,6 +3044,9 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) sb->s_flags |= MS_NOUSER; } sb->s_export_op = &shmem_export_ops; + sb->s_etrace.ops = &shmem_trace_ops; + sb->s_etrace.events_cap_mask = FS_EVENTS_ALL; + sb->s_flags |= MS_NOSEC; #else sb->s_flags |= MS_NOUSER; -- 1.7.9.5 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2015-06-16 13:10 UTC|newest] Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-06-16 13:09 [RFC v3 0/4] fs: Add generic file system event notifications Beata Michalska 2015-06-16 13:09 ` Beata Michalska 2015-06-16 13:09 ` [RFC v3 1/4] " Beata Michalska 2015-06-16 13:09 ` Beata Michalska 2015-06-16 16:21 ` Al Viro 2015-06-16 16:21 ` Al Viro 2015-06-16 16:21 ` Al Viro 2015-06-17 9:22 ` Beata Michalska 2015-06-17 9:22 ` Beata Michalska 2015-06-17 23:06 ` Dave Chinner 2015-06-17 23:06 ` Dave Chinner 2015-06-18 8:25 ` Beata Michalska 2015-06-18 8:25 ` Beata Michalska 2015-06-19 0:03 ` Dave Chinner 2015-06-19 0:03 ` Dave Chinner 2015-06-19 17:28 ` Beata Michalska 2015-06-19 17:28 ` Beata Michalska 2015-06-19 17:28 ` Beata Michalska 2015-06-19 23:21 ` Dave Chinner 2015-06-19 23:21 ` Dave Chinner 2015-06-22 15:46 ` Beata Michalska 2015-06-22 15:46 ` Beata Michalska 2015-06-18 11:17 ` Kinglong Mee 2015-06-18 11:17 ` Kinglong Mee 2015-06-18 14:50 ` Beata Michalska 2015-06-18 14:50 ` Beata Michalska 2015-06-24 8:47 ` Dmitry Monakhov 2015-06-24 8:47 ` Dmitry Monakhov 2015-06-24 15:31 ` Beata Michalska 2015-06-24 15:31 ` Beata Michalska 2015-06-24 16:26 ` Steve French 2015-06-24 16:26 ` Steve French 2015-06-26 7:30 ` Beata Michalska 2015-06-26 7:30 ` Beata Michalska 2015-07-22 15:55 ` Bartlomiej Zolnierkiewicz 2015-07-22 15:55 ` Bartlomiej Zolnierkiewicz 2015-07-30 8:22 ` Beata Michalska 2015-07-30 8:22 ` Beata Michalska 2015-06-16 13:09 ` [RFC v3 2/4] ext4: Add helper function to mark group as corrupted Beata Michalska 2015-06-16 13:09 ` Beata Michalska 2015-07-22 10:40 ` Bartlomiej Zolnierkiewicz 2015-07-22 10:40 ` Bartlomiej Zolnierkiewicz 2015-06-16 13:09 ` [RFC v3 3/4] ext4: Add support for generic FS events Beata Michalska 2015-06-16 13:09 ` Beata Michalska 2015-06-16 13:09 ` Beata Michalska 2015-06-17 6:15 ` Leon Romanovsky 2015-06-17 6:15 ` Leon Romanovsky 2015-06-17 9:25 ` Beata Michalska 2015-06-17 9:25 ` Beata Michalska 2015-06-16 13:09 ` Beata Michalska [this message] 2015-06-16 13:09 ` [RFC v3 4/4] shmem: " Beata Michalska 2015-06-17 6:08 ` Leon Romanovsky 2015-06-17 6:08 ` Leon Romanovsky 2015-06-17 9:23 ` Beata Michalska 2015-06-17 9:23 ` Beata Michalska
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1434460173-18427-5-git-send-email-b.michalska@samsung.com \ --to=b.michalska@samsung.com \ --cc=adilger.kernel@dilger.ca \ --cc=greg@kroah.com \ --cc=hch@infradead.org \ --cc=hughd@google.com \ --cc=jack@suse.cz \ --cc=kmpark@infradead.org \ --cc=kyungmin.park@samsung.com \ --cc=lczerner@redhat.com \ --cc=linux-api@vger.kernel.org \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=tytso@mit.edu \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.