From: Volker Lendecke Date: Tue, 27 Jan 2026 12:21:24 +0000 (+0100) Subject: smbd: Make get_dfree_info() take a fsp X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=62bf4a854b1a3151a7943f58872440075102957a;p=thirdparty%2Fsamba.git smbd: Make get_dfree_info() take a fsp Signed-off-by: Volker Lendecke Reviewed-by: Anoop C S --- diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index 480886d7d38..a4a5b54ecb7 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -3011,8 +3011,7 @@ static int strict_allocate_ftruncate(vfs_handle_struct *handle, files_struct *fs "error %d. Falling back to slow manual allocation\n", errno); /* available disk space is enough or not? */ - space_avail = - get_dfree_info(fsp->conn, fsp->fsp_name, &bsize, &dfree, &dsize); + space_avail = get_dfree_info(fsp, &bsize, &dfree, &dsize); /* space_avail is 1k blocks */ if (space_avail == (uint64_t)-1 || ((uint64_t)space_to_write/1024 > space_avail) ) { diff --git a/source3/smbd/dfree.c b/source3/smbd/dfree.c index c046bdda916..e7f4ecc8acc 100644 --- a/source3/smbd/dfree.c +++ b/source3/smbd/dfree.c @@ -213,9 +213,13 @@ struct dfree_cached_info { uint64_t dsize; }; -uint64_t get_dfree_info(connection_struct *conn, struct smb_filename *fname, - uint64_t *bsize, uint64_t *dfree, uint64_t *dsize) +uint64_t get_dfree_info(struct files_struct *fsp, + uint64_t *bsize, + uint64_t *dfree, + uint64_t *dsize) { + struct connection_struct *conn = fsp->conn; + struct smb_filename *fname = fsp->fsp_name; int dfree_cache_time = lp_dfree_cache_time(SNUM(conn)); struct dfree_cached_info *dfc = NULL; struct dfree_cached_info dfc_new = { 0 }; diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index 4c97c3a2b0b..26a6b6d9176 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -182,8 +182,10 @@ bool connections_snum_used(struct smbd_server_connection *unused, int snum); /* The following definitions come from smbd/dfree.c */ -uint64_t get_dfree_info(connection_struct *conn, struct smb_filename *fname, - uint64_t *bsize, uint64_t *dfree, uint64_t *dsize); +uint64_t get_dfree_info(struct files_struct *fsp, + uint64_t *bsize, + uint64_t *dfree, + uint64_t *dsize); void flush_dfree_cache(void); /* The following definitions come from smbd/dmapi.c */ diff --git a/source3/smbd/smb1_reply.c b/source3/smbd/smb1_reply.c index d04b2493196..152b2641e16 100644 --- a/source3/smbd/smb1_reply.c +++ b/source3/smbd/smb1_reply.c @@ -1008,7 +1008,7 @@ void reply_dskattr(struct smb_request *req) return; } - ret = get_dfree_info(conn, dot->fsp->fsp_name, &bsize, &dfree, &dsize); + ret = get_dfree_info(dot->fsp, &bsize, &dfree, &dsize); TALLOC_FREE(dot); diff --git a/source3/smbd/smb2_trans2.c b/source3/smbd/smb2_trans2.c index 2cdc4606e54..e1bb2ef8214 100644 --- a/source3/smbd/smb2_trans2.c +++ b/source3/smbd/smb2_trans2.c @@ -2042,8 +2042,7 @@ NTSTATUS smbd_do_qfsinfo(struct smbXsrv_connection *xconn, { uint64_t dfree,dsize,bsize,block_size,sectors_per_unit; data_len = 18; - df_ret = get_dfree_info( - conn, fsp->fsp_name, &bsize, &dfree, &dsize); + df_ret = get_dfree_info(fsp, &bsize, &dfree, &dsize); if (df_ret == (uint64_t)-1) { return map_nt_error_from_unix(errno); } @@ -2203,8 +2202,7 @@ NTSTATUS smbd_do_qfsinfo(struct smbXsrv_connection *xconn, { uint64_t dfree,dsize,bsize,block_size,sectors_per_unit; data_len = 24; - df_ret = get_dfree_info( - conn, fsp->fsp_name, &bsize, &dfree, &dsize); + df_ret = get_dfree_info(fsp, &bsize, &dfree, &dsize); if (df_ret == (uint64_t)-1) { return map_nt_error_from_unix(errno); } @@ -2245,8 +2243,7 @@ NTSTATUS smbd_do_qfsinfo(struct smbXsrv_connection *xconn, { uint64_t dfree,dsize,bsize,block_size,sectors_per_unit; data_len = 32; - df_ret = get_dfree_info( - conn, fsp->fsp_name, &bsize, &dfree, &dsize); + df_ret = get_dfree_info(fsp, &bsize, &dfree, &dsize); if (df_ret == (uint64_t)-1) { return map_nt_error_from_unix(errno); } diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index ab61f012b24..9322221940e 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -613,8 +613,7 @@ int vfs_allocate_file_space(files_struct *fsp, uint64_t len) len -= fsp->fsp_name->st.st_ex_size; len /= 1024; /* Len is now number of 1k blocks needed. */ - space_avail = - get_dfree_info(conn, fsp->fsp_name, &bsize, &dfree, &dsize); + space_avail = get_dfree_info(fsp, &bsize, &dfree, &dsize); if (space_avail == (uint64_t)-1) { return -1; }