linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nikolay Borisov <nborisov@suse.com>
To: Namjae Jeon <namjae.jeon@samsung.com>,
	linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Cc: gregkh@linuxfoundation.org, valdis.kletnieks@vt.edu, hch@lst.de,
	linkinjeon@gmail.com, Markus.Elfring@web.de,
	sj1557.seo@samsung.com
Subject: Re: [PATCH v2 05/13] exfat: add file operations
Date: Wed, 20 Nov 2019 11:14:20 +0200	[thread overview]
Message-ID: <398eeca9-e59f-385b-791d-561e56567026@suse.com> (raw)
In-Reply-To: <20191119071107.1947-6-namjae.jeon@samsung.com>



On 19.11.19 г. 9:10 ч., Namjae Jeon wrote:
> This adds the implementation of file operations for exfat.
> 
> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
> Signed-off-by: Sungjong Seo <sj1557.seo@samsung.com>
> ---
>  fs/exfat/file.c | 346 ++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 346 insertions(+)
>  create mode 100644 fs/exfat/file.c
> 
> diff --git a/fs/exfat/file.c b/fs/exfat/file.c
> new file mode 100644
> index 000000000000..5afd65a36eb5
> --- /dev/null
> +++ b/fs/exfat/file.c
> @@ -0,0 +1,346 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd.
> + */
> +
> +#include <linux/slab.h>
> +#include <linux/cred.h>
> +#include <linux/buffer_head.h>
> +
> +#include "exfat_raw.h"
> +#include "exfat_fs.h"
> +

<snip>

> +
> +static int exfat_allow_set_time(struct exfat_sb_info *sbi, struct inode *inode)
> +{
> +	mode_t allow_utime = sbi->options.allow_utime;
> +
> +	if (!uid_eq(current_fsuid(), inode->i_uid)) {
> +		if (in_group_p(inode->i_gid))
> +			allow_utime >>= 3;
> +		if (allow_utime & MAY_WRITE)
> +			return 1;
> +	}
> +
> +	/* use a default check */
> +	return 0;

this function can be made to return bool.

> +}
> +

<snip>

> +/* resize the file length */
> +int __exfat_truncate(struct inode *inode, loff_t new_size)
> +{
> +	unsigned int num_clusters_new, num_clusters_phys;
> +	unsigned int last_clu = FREE_CLUSTER;
> +	struct exfat_chain clu;
> +	struct exfat_timestamp tm;
> +	struct exfat_dentry *ep, *ep2;
> +	struct super_block *sb = inode->i_sb;
> +	struct exfat_sb_info *sbi = EXFAT_SB(sb);
> +	struct exfat_inode_info *ei = EXFAT_I(inode);
> +	struct exfat_entry_set_cache *es = NULL;
> +	int evict = (ei->dir.dir == DIR_DELETED) ? 1 : 0;
> +
> +	/* check if the given file ID is opened */
> +	if (ei->type != TYPE_FILE && ei->type != TYPE_DIR)
> +		return -EPERM;
> +
> +	exfat_set_vol_flags(sb, VOL_DIRTY);
> +
> +	num_clusters_new = EXFAT_B_TO_CLU_ROUND_UP(i_size_read(inode), sbi);
> +	num_clusters_phys =
> +		EXFAT_B_TO_CLU_ROUND_UP(EXFAT_I(inode)->i_size_ondisk, sbi);
> +
> +	exfat_chain_set(&clu, ei->start_clu, num_clusters_phys, ei->flags);
> +
> +	if (new_size > 0) {
> +		/*
> +		 * Truncate FAT chain num_clusters after the first cluster
> +		 * num_clusters = min(new, phys);
> +		 */
> +		unsigned int num_clusters =
> +			min(num_clusters_new, num_clusters_phys);
> +
> +		/*
> +		 * Follow FAT chain
> +		 * (defensive coding - works fine even with corrupted FAT table
> +		 */
> +		if (clu.flags == 0x03) {

That 0x03 is magic constant, better define actual flags and check
clu.flag == (FLAG1|FLAG2)

> +			clu.dir += num_clusters;
> +			clu.size -= num_clusters;
> +		} else {
> +			while (num_clusters > 0) {
> +				last_clu = clu.dir;
> +				if (exfat_get_next_cluster(sb, &(clu.dir)))
> +					return -EIO;
> +
> +				num_clusters--;
> +				clu.size--;
> +			}
> +		}
> +	} else {
> +		ei->flags = 0x03;

again, magic constant.
> +		ei->start_clu = EOF_CLUSTER;
> +	}
> +
> +	i_size_write(inode, new_size);
> +
> +	if (ei->type == TYPE_FILE)
> +		ei->attr |= ATTR_ARCHIVE;

<snip>

  reply	other threads:[~2019-11-20  9:14 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20191119071401epcas1p4a42c781276e89928a24d53379fe13d64@epcas1p4.samsung.com>
2019-11-19  7:10 ` [PATCH v2 00/13] add the latest exfat driver Namjae Jeon
     [not found]   ` <CGME20191119071402epcas1p138f426d591ee81b65f45d092bcad0ebc@epcas1p1.samsung.com>
2019-11-19  7:10     ` [PATCH v2 01/13] exfat: add in-memory and on-disk structures and headers Namjae Jeon
2019-11-20  9:22       ` Nikolay Borisov
     [not found]   ` <CGME20191119071403epcas1p3f3d69faad57984fa3d079cf18f0a46dc@epcas1p3.samsung.com>
2019-11-19  7:10     ` [PATCH v2 02/13] exfat: add super block operations Namjae Jeon
2019-11-19  8:56       ` Daniel Wagner
2019-11-19  9:22         ` Namjae Jeon
2019-11-19 17:17           ` Christoph Hellwig
2019-11-20  4:33             ` Namjae Jeon
     [not found]   ` <CGME20191119071403epcas1p2e2a6d2fca608587547027e46d2185cb9@epcas1p2.samsung.com>
2019-11-19  7:10     ` [PATCH v2 03/13] exfat: add inode operations Namjae Jeon
     [not found]   ` <CGME20191119071404epcas1p4a26ef051aecc9386f90111eddaa4e8f5@epcas1p4.samsung.com>
2019-11-19  7:10     ` [PATCH v2 04/13] exfat: add directory operations Namjae Jeon
     [not found]   ` <CGME20191119071404epcas1p4f8df45690c07c4dd032af9cbfb5efcc6@epcas1p4.samsung.com>
2019-11-19  7:10     ` [PATCH v2 05/13] exfat: add file operations Namjae Jeon
2019-11-20  9:14       ` Nikolay Borisov [this message]
2019-11-21  1:42         ` Namjae Jeon
2019-11-21  3:18           ` Valdis Klētnieks
2019-11-21  3:39             ` Namjae Jeon
     [not found]   ` <CGME20191119071405epcas1p29e1af8242cce221c45eb529921028e48@epcas1p2.samsung.com>
2019-11-19  7:11     ` [PATCH v2 06/13] exfat: add exfat entry operations Namjae Jeon
2019-11-20  9:19       ` Nikolay Borisov
     [not found]   ` <CGME20191119071405epcas1p2c282cb850ef14d181208554796403739@epcas1p2.samsung.com>
2019-11-19  7:11     ` [PATCH v2 07/13] exfat: add bitmap operations Namjae Jeon
2019-11-20  9:24       ` Nikolay Borisov
     [not found]   ` <CGME20191119071406epcas1p34788f32abd876190f2b0a5c2ba39e4b1@epcas1p3.samsung.com>
2019-11-19  7:11     ` [PATCH v2 08/13] exfat: add exfat cache Namjae Jeon
     [not found]   ` <CGME20191119071406epcas1p285f075eac966cfdd6f79362ecc433d6b@epcas1p2.samsung.com>
2019-11-19  7:11     ` [PATCH v2 09/13] exfat: add misc operations Namjae Jeon
2020-01-08 19:53       ` Arnd Bergmann
2020-01-09 23:35         ` Namjae Jeon
     [not found]   ` <CGME20191119071407epcas1p4af1dc25ff22a70050b87f82be4cdf731@epcas1p4.samsung.com>
2019-11-19  7:11     ` [PATCH v2 10/13] exfat: add nls operations Namjae Jeon
     [not found]   ` <CGME20191119071408epcas1p355692e5e4b48c7c08617974715ae636d@epcas1p3.samsung.com>
2019-11-19  7:11     ` [PATCH v2 11/13] exfat: add Kconfig and Makefile Namjae Jeon
     [not found]   ` <CGME20191119071409epcas1p1b2464462c7972c11ae8719528f0c43a8@epcas1p1.samsung.com>
2019-11-19  7:11     ` [PATCH v2 12/13] exfat: add exfat in fs/Kconfig and fs/Makefile Namjae Jeon
     [not found]   ` <CGME20191119071409epcas1p2253bc4b3be05ac82201126bc62bd37ac@epcas1p2.samsung.com>
2019-11-19  7:11     ` [PATCH v2 13/13] MAINTAINERS: add exfat filesystem Namjae Jeon

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=398eeca9-e59f-385b-791d-561e56567026@suse.com \
    --to=nborisov@suse.com \
    --cc=Markus.Elfring@web.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=hch@lst.de \
    --cc=linkinjeon@gmail.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namjae.jeon@samsung.com \
    --cc=sj1557.seo@samsung.com \
    --cc=valdis.kletnieks@vt.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).